搜索引擎学习之文本匹配的方法

搜索引擎学习之文本匹配的方法

我的想法是从TF/IDF入手的.前阵子老师又建议我去看看知网,也大概的看了一下,不是很懂,不过也基本了解是怎么回事.老师给的方向是从文本相似度匹配入手,不要去做搜索引擎,做这一块就行了.奈何我是个贪心的人,总是想去知道

先说说TF/IDF.

TF/IDF计算是基于向量空间的。给定一篇文本,将其切词,得到空间向量(w0,w1……,wn)。其中wi为第i个单词。设每一wi相应的词频为TFi(TF: term frequency),得空间向量(TF0,TF1,TF2……TFn),sigma TFi = 1。

IDF(Inverse document frequency 缩写为IDF,“逆文本频率”)用来计算词的权重问题。假设语料库中全部文档数D,出现关键词W的文档数Dw,IDF = In(D/Dw)。假设总文档数10万篇,出现“网络游戏”的文档数1万篇,出现“货币”文档8万篇,则“网路游戏”的权重IDF=In(10万/1万)=2.30,“货币”权重IDF=In(10万/8万)=0.22。

给定两篇文章,一种判断其相似性的方法就是利用TF/IDF来计算其空间向量的夹角表示其相似的程度。
设有文章A、文章B。我们将其切词,并对其每个单词计算TF/IDF,得空间向量A(TF/IDF0……TF/IDFn)记为(a0,a1……an),B(TF/IDF0……TF/IDFn)记为(b0,b1……bn)。空间向量夹角余弦等于:
Cos(A,B)=<A,B>/|A||B|=a0*b0+a1*b1….+an*bn. /|A||B|
其中<A,B>为A,B的内积。
cos(A,B)为1时,表示两篇文章空间向量完全重合,相似度为1。当cos(A,B)为0时,表示两篇空间向量方向相反,相似度为0。
再是知网:
知网其实只是语义库中的一种.
在统计型计算中,“学校”跟“学生”可以是两个毫无相干的词,假如有一篇文章里只有“学校”这个单词,而没有“学生”单词。那么,如果查询“学生”,则肯定不会搜索到该文章。
语义库与统计型计算区别就在于,在语义库中,每一个单词都对应一个相关向量。例如,学校这个词可能对应(学校,学生,老师,教育,考试),相应相关度(w0,w1,w2,w3,w4)。
所有词汇表组成矩阵M(i,j)={i,j为第i个词与第j个词的相关度}。语义库的关键在于如何计算出这个矩阵。目前这个矩阵的计算有三种方法,一种是基于《同义词语义林》,一种是《wordnet》,还有一种是《知网》。
知网好像不是一个开源的东西,去看了它的主页,基本是它的作者写的一堆文章,下载呢,都是一些莫名其妙的东西.有时间在继续看看吧...
 
最后是我的一个想法,TF/IDF和知网的结合:
TF/IDF的缺点在于缺乏对语义的考虑,优点是实现方便;语义库缺点是实现复杂,但精度教高,更智能化。考虑在中间取一个折中,将语义库的词义相关性融进TF/IDF的向量空间计算中。
文章A,TF/IDF向量空间(a0,a1……an)。其中ai=TF/IDFi。
对于任一单词Wk语义相关向量(Fk0,Fk1,……Fkn)其中Fki为Wk与Wi之间的相关度。
则可得一个空间矩阵A[i,j]={TF/IDFi*Fkj}。
把矩阵的每一行加起来,就得到一个新的,带相联的"TF/IDF"空间向量(b0,b1……bn)。再用这个空间向量来计算夹角余弦,那么相关性就跟词的语义结合起来了.
 
另一方面,上面的IDF是基于有大量文本做语料库为基础的,假如只有2篇文章,要比较其相似度要如何做呢?
我的想法是,将IDF换成信息熵.
"IDF 的概念就是一个特定条件下、关键词的概率分布的交叉熵(Kullback-Leibler Divergence)(详见 上一系列)"(见google黑板报数学之美系列-----如何确定网页的相关性)
信息熵 H(x)= sgm P(x)log2[P(x)], 那么TF/IDF就变成了TF/H(x).
不过我也不知道这样的变换到底有多合理,改天拿去问问老师看看好了.