如何确定网页和查询的相关性
本文分为两部分
- 搜索关键词权重的科学度量TF-IDF
- 利用python的工具包计算文本的TF-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*IDF2 + ... + TFn*IDFn
TF-IDF被公认为信息检索中最重要的发明。在搜索、文献分类和其他相关领域有着广泛的应用。最早由斯巴克·琼斯发明。从理论上IF-IDF有很强的理论根据,因此即直接采用IF-IDF的公式,效果也不会太差。现在的搜索引擎对TF-IDF进行了不小的改进,使得相关性度量更加准确了,都在原来的基础上进行了改进和微调。但是原理和IF-IDF相差不远。
2. 利用python的工具包计算文本的TF-IDF
SciPy是一个开源的Python算法库和数学工具包,SciPy包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。其功能与软件MATLAB、Scilab和GNU Octave类似。 Numpy和Scipy常常结合着使用,Python大多数机器学习库都依赖于这两个模块。
程序演示说明
注:这里的idf的对数底数是2
参考
吴军《数学之美》
我爱自然语言处理:如何计算两个文档的相似度
附录——停用词表