当前课程知识点:互联网大规模数据分析技术 > 第六章 信息检索 > 第16讲 信息检索之TFIDF > Video
欢迎来到
互联网大规模数据分析技术
的课堂
我是今天的主讲教师李琳
来自武汉理工大学
这一讲我们要学习
信息检索之TFIDF
关于这个名词
是我们今天课堂讲解的主要内容
今天我们的内容
将包含以下四个方面
排序的结果
如何对一个文档进行打分
另外还要关注
两个统计运算的结果
以及我们的打分的规则
以及权重的计算
那么到目前为止
我们的查询都是一种
布尔的查询
也就是我的答案只有两种
1是,2或者不是
这个对一些非常专业的用户来说
它能够准确的表达
自己的信息需求
我只想找到我想要的结果
这个布尔查询是非常方便的
但是对于大多数的用户来说
我使用布尔查询会带来一些问题
要不就会得到大量的结果
要不呢
由于我的查询词选取的不合适
一个结果也没有
在这种情况下
我们希望有一种打分机制
来帮助我们完成
我们把这样一种打分机制
叫做Ranked retrieval
在这里我们对布尔查询
做一个简单的举例
大家看到对于这样一个查询词
Query 1
“standard user dlink 650”
在这里我们可以得到
20万的查询结果
但是当我把这个查询词加长之后
大家看到
一个结果也没有
所以
对于布尔查询来说
所有的单词都是一种与的关系
与的关系导致结果太少
如果把所有的关系
都看成或的关系呢
这个结果又太多了
所以我们考虑到
当我们用查询词、关键词
作为查询的时候呢
我们希望对于结果能有一个排序
告诉我哪些结果
最有可能反映用户的需求
而那些结果的可能
并不能反映用户的需求
所以在这样一种情况下
我们考虑到了
要进行一个叫
ranked retrieval model
当一个系统
能够产生一个排序的结果
大量的结果集合
就不是一个问题了
因为大家都用过搜索引擎
在搜索引擎上面
你输入查询词之后
搜索引擎会给出若干个结果
但是大多数的用户都只关心
哪一页的结果呢
第一页
而在第一页通常只反映了Top10
也就是前10
所以用户当在前十个
第一页的结果当中
没有找到自己的答案的时候
很多人会改变自己的查询词
少部分的人会点第二页第三页
我想能点到第四页第五页的人
是非常少的
在这样的一个情况下
搜索引擎关注的
不是把大量的结果反馈给用户
而是精确的把Top10的结果
反馈给用户
这就成为了
搜索和查询的一个关键的
满足用户的这样一个指标点
那么我们如何来排序呢
我们把排序可以叫rank
也可以叫order
怎么来排序呢
我们希望这样一个排序
在打分值进行归一化处理之后
能够在0和1之间
这个0和1衡量了一个查询词
和一个文档之间的匹配程度
在这里我们用了匹配
也有可能有人解释成
相似度或者叫距离
总之它反映的是
一个查询词和一个文档
他们在满足
用户信息需求上面的程度
好
那么在现在我们需要一个方法
来给查询词和文档对进行打分
我们先考虑
只有一个查询词的情况
很显然
如果这个查询词出现在文档里面
它必须有一个打分
没有的话就是0
does not occur
那么这个词就是0
那么出现的情况怎么办呢
那么我们有一个最直观的思想
在这里有这样一句话
The more frequent
the query term in the document
the higher the score should be
也就是说一个单词
在这个文档当中出现的越频繁
那么这个文档
可能和这个查询词越相关
那么我们需要一种什么样的机制
来衡量呢
数个数
对吧
数一个查询词
在一个文档当中的个数
以及它匹配的个数
我们最简单情况呢
有一个指标叫做Jaccard
Jaccard是表示
两个集合的重叠程度
当我有一个集合A
又有一个集合B
那么这两个集合它们的重叠程度
有多少呢
是用A和B的交集
去除以A和B的并集
所以在这个里面
一个文档和它自身来说
它的相似度就是1
一个文档如果和另外一个文档
没有一个单词是重复的
那么它的相似度就是0
所以这样一种打分机制
给了一个最简单的方式查找
两个文档它们单词的重叠程度
那比如说在这个例子当中
我有一个查询词叫
ides of march
有一个document1
有一个document2
那么这个查询词和document1
和document2的相似度
是怎么计算的呢
大家可以看
查询词有三个单词
文档1有四个单词
那么它们重叠的个数有多少呢
我们找一找,只有这一个
那么我的分子就是1
我们两个它的并集有多少呢
总共有多少个单词呢
123456这个是重复的
所以是1/6
我们再看一下
这个query和document2
它们的重复的单词的个数
有多少呢
还是重复的march
那么所以它重复的个数是1
它们两个并集的总数是多少呢
12345
所以从这样一个例子
我们可以看到
query和document2
更为相似一些
那么大家思考一下
发现了觉得很奇怪
query查询词和两个文档
重复的单词都只有一个
但是document2的相似度
在Jaccard计算下却要高一些
这是因为document2要短一些
所以它们总的集合的分母
它就要少一些
这样一种情况的我们学者发现
并不适合排序
也就是说我会偏向于短的文章
让我们来看一下
有没有更好的排序方法
我们回忆一下
在前面的课程当中
所学过的单词文档矩阵
在前面的文档矩阵当中
我们用1来代表
这个单词出现在这篇文章当中
我们用0来代表没有出现
现在我们把这个出现
和不出现用一个次数
大家还记得wordcount这样一个
MapRreduce的计算的例子
每个单词在文章当中
出现了多少次
我是可以通过计算算出来的
比如Antony这个单词
在这样一本书当中出现了73次
没有出现我仍然用0
这样的话每一个文档
也就是我们这一列
就可以表示成一个向量
73,157,27,10,0,,0,0
这就是一个向量
那么表示成向量之后呢
大家会发现
其实它也有一个问题
大家看我ppt上的这个例子
John is quicker than Mary
Mary is quicker than John
如果按照刚才的
向量的方式来组织
它是1111,它也是1111
两个是一模一样的
但是实际上
大家从语义上可以看出
这两个句子是完全相反的意思
这就是我们叫的词袋模型
词袋模型只考虑有没有这个词
不考虑词出现的顺序
这是它的一个缺点
在这里我们暂时不在这门课当中
讨论如何改进它
我们就用这样一个词袋模型
就不考虑位置来
解决这样一个排序的问题
刚才我们看到了一个单词
在文档中出现的次数
我们用一个专门的词语来描述它
我们把它叫做term frequency
我们简称TF
我们想用这个TF来打分行不行
可以
如果一个文档当中
含有这个单词出现的10次
那么肯定会比这个文档中
只含这个单词1次的文档
它要更接近于我的查询词
所以次数能够反映查询词
和文档之间的相关的问题
在这里面我们给出这样一个公式
TF打分越多越好
但是大家注意一下
在这里我采用了log函数
就是说
由于这个次数可能量太大了
我们把它稍微降一下
比如说通过log函数的变化
10就变成了2
1000就变成了4
所以这样当你有一个单词
你有一个文本
在计算一个查询词
和文档的相似度的时候
我们就对每一个单词
在文章中出现的次数进行累加
这个累加的个数就是你查询词
和文档重叠的单词的个数
这是刚才我们讲的TF
但是在TF当中
我们又注意到了一个问题
统计次数
在我的单词当中
会有很多这样一些单词
我们叫stop word
比如说the
比如说a
比如说an
比如说of
这样的词会大量的在文档中出现
而且这种词的出现
它比一些有意义的实词
出现的概率频率会非常高
它会在整个打分
就会占一个很大的比重
如何解决它们呢
所以我们借助这样一个思想
来考虑一下另外一个指标
叫做Document frequency
也就是说一个单词
大量地出现在不同的文档中
说明这个单词对某些文档来说
它并不是那么重要
因为你也有我也有他也有
它并不能
很唯一地去代表这个文档
总结的一句话就是
a document containing this term
is very likely to be relevant
to the query arachnocentric
比如说我们考虑一个查询词
这样一个单词
是很少见的
如果在某个文档当中
包含这样一个单词
那说明和查询词是非常相关的
所以怎么来体现一个单词
rare in the collection呢
也就是说并不是很多文档
都包含这个词
只有少数的文档包含它
正好你又要查询这个词
这些少数的文档
虽然由于其它词频并不高
也有可能成为我的结果
在这样一个情况下
我们来考虑这样一些词
比如说
high,increase, line
这样一些词在集合当中太频繁了
不光是a,the那个方式
可以通过去除停用词来完成
但是high, increase, line
这样的词
你不能去掉它
它还是有意思的
所以在这样的情况下
我们如何降低这样一些词
在排序当中的比重呢
也就是说越高越不好
TF是说的越多越好
对于这样的方式
我们需要给它做一个处理
我们把这样一个集合当中
包含这个单词文档的个数
叫做Document frequency
简称DF
越多越不好我们怎么来体现呢
大家看到这个符号没有
除,做分母
你越多就越不好
这个单词在这样一个集合当中
出现的文档的个数越多
那么越不好
为了避免被除之后小数太小
我们加了一个N
这个N就是我们整个集合的文档个数
所以这样一个权重的
我们把它叫做IDF
我们有了TF
知道了一个单词在集合当中
出现的次数越多越好
我们有了IDF知道了一个单词
如果集合当中
包含它的文件数太多了也不好
那我们来看一下
这个IDF它的一些计算
比如我们有100万个文档
像animal这个单词
它出现在了100个文件集合当中
那么我们除的时候
就用100万去除以100
再取一个log的对数
这样的话我们就得到了它的值
大家看一下
IDF对于什么样的查询词
会有影响呢
比如说我的查询词只有一个
就是iPhone
那么它有没有影响呢
这个对于排序来说
是没有太大影响的
它有影响的是多个查询词
比如说
我有两个单词组成的查询词
IDF的权重会使得这个单词
capricious的重要性
要多于person
为什么呢
如果person
在文档当中出现了100次
这个单词capricious
也出现了100次
但是在整个集合当中
person这个单词太普遍了
而这个单词capricious
相对来说次数略少
所以在整个计算当中
这个少量出现的单词所占的权重
会比较大
这里我们来看一下
在这个例子当中
我们有insurance
Collection Frequency也就是
在整个集合当中出现了10440
但是只有3997个文档包含它
那么try这个词呢
同样它也出现了这么多次
但是有八千多个文档包含它
大家就可以看到
这样一些常见的词
它实际上按照我们刚才IDF处理
就要降低它的比重
怎么把TF和IDF进行组合呢
我们用了简单的乘法
用TF去乘以IDF
这个IDF指的DF倒数
大家可以看到在这个里面
我用了一个1
这个加1是为了避免在log当中
出现0,因为出现0
log是没有办法计算的
其实在这个公式当中
我们也有一小点问题
因为DF有可能为0
一个数去除以0会变得无穷大
所以实际上在写的过程当中
在编程的过程当中
你们要把它写上,加一个1
这样来处理
这样的话
我们就对每一个单词的权重
进行了一个简单的打分
也就是TFIDF的由来
它中间是乘号的关系
实际上这种打分机制增强了一些
非常见词在整个集合当中的
这样一个重要性的权衡
整个打分
我们用这样的公式来进行表示
score就是一个打分
查询词和文档集合的打分
要做一个累加
这个累加多少次
取决于查询词和文档
重叠单词的个数
每一个单词
在文章当中出现的频率
去乘以这一个集合当中
有多少个文档包含它的倒数
也就是我们的IDF
形成了最终的打分
在这里我用了一个简化的形式
也就是这个TF就可以用我们
刚才这个幻灯片用的log(1+TF)
IDF可以用logN/DF
那这只是一个简化的表达形式
在实际的使用当中
我们会有很多种的变形
等会我们看到
所以我们对刚才所讲的问题
和前面的做一个贯通的话
从最开始的1、0
有没有的矩阵到计数
多少次,这样一个矩阵
到最后
我们用TFIDF来表示一个单词
在这篇文章当中的重要性
其实1也是一种重要性
七十八十九十次数
也是一种重要性
TFIDF它也是一种重要性
通过这样的处理之后
我们得到的这个文档集合的向量
就不再是70、80、90、0、0、0
而是这样一种经过一些运算
所得到的这样一些结果
也就是我们说的是实数值
这就是我们今天所讲的
TFIDF的基本概念
在下面的课程当中
我们会跟大家学习
如何用TFIDF来进行运算
来得到我的排序结果
今天的课程就到这里
谢谢大家
-第1讲 大数据与数据挖掘概述
-第2讲 频繁项集和关联规则的基本概念
-第3讲 Apriori算法
-第4讲 Apriori算法的改进与兴趣度度量
-第5讲 分类的基本概念
-第6讲 决策树
--第6讲 决策树
-第7讲 简单贝叶斯分类
-第8讲 聚类的基本概念
-第9讲 K-Means & K-Medoids Clustering
--第9讲 K-Means & K-Medoids Clustering
-第四章 聚类算法--习题
-第10讲 大数据处理平台Hadoop
-第11讲 MapReduce编程
-第12讲 大数据处理平台Spark
-第13讲 NoSQL数据库
-第14讲 Web信息检索简介
-第15讲 信息检索之倒排索引
-第16讲 信息检索之TFIDF
--Video
-第17讲 信息检索之相似度排序
-第18讲 Web搜索之链接分析
-第19讲 Web搜索之PageRank
-第20讲 Lucene信息检索平台
-第七章 Web链接分析--习题
-第21讲 推荐系统简介
-第22讲 推荐系统之协同过滤
-第23讲 Mahout数据挖掘平台
-第24讲 信息过滤评价体系
-第八章 推荐系统--习题一
-第八章 推荐系统--习题二
-综合编程题