关于使用tf-idf进行文本相似度的计算,个人觉得这两篇文章讲解的很好:https://blog.csdn.net/Jorocco/article/details/82223675,https://blog.csdn.net/pcy1127918/article/details/79955949?utm_source=blogxgwz2,大家可以去看一看。我在这里说一些自己在学习文本相似度的计算的过程中的一些感悟,以及一些自己的理解。如有不当之处,请予指正。
- 首先应该明确,文本相似度计算就是将两个个体的特征向量化,然后通过余弦公式计算两者之间的相似性即可。(当然除了使用余弦相似度的方法,也可以用欧拉距离或者jaccard系数的方法来计算文本相似度,具体方法此处不再赘述),因此问题的关键就是去将两个个体的特征向量化。
- 对于文本相似度的计算,简单来说就是以下几个步骤:A.找出各自文章的关键词并合成一个词集合 B.求出两个词集合的并集(词包) C.计算各自词集的词频并把词频向量化 D.带入向量计算模型就可以求出文本相似度
- 词频TF,词频是一个词语在文章或句子中出现的次数。如果一个词很重要,很明显是应该在一个文章中出现很多次的,但是这也不是绝对的,比如“地”,“的”,“啊”等词,它们出现的次数对一篇文章的中心思想没有一点帮助,只是中文语法结构的一部分而已。这类词也被称为“停用词”。所以,在计算一篇文章的词频时,停用词是应该过滤掉的。如果某个词比较少见(在我们准备的文章库中的占比比较少),但是它在这篇文章中多次出现,那么它很可能反映了这篇文章的特性,正是我们所需要的关键词。在此,在词频TF的基础上又引出了反文档频率IDF的概念。一般来说,在一篇文章或一个句子来说,对于每个词都有不同的重要性,这也就是词的权重。在词频的基础上,赋予每一个词的权重,进一步体现该词的重要性。比如一篇报道中国农业养殖的新闻报道。最常见的词(“的”、“是”、“在”)给予最小的权重,较常见的词(“国内”、“中国”、“报道”)给予较小的权重,较少见的词(“养殖”、“维基”)。所以刻画能力强的词语,权重应该是最高的。将TF和IDF进行相乘,就得到了一个词的TF-IDF值,某个词对文章重要性越高,该值越大,于是排在前面的几个词,就是这篇文章的关键词。(在实际中,还要考虑词的词性等多维度的特性,动词,名词,形容词的刻画能力也是有所差别的;因社会热点而词的刻画性爆发式提高(比如打call))。因此,我们需要用一个词的TF-IDF值来代替词频,然后再将其向量化,这就是tf-idf模型发挥作用的地方。
- 另外需要注意,dictionary.doc2bow方法是把文档变成一个稀疏向量。稀疏向量既可以用Id+频数,也可以用indices和values表示。在文本相似度的计算中,稀疏向量是用(id,频数)这种形式表示的。