Word/Phrase分类
Word/Phrase classification
我有一列包含 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
你有一个非常典型的文本分类任务。
您可以使用许多分类算法,但您任务中 choice/improvement 的主要领域可能是:
- 特征提取和特征工程:如何将这些短文本转化为可据以学习 rules/thresholds 的数值数据?
- 整体流程问题:对于存在无法从现有数据中学习的任何“棘手案例”,无论是最初还是随着时间的推移,如何将必要的更正反馈到改进的系统中
最初,您应该尝试 'bag of words' 和 'character n-grams'(单独或一起)作为将短文本转换为特征向量的方法。仅凭这一点,只要有足够的训练数据,就应该可以处理您目前展示的大多数情况,因为它将帮助任何分类算法发现某些 'slam-dunk' 规则。
例如,这将有效地学习 'shop' 可能总是暗示 'retail',或 'house' 总是暗示 'residential',或 'office' 暗示商业。使用字符 n-gram 还将为模型提供有关如何处理相同单词的其他拼写错误或变体形式的线索。
会有处理不好的情况。我猜想您希望单独的“三居室住宅”成为 'residential' – 但在您的示例中,您将 'retail unit with 3 bedroom dwelling above' 分类为 'retail'。有了足够多的所需行为示例,分类器可能会做对,因为它要么将 'retail' 视为具有更高优先级的类别,要么将其他词(如 'above')视为通常应分箱的混合使用一种或另一种方式。
当您查看处理不当的案例时,您将能够考虑更高级的方法,例如可能使用词向量来表示您的(小)训练中不一定包含的词集,但可以被认为是已知单词的近义词。 (例如,处理训练集未知的、稍后到达的单词的一种可能策略是使用一些外部的、更大的 word2vec 模型用最接近的已知单词替换任何未知单词。)
但是,您真的应该从最简单的特征方法开始,看看这些方法对您有多大帮助,从而为以后的改进设置基准。然后,考虑更高级和自定义的技术。
这是使用 ML 进行分类的经典示例,其中的特征是使用 NLP 构建的。该过程涉及多个步骤。
- 特征工程:您需要决定是否需要单词、短语(由 1,2...n 个单词组成)- 使用来自 sklearn 的 countvectorizer,它使用 tf-idf 算法和 ngrams。您还可以定义要使用的功能的最大数量。
- 词形还原——去除停用词(使用 nltk 语料库)
- 词干提取 - 转换为不变的词(使用 nltk 语料库)
- 使用监督学习构建了一个使用 300 个预定义记录的分类模型(使用 train/test - 70/30 分割)- 您可以使用贝叶斯高斯分类器(主要推荐用于 NLP)或随机森林或神经网络网络取决于您想要达到的准确度。
- 最终将此模型应用于新的记录集。
PS:这里的技巧是识别并删除正确的词到步骤 2(如 'The'、'is'),这样模型就不会产生偏差。
我有一列包含 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
你有一个非常典型的文本分类任务。
您可以使用许多分类算法,但您任务中 choice/improvement 的主要领域可能是:
- 特征提取和特征工程:如何将这些短文本转化为可据以学习 rules/thresholds 的数值数据?
- 整体流程问题:对于存在无法从现有数据中学习的任何“棘手案例”,无论是最初还是随着时间的推移,如何将必要的更正反馈到改进的系统中
最初,您应该尝试 'bag of words' 和 'character n-grams'(单独或一起)作为将短文本转换为特征向量的方法。仅凭这一点,只要有足够的训练数据,就应该可以处理您目前展示的大多数情况,因为它将帮助任何分类算法发现某些 'slam-dunk' 规则。
例如,这将有效地学习 'shop' 可能总是暗示 'retail',或 'house' 总是暗示 'residential',或 'office' 暗示商业。使用字符 n-gram 还将为模型提供有关如何处理相同单词的其他拼写错误或变体形式的线索。
会有处理不好的情况。我猜想您希望单独的“三居室住宅”成为 'residential' – 但在您的示例中,您将 'retail unit with 3 bedroom dwelling above' 分类为 'retail'。有了足够多的所需行为示例,分类器可能会做对,因为它要么将 'retail' 视为具有更高优先级的类别,要么将其他词(如 'above')视为通常应分箱的混合使用一种或另一种方式。
当您查看处理不当的案例时,您将能够考虑更高级的方法,例如可能使用词向量来表示您的(小)训练中不一定包含的词集,但可以被认为是已知单词的近义词。 (例如,处理训练集未知的、稍后到达的单词的一种可能策略是使用一些外部的、更大的 word2vec 模型用最接近的已知单词替换任何未知单词。)
但是,您真的应该从最简单的特征方法开始,看看这些方法对您有多大帮助,从而为以后的改进设置基准。然后,考虑更高级和自定义的技术。
这是使用 ML 进行分类的经典示例,其中的特征是使用 NLP 构建的。该过程涉及多个步骤。
- 特征工程:您需要决定是否需要单词、短语(由 1,2...n 个单词组成)- 使用来自 sklearn 的 countvectorizer,它使用 tf-idf 算法和 ngrams。您还可以定义要使用的功能的最大数量。
- 词形还原——去除停用词(使用 nltk 语料库)
- 词干提取 - 转换为不变的词(使用 nltk 语料库)
- 使用监督学习构建了一个使用 300 个预定义记录的分类模型(使用 train/test - 70/30 分割)- 您可以使用贝叶斯高斯分类器(主要推荐用于 NLP)或随机森林或神经网络网络取决于您想要达到的准确度。
- 最终将此模型应用于新的记录集。
PS:这里的技巧是识别并删除正确的词到步骤 2(如 'The'、'is'),这样模型就不会产生偏差。