预训练-TF_IDF


词频-逆文本频率(term frequency–inverse document frequency,TF-IDF)算法是一种常用的特征编码算法,一般后续都会接上关键词提取模型、主题模型等。

该算法总体来说比较简单,感觉可以水一篇笔记,XD~

1. 输入输出

Input:

样本序列 \[ X=(x_1,...,x_n) \] Output:

编码序列 \[ \hat X=(\hat x_1,...,\hat x_n) \]

2. 算法推导

2.1. 计算TF

这一部分的计算很简单,就是计算词频。当然由于每篇文章的篇幅不一,所以需要进行归一化。有两种归一化的方法 \[ \text{TF}(x) = \frac{\sum_i^n I(x=x_i)}{n} \] 其中,分母的\(n\) 为文章的总词数,分子表示该词在当前文章中出现的次数

或者 \[ \text{TF}(x) = \frac{\sum_i^n I(x=x_i)}{\max \{\sum_i^n I(x_j=x_i)|j=1,2,...n\}} \] 其中,分母表示这篇文章中出现频次最高的词语的出现次数

2.2. 计算IDF

这一部分计算是整个算法的精髓

如果只是使用词频作为权值,会出现一个问题,出现最多的通常是一些停用词,如一些助词,“的”、“地”、得“等,这些词并没有太多实际的中文含义,却拥有很高的权值,这会对后续的NLP任务造成很大的困扰。所以我仍需要另一个权值来判断这个词是否为停用词。

根据停用词的概念,我们很容易知道,停用词就是在大多数文章中都有出现的词语。

所以,我们再定义一份通用文本(注意,这个通用文本是独立于待输入的训练集之外的集合),计算每个词在通用文档中出现概率 \[ \text{IDF}(x) = \log \frac{N}{\sum_i^N I(x \in X_i) + 1} \] 其中,分子的 \(N\) 为通用文本文档的总数,分母表示该词在多少篇文档中出现过,+1是为了防止0除错误。

2.3. 计算TF-IDF

TF-IDF就是上面两部分的权值 \[ \text{TF-IDF}(x) = \text{TF}(x) \cdot \text{IDF}(x) \] 我们来这两部分的含义,TF代表每个词语的重要程度,IDF代表着每个词语的鲜活度,本质上是一种抑制噪声的加权。

3. 一些问题的改进

传统的TFIDF算法需要输入两个训练集——待训练的文档集与通用的文档集,但大部分时候,我们只有一个待训练的文档集,那么我们可以将待训练的文档集作为通用的文档集来计算IDF。

这种做法可以除去大部分停用词,如助词、代词等,但如果训练集都是某个领域内的文章,该领域内的一些特定的词语的IDF值很可能会变得很小。 例如,假设训练集是一批科技类的文章,”手机“这个词可能在每篇文章中都出现,那个这个词的IDF值就会趋向于0,总体的TFIDF就也会趋向于0,也就相当于被过滤掉了,但这个词在后续的关键词提取等任务中,是有一定价值的,是不能被过滤掉的。

为了解决上面这个问题,提出了使用IWF(Inverse Word Frequency)替代IDF的改进方法。

IWF的计算公式如下: \[ \text{IWF}(x) = \log \frac{\sum_i^N n_i}{\sum_i^N \sum_j I(x = X_{ij})} \] 其中,分母表示所有文档的词语总数,分子表示该词在所有文档中的出现次数。

IWF思想很简单,使用词语出现频数之比来代替文档出现概率之比,从而降低了语料库中同类型文本对词语权重的影响,而且由于这种做法中,分子分母的可取值范围比IDF的都高,使得计算结果精度更高,从而保留更多的词语信息,更加精确地表达了这个词语在待查文档中的重要程度。

4. references

TF-IDF与余弦相似性的应用(一):自动提取关键词 - 阮一峰的网络日志


评论
  目录