Fork me on GitHub
网页和查询的相关性

如何确定网页和查询的相关性

本文分为两部分

  1. 搜索关键词权重的科学度量TF-IDF
  2. 利用python的工具包计算文本的IF-IDF

 

1. 搜索关键词权重的科学度量TF-IDF

查询:原子能的应用

首先进行分词:原子能、的、应用

根据直觉知道:包含这三个词较多的网页比包含少的网页与我们的需求相关性更好

 

漏洞:内容多的比内容少的占优势

改进:归一化。即用关键词的个数除以网页总的词数,商称为”单文本词频“TF(Term Frequency)。比如”原子能、的、应用“三个词出现的词数分别为2、35、5,网页中一共有1000个词,那么三个词的TF分别为:0.002、0.035、0.005。查询与网页的相关度即总词频公式如下。那么三者之和0.042就是关键词在该网页中的总词频。

                 TF1 + TF2 + ... + TFn

 

漏洞:”的“几乎在每个网页中都出现,对确认网页的主题几乎没什么价值

改进:我们把"这些词称为”停止此“(Stop word),比如:”的“, ”和“, ”是“,附录有几种停用词表。那么”原子能的应用“总TF=0.002 + 0.005 = 0.007

 

漏洞:”原子能“的对网页的价值比“应用”更大

改进:对汉语中的每个词有个权重,这个权重必须满足下面的两个条件:

  • 一个词预测主题的能力越强,权重越大。
  • 停止词的权重为0

很容易理解:一个词只有在少数的网页中出现,那么它的锁定目标能力越强。他的权重就应该越大。那么怎么得到每个词的权值呢,使用最多的是“逆文本频率指数”(Inverse Document Frequency,简称IDF),公式为:

       log(D / Dw)   其中D为全部网页数,Dw为关键词w,在所有网页中出现的词数

可见:在所有网页中出现词数越多Dw越大,IDF越小,其区分度也该越小,因此权值越小。当在所有网页中都出现时IDF=0

这样查询与网页的相关度由简单的词频相加变为加权求和:

                   TF1 * IDF1 + TF2 * IDF+ ... + TFn* IDFn

 

TF-IDF被公认为信息检索中最重要的发明。在搜索、文献分类和其他相关领域有着广泛的应用。最早由斯巴克·琼斯发明。从理论上IF-IDF有很强的理论根据,因此即直接采用IF-IDF的公式,效果也不会太差。现在的搜索引擎对TF-IDF进行了不小的改进,使得相关性度量更加准确了,都在原来的基础上进行了改进和微调。但是原理和IF-IDF相差不远。

 

2. 利用python的工具包计算文本的IF-IDF

SciPy是一个开源的Python算法库和数学工具包,SciPy包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。其功能与软件MATLAB、Scilab和GNU Octave类似。 Numpy和Scipy常常结合着使用,Python大多数机器学习库都依赖于这两个模块。

程序演示说明

 

参考 

  吴军《数学之美》

  我爱自然语言处理:如何计算两个文档的相似度

附录——停用词表

  中文   英文

 

 

 
 
posted on 2013-09-19 00:22  HackerVirus  阅读(238)  评论(0编辑  收藏  举报