布尔检索和向量空间模型——nlp基础学习笔记

来源:互联网 发布:演讲比赛网络投票 编辑:程序博客网 时间:2024/05/19 12:17

首先说布尔检索,顾名思义 用0,1 代表真假值来进行检索。

比如两句话    我爱吃鸭,  他爱吃鸡

可以构造出一个二维矩阵:

横坐标是每一句话包含的信息,纵坐标是所有文字

  句子1 句子2     …………

  0  0

  1  0

  0  1

  1  1

等等。。。。。


当用户想要检索某些文字的时候 直接查找对应的文章就好了。但是这样表述太浪费空间,远远不够实践所需的条件,所以倒排索引就应运而生。

正排索引就是像上面一样给个句子,所引出来多少个词。

倒排索引就是给定词,记录包含该词的句子

吃: 句子1  句子2   句子4   句子5   句子77

鸡: 句子1  句子4  句子77


给出关键字,只需要查找所对应的句子集合,再进行与运算,就可以得出符合条件的搜索结果了。



布尔检索有一大弊端,就是对于词组的二维描述——有无判断,会找到大量的文章,而且无法进行最优解的推送,这个时候就需要有一个权重来表示搜索到的结果与想要的结果是否契合。

向量空间模型的概念就出现了。


概念就是,两篇文章,将关键词的权重当作向量,用求余弦的方式计算其向量的相似度,也就是这两个向量所形成的角度的大小来判断其拟合程度。

     这里涉及到两个问题,第一个就是计算量的问题,词过多会导致计算的速率很慢,有些停用词,如 ‘的’ ‘中’等没有意义,所以我们会先进行去停用词的步骤。

     第二个问题就是,权重的表示方式,如果仅仅是靠这个词出现的次数来判断这个词的重要程度未免太过片面,而且这个频率也与文章的长度有关系。所以这里就引进了一个算法叫TF-IDF。



TF 为词频,即这个词在文档中出现的频率,可以用  该词出现次数n/所有词的数量m,  也可以用  n/出现最多的词数



IDF为逆文本频率, 因为考虑到专业性的词汇的出现带有局限性,即 假设总共1000篇文章,有10篇出现该词,则证明这个词的意义很重要,而如果1000个文章全都有的词,则可以初步判断这个词是一个烂大街的词。


而这种定义用数据来表示就是,所有的文章数n/含有该词的文章数m,逆字也体现在这里

之后求对数的方式来平滑权重  log(n/m)

为了防止分母为0的情况,一般将公式记为 log(n/(m+1))



最后该词的权重 = tf  *  idf


这个方式有一个缺点就是 无法关联词所在的位置,所以精准度并不是特别高


阅读全文
0 0