《从零开始学习自然语言处理(NLP)》-TF-IDF算法(2)

写在最前面

在这个日新月异的信息时代,海量数据的积累,计算能力的不断提升,机器学习尤其是深度学习的蓬勃发展,使得人工智能技术在不同领域焕发出蓬勃的活力。自己经历了嵌入式开发,移动互联网开发,目前从事自然语言处理算法开发工作。从工程软件开发到自然语言处理算法开发,希望通过这个系列的文章,能够由浅入深,通俗易懂的介绍自然语言处理的领域知识,分享自己的成长,同大家一起进步。

问题描述

在上一篇文章中(《《从零开始学习自然语言处理(NLP)》-倒排索引(1)》)描述了基于关键词搜索的基本原理,以及通过倒排索引来提升和关键词相关网页的查询。本文在上文的基础上提出一个新的问题:
如果通过倒排索引查找到的网页都包含全部的查询关键字,而且,召回(符合查找条件)的网页数目又很多,这就需要将网页与查询Query的相关度进行排序了。相关度高的网页排在查询结果的前面,相关度低的网页排在后面。那问题来了,如何依据网页与查询关键词的相关性对召回的网页做排序呢?

基于TF(Term Frequency,词频)进行排序

最容易想到的便是基于词频打分进行排序,具体来说,对于查询Query:“林俊杰/2019/演唱会/行程”,下面的哪个网页跟查询Query的相关度更高呢?
网页a

[林俊杰]/[2019]/全球/[演唱会]/[行程]/发布/,/这是/[林俊杰]/的/第/20/场/全球/巡演/。
关键字 出现频次
林俊杰 2
2019 1
演唱会 1
行程 1

网页b

在 [林俊杰]/[2019]/全球/[演唱会]/[行程]/发布/之后/,/田馥甄/也/发布/了/今年/的/巡演/计划/,/她的/第一站/是/台北/。
关键字 出现频次
林俊杰 1
2019 1
演唱会 1
行程 1

显然网页a和Query的相关度更高。当然对于计算机就没有这么“显然”了,它需要依靠规则和具体算法来计算判断。基于词频的排序用公式表示就是,


相关性计算

其中,
k:Query中查询关键词序号


参数说明

为了方便计算,我们假设每个网页包含的词的总数为100,通过上面的公式,
网页a

网页a相关度=2/100+1/100+1/100+1/100=0.05

网页b

网页b相关度=1/100+1/100+1/100+1/100=0.04

通过上面的公式,计算机也能“显然”的判断,网页a与查询Query的相关度更高了。

基于词频(TF)排序的问题

假设现在有新的召回网页,
网页c

在 [林俊杰]/[2019]/全球/[演唱会]/[行程]/发布/之后/,/众多/明星/也/都/发布/了/自己/[2019]年/的/巡演/计划/,/[行程]/安排/如下/,
关键字 出现频次
林俊杰 1
2019 2
演唱会 1
行程 2
网页c相关度=1/100+2/100+1/100+2/100=0.06

显然基于词频的相关性计算公式,网页c(相关度0.06)大于网页a(相关度0.05),但真实情况是,网页c和查询Query的相关度,并没有网页a大。

IDF(Inverse DocumentFrequency,逆文件词频)

上面的问题关键在于用户的查询Query主要关注的是"林俊杰",至于"2019","行程"等信息也是在林俊杰的基础上展开的。所以,现在要解决的问题便是,排序算法如何能够凸显出"林俊杰"这个关键的查询信息。在这里便引入了IDF(Inverse DocumentFrequency,逆文件词频)。
我们先看下它的定义:

IDF定义

其中,
分母的+1操作,是为了避免当所有文档都不包含该关键词时,分母出现为0的情况。
IDF的分子是固定的,所以,IDF的特性主要体现在分母上。
从IDF的定义可以看出,
1 越是能代表特定内容的关键词,包含该关键词的网页越少,IDF值越高,如“林俊杰”
2 越是和内容主旨不相关的关键词,包含该关键词的网页越多,IDF值越低,如“2019”,“行程”
所以,IDF值就能很好的体现出查询Query关键字,与需要查询内容的相关性。

基于TF-IDF进行排序

结合TF和IDF的特定,便有了TF-IDF,定义也非常直观,

TF-IDF

具体来说就是,一个网页与查询Query的相关性体现在:
1 网页中包含查询关键词的频度
2 查询关键词对查询内容的反映程度
基于TF-IDF,网页与查询Query的相关性,改写为,
相关性定义

其中,
参数说明

在实际工程中,TF和IDF值,以及TF-IDF值针对于具体网页是提前计算好的,当搜索系统接收到用户的查询Query后,能够实时计算查询关键词与网页的相关度。

小结

本文沿用了《《从零开始学习自然语言处理(NLP)》-倒排索引(1)》中搜索的例子,提出了在网页包含所有查询关键词的情况下,如何对网页与查询Query的相关性进行排序。文中提出了基于TF的相关性排序方法,同时,也指出了该方法存在的问题。最终,引出TF-IDF算法:结合查询关键词在网页中的出现频率和该关键词反映查询内容程度两个特征,对召回网页进行排序。

推荐阅读更多精彩内容

  • 这个系列的第六个主题,主要谈一些搜索引擎相关的常见技术。 1995年是搜索引擎商业公司发展的重要起点,《浅谈推荐系...
    我偏笑_NSNirvana阅读 5,590评论 3 23
  • 前面的文章主要从理论的角度介绍了自然语言人机对话系统所可能涉及到的多个领域的经典模型和基础知识。这篇文章,甚至之后...
    我偏笑_NSNirvana阅读 12,125评论 2 64
  • 我们对文档分析的时候,通常需要提取关键词,中文分词可以使用jieba分词,英文通过空格和特殊字符分割即可。那么分割...
    lawenliu阅读 989评论 0 2
  • 你优雅的转过身 深情的望着我 微笑着 轻轻的 来到我身边 温柔的 抚摸我的头 把我拥入怀中 低声说 你真可爱 好喜...
    小幸福的幸福阅读 81评论 0 4
  • 寂 问苍寥多寂 不如问昏叶多纷乱 问人情多不堪 问旧故多年还 听苍寥多寂 不如听梧桐多落寞 听嬉笑多悠长 听忧喜何...
    杨嘴阅读 41评论 0 2
  • 十来天没有写日记了,有点拖,今天早上记单词,和上次记单词相隔快两周,顿时惊呆了,时间是在无意识下悄然流逝了,很多事...
    terrence_zhan阅读 29评论 0 0