开发者学堂课程【高校精品课-华东师范大学 - Python 数据科学基础与实践:文本表示-上】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/1067/detail/15493
文本表示-上
内容简介:
一、文档检索模型
二、文档索引词矩阵
一、文档检索模型
文档检索模型和文本表示,文档检索模型也称文档模型,是指如何对查询和文档进行表示,然后对他们进行相似度计算的框架和方法。
它的本质应用特征词量化方法,特征词量化有些评估函数,前面也提过。然后,表示文本,以便对相关度进行建模,相关度建模就是我要查询用一个表示,然后再去文档库里找相应的文档,就是这两个要进行匹配.相关度计算。
我们看这张图,很直观,就是说,我们原始查询要有一个查询表示,那么这个表示怎么表示呢,我们需要一些特征词量化的方法。同样地呢原始文档也要有文档表示,这样他们就可以进行相关度计算,需要注意的是,这个计算一定是数字化的计算,不是字符串之间的查找和匹配。
那么,我们来看一下,文档的表示,这样一个表格,如何来表示文档.
文档我们有d1.d2.d3三个文档,还有很多特征词t1t2,单元格表示用什么样一种量化方法,这些量化方法我们前面提过,有一些量化函数。方法很多,那么在文档检索模型里到底用哪一种方法。
我们文档模型有这样几种分类,早一点的布尔模型,还有向量空间模型,还有概率模型,概率模型扩展统计语言模型,新的还有神经网络语言模型。我们来看一下他们的时间,比较早的就是布尔模型,20世纪60年代就有了,之后就是向量模型,在之后是概率模型,比较新的就是神经网络语言模型,下面我们把几个文档模型展开介绍一下。
第一个是布尔模型,布尔模型是建立在经典的集合论和布尔论代数的基础上,他的基本思想就是每个词在一篇文档中是否出现,对应权值是0或1,就是说,如果出现就是1,没有出现就是0.文档检索用布尔逻辑运算,布尔操作就是用AND OR NOT。
它的相似度计算就是查询布尔表达式和所有文档的布尔表达式进行匹配,匹配成功的文档得分是1,把匹配成功的文档传输给用户。它的优点是简单,容易理解,比较简洁。现在我们外面很多检索就是运用布尔模型,比如说网站,它的框式检索,大众点评啊,现在还是用的布尔检索。
它的缺点就是准确匹配,信息需求的能力表达不足,比如说你输老公可以查询到,搜丈夫就查询不到,你搜计算机可以查到,你搜电脑就查询不到。你搜最便宜的笔记本,它按关键词匹配出来,排列的并不是最便宜的笔记本电脑.
我们再看第二个是向量空间模型,它的简称是VSM,思想是将文档表达为一个矢量,看作是向量空间中的一个点。
文档一,词1的权重,词2的权重,词3的权重,以及文档2和查询,然后我们就可以在向量空间内表示文档了。文档D1有两个T1,三个T2,5个T3,这样就表示出向量中的一点,同样的,D2也是一样查询也是一样,如果是相似度进行计算的话,就是每个向量进行运算。向量空间运算的全程就是Vector Space Model。
二、文档索引词矩阵
下面我们来看一个概念,叫文档索引词矩阵,n篇文档,m个索引词构成的矩阵Am*n,每列可以看成每篇文档的向量表示,每行可以看成索引词。
矩阵的元素可以是权重,也可以是布尔值的0或1.下面我们看一个具体的例子。
大家直观看一下D1这个文档和哪一个文档相似度高,我们可以很明显的看出来,和D6文档相似度很高,我们就可以把这一列看作是一个向量,构建向量空间模型。
我们来看一下这个向量是如何表示的呢,M个无序标引项t,可以是词条、词根、词、短语,每个文档D用标引项向量表示V(d)等于权重,构成一个向量。那么这个权重如何计算,我们在之前量化词里提过多次。这里给大家介绍一个方法,这个可以是词频统计,这个是广义的,也可以是文档频率。比如TFi,j:特征i在文档j中出现的次数,这样一个词频TF。
文档频率这个DFi。在所有文档集合中出现特征i的文档数目,就是文档频率。在实际运用中,我们大多数用词频乘以文档频率,tf*idf,我们在之前也提到过。那么我们来看一下TF-IDF选择这个权重的意义。TF和IDF两个单词全称,这两项结合起来,对单词t和文档d定义TF-IDF(t,d),这个词频越大,乘积越大,如果DF越小,也就是IDF越大,权重也很大。就是说某一特定文件内的高词语频率以及该词语在整个文件集合中的低文件频率,可以产生出高权重的TF-IDF。
一个TF比较大,一个IDF比较大,那么权重的目的就是区分不同的文档,权重越高越容易区分,因此,TF-IDF倾向于过滤掉常见的词语,因为常见的词语在每个文档里都有,大家很难区分,保留重要的词语。
比如很多篇文档里,关于军事的词语就有五篇文档里有,五篇文档里出现的频率很高,大多数文档里就没有,这样权重就很大,权重越大,就越容易把它和其他文档区分开来。这就是TF-IDF的意义.
这里我们给大家看一个用TF-IDF查询的例子,这里先用查询,有三篇文档,用英文表示更方便一些,文档数是三。
IDF在工程里一般是取对数进行处理的。我们进行分词后,得到的所有分词在第一列里面,我们没有取停用词。查询每篇文档,我们来看一下它的词频。先计算它的词频,在计算文档频率,也就是一个词在几篇文档里出现。然后再做D/df,也就是文档数/文档频率。
后面是词频和一些文档频率的计数,然后我们计算权重,权重是用tf*idf。IDF在工程上是用对数,做了转换的。他得到的权重的值就在后几列里,得到了文档的向量表示,和查询的向量表示,然后就可以在空间向量里表示文档和查询,如果做相似度计算的话就做向量的计算。