经典文本特征表示方法: TF-IDF

引言

在信息检索, 文本挖掘和自然语言处理领域, IF-IDF 这个名字, 从它在 20 世纪 70 年代初被发明, 已名震江湖近半个世纪而不曾衰歇. 它表示的简单性, 应用的有效性, 使得它成为不同文本处理任务文本特征权重表示的首选方案. 如果要评选一个 NLP 领域最难以被忘记的公式, 我想, TF-IDF应该是无可争议的第一和唯一. 虽然在以上领域,目前出现了不少以深度学习为基础的新的文本表达和权重(Weighting)表示方法,但是 TF-IDF 作为一个古董方法,依然在很多应用中发挥着不可替代的作用.

TF-IDF 一般是文本处理领域初学者入门阶段就会了解到的概念, 了解和掌握 TF-IDF 算法, 能够帮助初学者更快地理解其它更加深入复杂的文本挖掘算法和模型.

以下我会从 TF-IDF 的应用背景, TF-IDF 的发现历史, 算法公式及其变种, TF-IDF 的应用几个方面来介绍和展开讨论.


向量空间(VSM)模型

一个自然语言的文本一般表现为由文字, 数字和标点符号和少数特殊符号组成的字符串. 文字或字符等最基本的文本元素自底向上, 组成词, 进而形成短语, 句子, 段落和篇章. 要让计算机能高效地处理自然文本, 就需要找到一种合理的形式化的文本表示方法, 这种表示方法一方面能尽可能完整真实地反应文档的内容(主题, 领域或结构信息), 另一方面还需要对不同的文档具有区分能力. 比较理想的形式化表示, 不难想到能否用"向量"来表示文档, 并尝试用现代数学工具(方法)来解决信息检索或其他文本处理相关问题.

TF-IDF 正是源于一个最经典也是最古老的信息检索模型, 即"向量空间模型" (Vector Space Model, VSM). VSM 是 20 世纪 60 年代末期由 G. Salton 等人提出的, 最早用在 SMART 信息检索系统中, 目前已经成为自然语言处理中的常用模型.

定义 (向量空间模型(VSM)) 给定一个文档 \(D(t_1, w_1; t_2, w_2;\cdots; t_n, w_n)\) (\(t_k, w_k)\)分别为一个特征项及其对应的权重), \(D\)符合以下两条约定:
  (1). 各个特征项\(t_k(1\leq k \leq n)\)互异;
  (2). 各个特征项\(t_k\)无先后顺序关系 (即不考虑文档内部结构).

在以上两个约定下, 可以把特征项\(t_1, t_2, \cdots, t_n\)看成一个\(n\)维坐标系, 而权重\(w_1, w_2, \cdots, w_n\)为相应的坐标值, 因此, 一个文本就表示为一个\(n\)维空间中的一个向量. 我们称\(D=D(w_1, w_2, \cdots, w_n)\)为文本\(D\)的向量表示或向量空间模型.

采用向量空间模型进行文本表示时, 需要经由以下两个主要步骤:
  (1). 为特定任务生成文本表示所需要的特征项序列 \(D=(t_1, t_2, \cdots, t_d)\);
  (2). 一举文本特征项序列, 对各个文档进行权重计算, 赋值, 规范化等处理, 将其转化为机器学习算法所需要的特征向量.

有了向量的表达, 文档相关度往往可以用向量在某种意义上的“相似度”来进行近似, 比如余弦相似性 (Cosine Similarity) 或者是点积 (Dot Product). 这样, 相关度就可以用一个值来进行表达. 不管是余弦相似度还是点积都能够从线性代数或者几何的角度来解释计算的合理性.


TF-IDF的发现

文本向量化的尝试从 20 世纪 70 年代就已经开始, 1971 年, 美国康奈尔大学教授 Gerard Salton 发表了 "The SMART Retrieval System—Experiments in Automatic Document Processing" 一文, 文中首次提到了把查询关键字和文档都转换成"向量", 并且给这些向量中的元素赋予不同的值. 这篇论文中描述的 SMART 检索系统, 特别是其中对 TF-IDF 及其变种的描述成了后续很多工业级系统的重要参考.

1972 年, 英国的计算机科学家 Karen Spärck Jones 在 "A Statistical Interpretation of Term Specificity and Its Application in Retrieval" 一文中第一次详细地阐述了 IDF 的应用. 其后 Jones 又在 "Index Term Weighting" 一文中对 TF 和 IDF 的结合进行了论述. 可以说, Jones 是第一位从理论上对 TF-IDF 进行完整论证的科学家, 因此后世也有很多人把 TF-IDF 的发明归结于 Jones.


TF-IDF算法公式

回顾上面的向量空间模型, 可知关于文档的向量表示, 其实就是对预先定义(设计)好的特征项, 赋予其 "适当" 的权重. 特征权重用于衡量某个特征项在文档表示中的重要程度或区分能力的强弱. 权重计算的一般方法是利用文本的统计信息, 主要是词频, 给特征项赋予一定的权重.


最朴素的想法, 把文档向量设为 V 维度。这里的 V 是整个词汇表 (Vocabulary) 的总长度. 对于这个向量中的每一个维度, 都表示英文中的一个单词, 没有重复. 可以看到, 在这样的情况下, 如果当前的词出现在这个向量所对应的文档或者关键字里, 就用 \(1\) 来表达; 如果这个词没出现, 就用 \(0\) 来表达. 这就是给每个维度赋值 (Weighting) 的最简单的方法. 形式化的表示如下:

\[w_{i,j} = \begin{cases} 1, & \text{if $tf_{i,j} > 0$} \\ 0, & \text{else} \end{cases}\]

这里\(w_{i,j}\)表示特征项\(t_i\)在文本\(D_j\)中的权重. 这种表示方法被称为布尔权重(Boolean weighting), 布尔权重把文本中的每个特征等同对待, 无法体现特征项在文本中的作用程度, 因而在实际中\(0, 1\)值逐渐被更精确的特征项的频率所代替.

更进一步不难想到, 如果一个特征词在文本中出现的频数高, 它的重要性也应该相应拔高, 此使特征权重可以用

\[w_{i,j}=tf_{i,j} \]

表示, 这里 \(tf_{i,j}\)表示特征项\(t_i\)在文本\(D_j\)中的频数. 这种绝对词频 (term frequency, TF) 方法中, 无法体现低频特征的区分能力, 因为有些特征词出现次数很多, 但并不能很好地代表文本特征(比如很多generic的常用词), 而有些特征项虽然频率较低, 但表征能力却很强.

倒排文档频度 (inverse document frequency, IDF)方法是 1972 年 Karen Spärck Jones 提出的计算词与文本相关权重的经典计算方法, 其在信息检索具有重要重要地位.

\[w_{i,j}=\log\frac{N}{n_i} \]

\(n_i\) 是全部文档集中出现特征项 \(t_i\) 的文档数. 该方法指出稀有特征比常用特征有更重要的信息. 在实际使用中, 常用公式\(L + \log((N-n_i)/n_i)\)替代, 其中, 常数 \(L\) 为经验值, 一般取 \(1\). IDF方法的权重随着包含某个特征的文档数量 \(n_i\) 呈反向变化, 在极端情形下, 只在一篇文档中出现的特征含有最高的 IDF 值.

本文下面要介绍的 TF-IDF 就是在向量空间模型的假设下的一种更加复杂的, 将绝对词频 (TF) 和逆文档频率(IDF)二者结合起来的权重计算方法:

\[w_{i,j}=tf_{i,j} \cdot \log \frac{N}{n_i} \]

这个式子表面特征权重与特征项在文档里出现的频率成正比, 与在整个语料中含有该特征项的文档数成反比.这个综合考虑了高频词与稀有词的公式, 现在看来只是一个略显朴素经验公式, 但它至今仍然在众多文档特征权重计算方法中暂居着难以被取替的地位.


TF-IDF的变种和改进

经典的 TF-IDF 算法想法简明而自然, 在过去的很长一段时间里, 研究人员和工程师开发出了很多种 TF-IDF 的变种. 以下是几种常见的变形形式:

  1. 文本长度归一化.

\[w_{i,j}=\frac{tf_{i,j} \cdot \log (N/n_i)}{\sqrt {\sum_{t_i \in D_j} \left[tf_{i,j} \cdot \log(N/n_i) \right] ^ 2}} \]

或者

\[w_{i,j}=\frac{tf_{i,j} \cdot \log (N/n_i + 0.01)}{\sqrt {\sum_{t_i \in D_j} \left[tf_{i,j} \cdot \log(N/n_i + 0.01) \right] ^ 2}} \]

文档向量进行标准化,使得这些向量能够不受向量里有效元素多少的影响,也就是不同的文档可能有不同的长度, 当向量都标准化为一个单位向量的长度时, 进行点积运算就相当于在原来的向量上进行余弦相似度的运算. 所以, 另外一个角度利用这个规则就是直接在多数时候进行余弦相似度运算, 以代替点积运算.

  1. 文档频率的对数代替原始TF

\[w_{i,j}=\frac{\log (tf_{i,j} + 1.0) \cdot \log (N/n_i)}{\sqrt {\sum_{t_i \in D_j} \left[\log (tf_{i,j} + 1.0) \cdot \log(N/n_i) \right] ^ 2}} \]

或者

\[w_{i,j}=\frac{(1.0 + \log tf_{i,j}) \cdot \log (N/n_i)}{\sqrt {\sum_{t_i \in D_j} \left[(1.0 + \log tf_{i,j}) \cdot \log(N/n_i) \right] ^ 2}} \]

对 TF 进行变换, 是为了一个不让 TF 线性增长. 举例而言, 人们常常用以上两种变化形式来代替原来的 TF 取值. 在这样新的计算下, 假如 "soccer" 一词出现一次,新的值是 \(1\), 出现 \(100\) 次, 新的值是 \(5.6\), 而出现 \(200\) 次, 新的值是 \(6.3\). 很明显, 这样的计算保持了一个平衡, 既有区分度, 但也不至于完全线性增长.

  1. 特征频率的倒数的对数值代替IDF

\[w_{i,j} = tf_{i,j} \cdot \left(\log \left(\frac{\sum_{i=1}^M nt_i}{nt_i}\right)\right) ^ 2 \]

这里, \(M\) 为特征项的个数, \(nt_i\) 为特征项 \(t_i\) 为特征项在预料中出现的次数. TF-IDF 的这种变形被称为 TF-IWF (inverse word frequency), 由 R. Basili et al.(1999) 提出来, 除了用特征频率倒数 IWF 替代 IDF, 算法还采用了 IWF 的平方, 而不是 IDF 的一次方. Basili等认为 IDF 的一次方给了特征频率太多的倚重, 所以用 IWF 的平方来平衡权重值对于特征频率的倚重.

除了上面介绍的这些常用的方法以外, 还有很多其他的权重计算方法, 例如: Dagan et al. (1997) 提出的基于错误驱动的 (mistake-driven) 特征权重计算方法, 这种方法不是通过一个公式直接计算得到, 而是通过下游任务的目标, 为每个特征指定一个初始权重, 然后根据训练预料不断调整特征权重向量的取值, 直到权重向量大致不再改变. 还有 Okapi 权重函数企图进一步降低特征项 \(t_i\) 在文本 \(D_j\) 中出现的次数影响. Xue and Sun (2003) 将上面的某些方法进行叠加, 提出了 TF-IDF-IG 和 TF-EXP-IG 权重算法. Chen and Zong (2003) 则考虑特征词的频率分布不均衡性, 引入不均衡变量 (DBV) 并且用 \(\sqrt[m]{tf_{i,j}} (m=1, 2, \cdots)\) 替代 \(tf_{i,j}\), 提出了 TF-IDF-DBV 权重算法, 等等. 还有很多特征权重算法, 在此难以一一列举.

最后需要指出的是, 这些不同的权重计算方法, 实质上都是考虑特征项在整个特征集中的分布问题, 这些经验公式从不同的角度定义公式, 往往缺少理论上的推导和验证, 因而表现出来的非一般性结果无法得到合理的解释.


TF-IDF的应用

TF-IDF 作为向量空间模型中的基础文本特征表示方法, 一旦文本被表示为 TF-IDF 值的向量, 便可或直接或融合其他特征表示方法, 用于各种下游任务, 如文本语义相似性匹配, 文本聚类, 文本分类, 信息检索中query-doc文本相关性计算等等. 此外, TF-IDF 也可以作为一种无监督方法对文本进行关键词提取.


小结

本文主要介绍了信息检索和自然语言处理领域的一个关键技术, 文本特征表示经典算法: TF-IDF, 包括它提出的背景框架(向量空间模型), 公式发现的历程, 以及各种改进和变种版本, 最后是其应用场景.


参考文献

[1]. 宗成庆. 统计自然语言处理 (第二版). 北京: 清华大学出版社, 2013.
[2]. 陈开江. 推荐系统. 北京: 电子工业出版社, 2019.
posted @ 2020-05-24 19:27  geeks_reign  阅读(2659)  评论(0编辑  收藏  举报