TF·IDF
重要词
- 假如一个词在某类文本(假设为A类)中出现次数很多,而在其他类别文本出现很少,那么这个词是A类文本的重要词。
- 反之,如果一个词出现在很多领域,则其对于任意类别的重要性都很差。
数学表示
一种NLP经典统计值:TF·IDF
某个词在某类别中出现的次数 / 该类别词总数
\log\left(\frac{\text{语料库的文档总数}}{\text{包含该词的文档数} + 1}\right)
逆文档频率高,说明该词很少出现在其他文档。所以像是“你好”这类常用词,就会有很低的IDF,而专业词,比如“脱氧核糖核酸”就会有比较高的IDF。
如果一个词对于某个领域重要程度高,那么他的TFIDF值就会比较高。例如:“黑洞”对于天文领域TFIDF值会很高,而“脱氧核糖核酸”对于生物领域TFIDF值很高。
算法特点
- TFIDF的计算非常依赖分词结果,如果分词出错,统计值的意义会大打折扣
- 每个词对于每篇文档有不同的TFIDF,所以不能脱离数据讨论TFIDF
- 假如只有一篇文本,不能计算TFIDF
- 类别数据均衡很重要
- 容易受各种特殊符号的影响,最好做一些预处理
TFIDF的应用
1. 搜索引擎
- 对于已有的所有网页,计算每个网页中词的TFIDF值
- 对输入query进行分词
- 对于文档D,计算query中的词在文档D中TFIDF值总和作为query和文档的相关性得分
2. 文本摘要
- 通过计算TFIDF值得到每个文本的关键词
- 将包含关键词多的句子,认为是关键句
- 挑选若干关键句作为文本摘要
【生成摘要时可以将顺序恢复到文本中出现的顺序,减少类似“但是...”这种作为摘要开头的可能性】
3. 文本相似度计算
- 对所有文本计算TFIDF后,从每个文本选取TFIDF较高的前n个词,得到一个词的集合S
- 对于每篇文本D,计算S中每个词的词频,将其作为文本的向量
- 通过计算向量夹角余弦值得到向量相似度,作为文本相似度
向量夹角余弦值计算:
\cos(\theta) = \frac{\vec{A} \cdot \vec{B}}{|\vec{A}| \cdot |\vec{B}|}
其中:
\theta 是向量
\vec{A} 和
\vec{B} 之间的夹角。
\vec{A} \cdot \vec{B} 是向量
\vec{A} 和
\vec{B} 的点积(数量积)。
|\vec{A}| 和
|\vec{B}| 分别是向量
\vec{A} 和
\vec{B} 的模(平方和开根号)。
TF·IDF的优势
- 可解释性好
- 计算速度快
- 对于标注数据依赖小
- 可以与很多算法组合使用
TFIDF的劣势
- 受分词效果影响大
- 词与词之间没有语义相似度
- 没有语序信息(词袋模型)
- 无法完成机器翻译、实体挖掘等复杂任务
- 样本不均衡会对结果有很大影响
- 类内样本间分布不被考虑【比如一个领域有4篇文本,有些词只在某篇文章出现,其他文章没有出现,但是在计算TFIDF时会将这4篇文本当成一个大的字符串,导致这种特殊词TFIDF很难反映出来】