python - 词/短语分类
问题描述
我有一列包含 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'
解决方案
你有一个非常典型的文本分类任务。
您可以使用许多分类算法,但您的任务中选择/改进的主要领域可能是:
- 特征提取和特征工程:您如何将这些短文本转换为可以学习规则/阈值的数字数据?
- 整体流程问题:对于任何无法从现有数据中学习的“棘手案例”,无论是最初还是随着时间的推移,如何将必要的修正反馈到改进的系统中
最初,您应该尝试将“词袋”和“字符 n-gram”(单独或一起)作为将短文本转换为特征向量的方法。仅此一点,只要有足够的训练数据,就可以处理您迄今为止展示的大多数情况,因为它将帮助任何分类算法发现某些“灌篮”规则。
例如,这将有效地了解“商店”可能总是暗示“零售”,或“房子”总是暗示“住宅”,或“办公室”暗示商业。并且使用字符 n-gram 还将为模型提供有关如何处理相同单词的其他拼写错误或变体形式的线索。
会有处理不好的情况。我猜你会希望单独的“三居室住宅”成为“住宅”——但在你的例子中,你将“上面有 3 居室住宅的零售单元”归类为“零售”。有足够多的期望行为示例,分类器可能会正确,因为它要么将“零售”视为具有更高优先级的类别,要么将其他词(如“以上”)暗示通常应该以一种或另一种方式分类的混合用途.
当您查看处理不好的案例时,您将能够考虑更高级的方法,例如可能使用词向量来表示不一定在您的(小)训练集中的词,但可能是被认为是已知单词的近义词。(例如,处理训练集未知的单词的一种可能策略是使用一些外部的、更大的 word2vec 模型将任何未知单词替换为最接近的已知单词。)
但是,您应该真正从最简单的功能方法开始,看看这些方法能让您走多远,从而为以后的改进设置基线。然后,考虑更高级和定制的技术。
推荐阅读
- angular - 为什么 Angular HTTP 在 POST 请求中不发送任何正文?
- python - 如何解决:使用 .csv Dictreader 导入文件的 Python 因未定义字符而失败
- css - 弯曲的内箱阴影
- php - 将二维数组插入mysql
- r - 具有两个 x 变量的 ggplot
- android - 在 Android 可穿戴设备中实现 MAP(蓝牙消息访问协议)
- r - 如何使用 r 中的 95% 置信区间使用 95% 置信区间的方程?
- javascript - 如何记录一些 javascript 测试?
- google-maps - Google 地图 API 不返回基于“智利”的地址的邮政编码
- kotlin - Kotlin:可以在编译期间通过元编程修改函数吗?