github:https://github.com/worry1613/csdn-blog-recommend
数据集下载地址 https://pan.baidu.com/s/1qzJDmpzAMe1vmtvuCXSfIw
数值型数据相似度计算可以用那些传统的算法,余弦,欧氏,Jaccard,曼哈顿,传统算法总共11种。这些算法都是处理数值型数据的,可现在是文本比较,没有数字,怎么用这样算法呢?那就把文字转换成数学的内容(向量)叫,文字向量化,对于向量数据,就可以用那些算法了。
向量空间模型(VSM)
就是文字向量化的官方说法。
向量空间模型(VSM, Vector SpaceModel)由Salton等人于20世纪70年代年提出。向量空间模型的主要思想是将文本内容的处理简化为向量空间中的向量运算,这样将空间上的相似度转化为语义上的相似度。当文档被表示为文档空间的向量时,便可通过计算向量之间的相似性来度量文档间的相似性。文本处理中最常用的相似度计算方式是余弦距离。
向量空间模型的基本思想:
给定一篇文档D=D(T1,T2,…Ti,…,Tn),若Ti在文档中既可以重复出现又存在先后次序,因此分析起来会较为困难。针对上述情况,暂不考虑Ti的顺序,并要求Ti互异,此时可将T1,T2,…Ti,…,Tn看作n维坐标,每一维对应相应值Wi,因此D(W1,W2,…,Wi,…,Wn)便可以看作一个n维向量。
最简单应用非常广泛的模型就是词袋模型。把一篇文本想象成一个个词构成的,所有词放入一个袋子里,没有先后顺序、没有语义。
A:我喜欢看电视,不喜欢看电影。
B:我不喜欢看电视,也不喜欢看电影。
1.分词
句子A:我/喜欢/看/电视,不/喜欢/看/电影。
句子B:我/不/喜欢/看/电视,也/不/喜欢/看/电影。
2.写出所有的词
我,喜欢,看,电视,电影,不,也。
3.统计词频
句子A:我 1,喜欢 2,看 2,电视 1,电影 1,不 1,也 0。
句子B:我 1,喜欢 2,看 2,电视 1,电影 1,不 2,也 1。
4.写出 词频向量句子A:[1, 2, 2, 1, 1, 1, 0]
句子B:[1, 2, 2, 1, 1, 2, 1]
2个句子已经被转换成了2个向量。使用余弦相似度公式处出结果如下
结果越接近1,就表示2个相量越相似。
上面的例子,把句子转换成了向量,是以词频为依据的,词频就是词在句子中出现的次数。只用词和词频来计算相似度,可以吗?还有更好的算法吗?当然有,那就是TF-IDF模型。
TF-IDF模型
TF-IDF(term frequency–inverse document frequency)是一种用于信息检索(information retrieval)与文本挖掘(text mining)的常用加权技术。比较容易理解的一个应用场景是当我们手头有一些文章时,我们希望计算机能够自动地进行关键词提取。而TF-IDF就是可以帮我们完成这项任务的一种统计方法。它能够用于评估一个词语对于一个文集或一个语料库中的其中一份文档的重要程度。
词频 (term frequency, TF) 指的是某一个给定的词语在该文件中出现的次数。
逆向文件频率 (inverse document frequency, IDF) 是一个词语普遍重要性的度量。某一特定词语的IDF,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取对数得到。
最终TF-IDF的计算结果
某一特定文件内的高词语频率,以及该词语在整个文件集合中的低文件频率,可以产生出高权重的TF-IDF。因此,TF-IDF倾向于过滤掉常见的词语,保留重要的词语。
如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。
TF-IDF模型相比较TF更先进了一步,有了词权重(IDF)的概念,当然,缺点还是有的,如果一个词条在一个类的文档中频繁出现,则说明该词条能够很好代表这个类的文本的特征,这样的词条应该给它们赋予较高的权重,并选来作为该类文本的特征词以区别与其它类文档。这就是IDF的不足之处.
算法实现
用gensim库就能很好的实现TF-IDF模型的余弦相似度计算。分词用结巴分词。
1.构建停用词库
停用词就是一些无意义的词,‘的’,‘哦’,甚至还有标点,停用词库已经有,直接用。
2.对一篇文档分词并去停用词
3.生成语料库
随机找到100篇博文分词后做成最基础的语料库。csdn_blog_100.csv
4.生成词袋模型
5.生成TF-IDF模型
6.用TF-IDF模型计算文本相似度
OK,结束。
TF-IDF还可以用在很多地方,例如,信息检索,自动生成关键词。
TF-IDF单纯以"词频"衡量一个词的重要性,不够全面,有时重要的词可能出现次数并不多。而且,无法体现词的位置信息,出现位置靠前的词与出现位置靠后的词,都被视为重要性相同,这是不正确的。
以后我会介绍比更好更全面的算法,“没有最好,只有更好”。
github:https://github.com/worry1613/csdn-blog-recommend
数据集下载地址 https://pan.baidu.com/s/1qzJDmpzAMe1vmtvuCXSfIw