如何在nlp中进行特征提取

时间:2018-02-08 07:19:42

标签: python machine-learning nlp nltk naivebayes

我正在构建一个多类文本分类器,它具有作业门户的数据集。数据集由映射到实际名称的组织名称组成(见下文)。我想制作一个可以预测实际组织名称的ml模型。
我的数据集如下:

  

Flipkart.com flipkart

     

FlipKart pvt ltd flipkart

     

flipkart.com flipkart

我的问题是:

A。)我可以提取哪些功能?
B.)我的特征提取器是否也应该使用训练集的标签?
C.)我的特征应该是什么样的,因为它们应该是nbclassifier的dict。什么价值有什么关键?

我是NLP的新手,我们将不胜感激。 Source code on github

3 个答案:

答案 0 :(得分:1)

我会将机器学习排除在外。你要做的是模糊匹配,可能会有一些同义词弃用。

一种昂贵的技术是levenshtein距离公式,更便宜,虽然在某些情况下同样有效,但技术是令牌/ ngram分块和索引。

制作n-gram字典,其中n是克的长度。 n = 3,然后Flipkart.com的克是'Fli','lip','ipk','pka'等等,键是ngram,值是包含该ngram的匹配列表。对于输入字符串中的每个n-gram,在dict中查找(在O(log(n)m处实现),其中n是总索引n-gram的数量,m是输入字符串中的n-gram数),并计算结果,直到你根据与输入字符串共享的n-gram数量得到每个匹配的“得分”。

我提到的'分块'是索引“块”或一组n-gram并执行相同的任务。 Aka ['Fli','lip','ipk']将被索引并用于计算结果。

这些技巧也可以使用“令牌”进行,而不是使用n-gram,或者除了n-gram之外,还可以捕获匹配的整个单词。

这些都不需要统计数据,而是利用对语言的理解。

或者,您可以尝试从短字符串列表中派生一组有意义的要素,以映射到一组非常大的类。这将是一项非常困难的任务,因此我建议使用模糊匹配方法。

答案 1 :(得分:0)

首先,您必须将所有文本数据转换为机器可读形式,因为机器学习算法只能理解向量。

1)找到数据集的词汇

2)使用CountVectorizer()或tfidfVectorizer()将文本转换为向量

3)现在在预处理数据集上训练一个朴素的贝叶斯分类器

有关详细信息,请查看此信息 https://machinelearningmastery.com/prepare-text-data-machine-learning-scikit-learn/

答案 2 :(得分:0)

由于您尝试使用文本,因此我认为您应该使用GloVe模型训练模型。此模型是向量模型的一个词,该模型具有一个大数据集,其中包含数据集中所有词的向量。 GloVe模型:https://nlp.stanford.edu/projects/glove/

高级版本是句子编码器https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/46808.pdf

我相信您必须学习词嵌入这个词,才能获得一个简短的想法来进行文本处理。 您可以在此处查看继续进行文本处理的详细信息:https://www.analyticsvidhya.com/blog/2018/02/the-different-methods-deal-text-data-predictive-python/

我希望这会有所帮助。 一切顺利。