我有一个包含5000个字符串记录的列。这些记录是单个词语或短语(不是句子或段落)。这些记录中的大部分相似或包含相似的元素(例如,“Office”、“offise”、“ground floor office”)。此外,有人手动将其中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元语法”(单独或结合使用)作为将你的短文本转换成特征向量的方法。仅凭这一点,再加上足够的训练数据,应该可以处理你目前展示的大多数类型的情况,因为它将帮助任何分类算法发现某些“一击即中”的规则。
例如,这将有效地学习到“shop”可能总是意味着“零售”,或者“house”总是意味着“住宅”,或者“office”意味着商业。使用字符n元语法还将为模型提供线索,帮助处理其他拼写错误或同一词语的变体形式。
有些情况它处理得不好。我猜你可能希望“3 bedroom dwelling”单独被分类为“住宅”——但在你的例子中,你将“retail unit with 3 bedroom dwelling above”归类为“零售”。有了足够的期望行为的例子,分类器可能会做对,因为它要么将“零售”视为优先级更高的类别,要么其他词(如“above”)暗示混合使用,通常应该以某种方式归类。
当你查看它处理得不好的情况时,你就可以考虑更高级的方法,比如使用词向量来表示训练集中不一定存在的词语,但可以被视为已知词的近义词。(例如,处理训练集中未知词的一个可能策略是,使用某个外部的、更大的word2vec模型,将任何未知词替换为与已知词最接近的词。)
但是,你真的应该从最简单的特征方法开始,看看这些方法能带你走多远,从而为后续改进设定一个基准。然后,再考虑更高级和定制化的技术。