《Python机器学习基础教程 》笔记-第7章

github链接:点我

文本数据表示为词袋

下面利用CountVectorizer对原始本文输入进行词袋统计,从而转换成稀疏的特征向量作为模型输入。

mindf令词表仅保留了在不同文档中出现过至少2次的单词,另外stopwords指定忽略掉英文中的停词,其实上述过程就是舍弃我们认为不重要的单词。

tf-idf缩放数据

即词频-逆向文档频率,如果一个单词在某个特定文档中经常出现,但在许多文档中却不常出现,那么这个单词可能是对文档的很好的描述。

基于样本数据生成每个单词的tf/idf,然后对任意文本输入即可将其分词并用每个分词的tf/idf值作为特征值,构成特征向量。

上述第一个特征向量的第一列为0,其代表单词be,在一个文本中的确没有be。

多个单词的词袋

只考虑1个单词的词袋,会出现这样的问题:

“it’s bad, not good at all”与”it’s good, not bad at all”经过1元词袋处理后的表示完全相同,但是它们实际的语义完全相反。

说明一元词袋无法考虑到单词的上下文,所以我们需要多元词袋:

我们可以看出,ngram_range(1,2)参数指定了生成1元词袋和2元词袋,这样的特征向量会体现出词的上下文关系。

下面利用网格搜索最佳的N元分词,以及模型的正则化参数:

小结与展望

对文本应用词袋模型或者tf/idf模型,分别对应CountVectorizer与TfidfVectorizer,可以实现文本的简单处理。

更高级的文本处理涉及到NLP领域,比如递归神经网络RNN能够输出文本,而不是分类,适合于自动翻译与摘要,未来可以学习tensorflow框架来接触到这些模型。

如果文章帮助您解决了工作难题,您可以帮我点击屏幕上的任意广告,或者赞助少量费用来支持我的持续创作,谢谢~