前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >自然语言处理之词袋模型与TF-IDF指标

自然语言处理之词袋模型与TF-IDF指标

原创
作者头像
我爱自然语言处理
发布2018-07-13 14:38:43
1.5K0
发布2018-07-13 14:38:43
举报
文章被收录于专栏:我的python我的python

在自然语言处理中,词袋模型是一种常用的处理文本信息的模型。

我们拿到一段文本信号后,首先应该进行分词以得到一个个token,然后将这些token用向量表示出来再送入机器学习模型中进行训练。词袋模型和TF-IDF就是一种将token转变成向量的方法。

词袋模型:首先定义一些特殊的标记词,统计这些标记词在文本中出现的次数,将这些数字组成一个向量来代表文本。

词袋模型(图片来源:coursera上的Natural Language Processing课程)
词袋模型(图片来源:coursera上的Natural Language Processing课程)

如上图所示,有三个文本,分别是"good movie","not a good movie"和“did not like”,选择good,movie,not, a,did和like作为6个标记词,统计这6个词在文本中出现的次数,得到一个如右边表格所示的矩阵,每一行组成的向量代表一个文本。

这样得到了一个将文本转化成向量的模型,这样的模型有两个缺点:

  • 丢失了词的顺序特征
  • 产生的向量是非标准化的

在文本信息中,词的顺序会影响语义的判断,因此丢失了文本中词的顺序特征会造成识别的准确率下降。因此引入n-grams的概念。

在上面的模型中,选取的标记词都是一个单字,如果标记词中包含词组(比如包含两个、三个或者n个单字),那么这样的模型就可以在一定程度上弥补丢失的词的顺序这个缺点,这种方法我们成为n-grams。

n-grams
n-grams

如图,标记词中加入了两个单词组成的词组,这样重新得到一个矩阵,同样每一行代表一条文本信息。

缺点:当文本过大时会导致过多的特征。

解决方法:剔除一些用处不大的n-grams。

  • 出现频率过高的n-grams。比如英语中的a, the这种对于识别没有用处的冠词,出现频率又极高,可以剔除
  • 出现频率过低的n-grams。比如错别字等,如果模型也考虑了这种词汇可能会导致过拟合。
  • 保留二者之间频率的n-grams。

接下来问题就变成了如何处理出现频率中等的n-grams:

思路:同样依据出现频率来进行筛选。比如出现频率比较低的往往对于不同的文本有较好的区分度。于是引入TF-IDF指标。

TF(Term Frequency,词频):tf ( t, d )表示n-grams在文本d中出现的频次。

计算方法有多种:

TF计算方法
TF计算方法

IDF(Inverse document frequency,逆文本频率指数):

  • N = |D|,语料库中所有文本的总数
  • |{d∈D:t∈d}|,有n-gram t出现的所有文本的总和
  • idf(t,D) = log(N/|{d∈D:t∈d}|)

也就是说,如果n-grams在很多个文档中都出现,那么idf值计算出来就很小(最极端的情况,在所有文档中都出现,则idf值为0),这种情况下可以认为这个n-grams对不同文本的区分能力很差。

tfidf(t,d,D)=tf(t,d)·idf(t,D) ,为两个指标之积,那些在一个文本中出现频次高但是很少在其他文本中出现的词被认为对该文本具有很好的区分度,而这样的词就会有一个比较高的TF-IDF值。

总结:

  • 用TF-IDF值来替代词袋模型简单的计数值
  • 对每个向量进行标准化

词袋模型与TF-IDF指标得到的文本表示(进行了L2标准化)
词袋模型与TF-IDF指标得到的文本表示(进行了L2标准化)

最后是python 代码举例:

代码语言:python
复制
from sklearn.feature_extraction.text import TfidfVectorizer
import pandas as pd
text = {"good movie", "not a good movie", "did not like",
        "i like it", "good one"}
tfidf = TfidfVectorizer(min_df=2, max_df=0.5, ngram_range=(1, 2))
features = tfidf.fit_transform(texts)
pd.DataFrame(
    features.todense(),
    columns=tfidf.get_feature_names()
)
运行结果
运行结果

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
NLP 服务
NLP 服务(Natural Language Process,NLP)深度整合了腾讯内部的 NLP 技术,提供多项智能文本处理和文本生成能力,包括词法分析、相似词召回、词相似度、句子相似度、文本润色、句子纠错、文本补全、句子生成等。满足各行业的文本智能需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档