实战_用TFIDF算法对比相似度
实战 _ 用 TF/IDF 算法对比相似度
原理
TF/IDF 方法于 1983 年题出,它先计算每个单词出现的频率,然后适当归一化。利用 TF-IDF 方法将任意长度的文档缩减为固定长度的数字列表,然后对比文本相似度,gensim 工具包提供该方法。
简单复习一下具体算法:
词频 TF
\[ tf_{i,j}=\frac{n_{i,j}}{\sum_kn_{k,j}} \]
其中 n 是句中词,i 是词的索引号,j 是文章索引号,k 是文章中所有词,上式计算的是词 i 在本篇出现的比率。请注意:在短文本的情况下,绝大多数词只出现一次,tf 就只和文章长短有关了。
逆向文档频率 IDF
\[ idf_{i}=log \frac{|D|}{|j:t_i\in d_j|} \]
其中分母是文章总数,分子是包含词 i 的文章数。
TF/IDF
\[ tfidf_{i,j}=tf_{i,j} \times idf_{i} \]
tfidf 值反映的是每个词在文档中的重要程度。请注意:这是一种基于计数的方法,不直接使用词义。
该算法的优点在于算法简单,计算量小;而缺点在于无法处理对同一概念的不同描述,另外,它是词袋类模型,不考虑词的先后顺序和关系。
流程
计算文本相似度,指的是从多个文档中找到与句子相似度最高的文档,常用于实现搜索,匹配,文本标准化等功能。具体流程如下:
- 用待搜语料训练 TFIDF
- 将待搜语料转成包含的关键字及关键字对应评分 M
- 将搜索文本转换成关键字和评分 K
- 逐条计算 M 中内容与 K 的相似度评分
- 选最相近的前 N 条
代码分析
1 | from jieba import lcut |
完整代码
封装一下,以便拿来就用
1 | from jieba import lcut |
技巧
- 生成词典可以选择以词为单位,以字为单位,或拆分成所有可能的词...
- 可去掉停用词和与主题无关的词
- 可加入其它的语料训练 TFIDF,以学习词的重要性(不加入候选集即可)
- 如果搜索句子中的词未出现在字典中,将自动忽略该词
- 如包含英文,请注意大小写
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.