自然语言处理 第四期
- TF-IDF原理。
- 文本矩阵化,使用词袋模型,以TF-IDF特征值为权重。(可以使用Python中TfidfTransformer库)
- 互信息的原理。
- 使用第二步生成的特征矩阵,利用互信息进行特征筛选。
一、TF-IDF原理
TF-IDF是Term Frequency - Inverse Document Frequency的缩写,即“词频-逆文本频率”。它由两部分组成,TF和IDF。
TF是词频,之前做的向量化也就是做了文本中各个词的出现频率统计,并作为文本特征。
IDF,逆文本频率,就是反应一个词的重要性,进而修正仅仅用词频表示词频的词特征性。如果一个词在很多的文本中出现,那么它的IDF值应该低。例如,几乎所有文本都会出现的"to"其词频虽然高,但是重要性却应该比词频di低的"China"和“Travel”要低。而反过来如果一个词在比较少的文本中出现,那么它的IDF值应该高。比如一些专业的名词如“Machine Learning”。这样的词IDF值应该高。一个极端的情况,如果一个词在所有的文本中都出现,那么它的IDF值应该为0。
词x的IDF的基本公式如下: IDF(x) = log(N / N(x))
其中,N代表语料库中文本的总数,而N(x)代表语料库中包含词x的文本总数。
上面的IDF公式已经可以使用了,但是在一些特殊的情况会有一些小问题,比如某一个生僻词在语料库中没有,这样我们的分母为0, IDF没有意义了。所以常用的IDF我们需要做一些平滑,使语料库中没有出现的词也可以得到一个合适的IDF值。平滑的方法有很多种,最常见的IDF平滑后的公式之一为: IDF(x)=log(N+1 / N(x)+1) + 1
有了IDF的定义,我们就可以计算某一个词的TF-IDF值了: TF−IDF(x)=TF(x)∗IDF(x)
其中TF(x)指词x在当前文本中的词频。
二、文本矩阵化,使用词袋模型,以TF-IDF特征值为权重。(可以使用Python中TfidfTransformer库)
from sklearn.feature_extraction.text import CountVectorizer
vectorizer=CountVectorizer()
text=["I come to China to travel",
"This is a car polupar in China",
"I love tea and Apple ",
"The work is to write some papers in science"]
# 文本的词频统计
print(vectorizer.fit_transform(text))
#
# # 各个特征代表的词
print(vectorizer.get_feature_names())
#
# # 每个文本的词向量特征
print(vectorizer.fit_transform(text).toarray())
将之前的数据进行tfidf
from sklearn.feature_extraction.text import TfidfVectorizer
tt=x_train['word_seg']
vectorizer = TfidfVectorizer()
vectorizer.fit(tt)
xtrain=vectorizer.fit_transform(tt)
print(xtrain.shape)
三、互信息的原理
互信息,Mutual Information,缩写为MI,表示两个变量X与Y是否有关系,以及关系的强弱。
四、利用互信息进行特征筛选
在面对未知领域的时候,很难有足够的知识去判断特征与我们的目标是不是相关,特征与特征之间是不是相关。这时候,就需要一些数学和工程上的办法来帮助我们尽可能地把恰好需要的特征选择出来。
常见的方法包括过滤法(Filter)、包裹法(Warpper),嵌入法(Embedding)。
- 过滤法(Filter)
过滤法只用于检验特征向量和目标(响应变量)的相关度,不需要任何的机器学习的算法,不依赖于任何模型,只是应用统计量做筛选:我们根据统计量的大小,设置合适的阈值,将低于阈值的特征剔除。
所以,从某种程度上来说,过滤法更像是一个数学问题,我们只在过滤之后的特征子集上进行建模和训练。 - 包裹法(Warpper)
包裹法采用的是特征搜索的办法。它的基本思路是,从初始特征集合中不断的选择子集合,根据学习器的性能来对子集进行评价,直到选择出最佳的子集。在搜索过程中,我们会对每个子集做建模和训练。 - 嵌入法(Embedding)
过滤法与学习器没有关系,特征选择只是用统计量做筛选,而包裹法则固定了学习器,特征选择只是在特征空间上进行搜索。而嵌入法最大的突破在于,特征选择会在学习器的训练过程中自动完成。
参考资料
- 文本挖掘预处理之TF-IDF:文本挖掘预处理之TF-IDF - 刘建平Pinard - 博客园 (https://www.cnblogs.com/pinard/p/6693230.html)
- 达观杯文本处理(二)----TF-IDF理论并实践
(https://blog.csdn.net/weixin_41781408/article/details/89061933) - 使用不同的方法计算TF-IDF值:使用不同的方法计算TF-IDF值 - 简书(https://www.jianshu.com/p/f3b92124cd2b)
- sklearn-点互信息和互信息:sklearn:点互信息和互信息 - 专注计算机体系结构 - CSDN博客 (https://blog.csdn.net/u013710265/article/details/72848755)
- 如何进行特征选择(理论篇)机器学习你会遇到的“坑”:如何进行特征选择(理论篇)机器学习你会遇到的“坑” (https://baijiahao.baidu.com/s?id=1604074325918456186&wfr=spider&for=pc)