【问题标题】:Word/Phrase classification词/短语分类
【发布时间】:2020-07-22 13:33:59
【问题描述】:

我有一列包含 5000 条字符串记录。这些记录是单个单词或短语(不是句子或段落)。这些记录中的大多数是相似的或包含相似的元素(例如“办公室”、“办公室”、“底层办公室”)。此外,有人手动将其中的 300 条记录分为五类(即住宅、工业、办公室、零售、其他),这意味着我可以使用它来开发监督机器学习模型。我对 word2vec 进行了一些研究,但似乎它们适用于文本,而不是单个单词和短语。请告诉我如何进行分类。请注意,该列中的记录数量正在增长,并且将来会添加新记录,因此该解决方案必须能够对新记录进行分类。

示例输入和所需输出如下:

'industrial' -> 'Industrial'
'Warehouse' -> 'Industrial'
'Workshop' -> 'Industrial'
'rear warehouse' -> 'Industrial'
'office suite' -> 'office'
'office/warehouse' -> 'office'
'office(b1)' -> 'office'
'house' -> 'Residential'
'suite' -> 'Residential'
'restaurant' -> 'Retail'
'retail unit with 3 bedroom dwelling above' -> 'Retail'
'shoe shop' -> 'Retail'
'unit 56' -> 'Other'
'24 Hastings street' -> 'Other'

Input & Output

【问题讨论】:

  • 你终于设法训练出一个词分类模型了吗?我正在解决类似的问题,可以使用您的建议。谢谢。

标签: python machine-learning nlp word2vec


【解决方案1】:

你有一个非常典型的文本分类任务。

您可以使用许多分类算法,但您的任务中选择/改进的主要领域可能是:

  • 特征提取和特征工程:如何将这些短文本转化为可以学习规则/阈值的数字数据?
  • 整体流程问题:对于任何无法从现有数据中学习的“棘手案例”,无论是最初还是随着时间的推移,如何将必要的更正反馈到改进的系统中

最初,您应该尝试将“词袋”和“字符 n-gram”(单独或一起)作为将短文本转换为特征向量的方法。仅此一点,只要有足够的训练数据,就可以处理您迄今为止展示的大多数情况,因为它可以帮助任何分类算法发现某些“灌篮”规则。

例如,这将有效地了解“商店”可能总是暗示“零售”,或“房子”总是暗示“住宅”,或“办公室”暗示商业。并且使用字符 n-gram 还将为模型提供有关如何处理相同单词的其他拼写错误或变体形式的线索。

会有处理不好的情况。我猜你会希望单独的“三居室住宅”成为“住宅”——但在你的例子中,你将“上面有 3 居室住宅的零售单元”归类为“零售”。有足够多的期望行为示例,分类器可能会正确,因为它要么将“零售”视为具有更高优先级的类别,要么将其他词(如“以上”)暗示通常应该以一种或另一种方式分类的混合用途.

当您查看处理不好的案例时,您将能够考虑更高级的方法,例如可能使用词向量来表示不一定在您的(小)训练集中的词,但可以被认为是已知单词的近义词。 (例如,处理训练集未知的单词的一种可能策略是使用一些外部的、更大的 word2vec 模型将任何未知单词替换为最接近的已知单词。)

但是,您应该真正从最简单的功能方法开始,看看它们能让您走多远,从而为以后的改进设定基线。然后,考虑更高级和自定义的技术。

【讨论】:

  • 感谢您的回答。我对 NLP 很陌生。您能否提供有关这些步骤的更多详细信息和说明?作为 NLP 新手,您可以向我推荐任何已发表的帖子/文章吗?有什么 Python 或 R 代码可以开始吗?
  • 我只是寻找专注于文本分类的在线教程或 ML 课程。 scikit-learn 文档包含很多好东西,包括:scikit-learn.org/stable/tutorial/text_analytics/…>。 Jake Vanderplas (github.com/jakevdp) 和 Olivier Grisel (github.com/ogrisel) 有许多在线笔记本/教程/存档视频演示文稿,它们逐步介绍了所有基础知识,通常包括与您类似的文本分类问题。
【解决方案2】:

这是使用 ML 进行分类的经典示例,其中使用 NLP 构建特征。该过程涉及多个步骤。

  1. 特征工程:您需要决定是否需要单词、短语(由 1,2...n 个单词组成) - 使用来自 sklearn 的 countvectorizer,它使用 tf-idf 算法和 ngram。您还可以定义要使用的最大功能数。
  2. Lemmatisation - 去除停用词(使用 nltk 语料库)
  3. 词干 - 转换成不变的词(使用 nltk 语料库)
  4. 使用监督学习构建了一个使用 300 个预定义记录的分类模型(使用训练/测试 - 70/30 拆分) - 您可以使用贝叶斯高斯分类器(主要推荐用于 NLP)或随机森林或神经网络,具体取决于如何您想要达到的准确度。
  5. 最后将此模型应用于新的记录集。

PS:这里的诀窍是识别并删除第 2 步的正确词(如“The”、“is”),这样模型就不会出现偏差。

【讨论】:

  • 感谢您的回答。我对 NLP 很陌生。您能否提供有关这些步骤的更多详细信息和说明?作为 NLP 新手,您可以向我推荐任何已发表的帖子/文章吗?有什么 Python 或 R 代码可以开始吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-11
  • 1970-01-01
  • 2013-03-06
相关资源
最近更新 更多