现代信息检索 -- 空间向量模型

王老师的现代信息索引讲的很精彩,但是三节联排的课程总让我的注意力没办法太集中。在这里记录一下知识,也但是回顾了。

支持布尔查询的索引办法,在给定一个查询的情况下,可能匹配到的结果非常的多,那么对匹配结果(文档)进行评分或者相关权重分析,就显得尤为重要。

一、 参数化索引和域索引

  

  通常的文档都有额外的结构(title,author,content,etc.) ,这些也称为元数据。对于这些检索系统可以进行参数化索引,从而完成参数化搜索,类似

“查询由William Shakespeare 于 1601 年撰写、其中包含短语alas poor 的文档” , 通常用到专业领域索引,如百度学术。

  例:考虑一个文档集,每篇都有三个域 :author,title,body,如果查询“Shakespeare“,对于其中的每个域,出现为1,不出现为0,三个域对应三个权重系数,g1,g2,g3

如果g1 = 0.2;g2=0.3;g3=0.5,表示,三个域中,body中出现更加重要,如果此时某文档的title和body都出现了该词,那么这个文档的得分就是0.8。

  看完这个例子就比较好理解了,但是有一个问题就是,如何才能确定各个字段的权重。通常都是从人工标注好的训练集中进行权重的训练,让程序自动确定更加准确的字段。

训练集样本大概是这样子:

  如果文件有title,和body,那么St(d,q) 代表查询和文档的title域是否可以匹配

  样本:$1  文档ID:37  查询:linux  St:1   Sb:1    相关性判断:相关

  将类似的样本集交给公式训练可以得到满足误差范围内的g,从而得到字段的权重,计算过程不再多说。

二、此项频率和权重计算。

  这个中有个比较重要的概念:向量空间模型。

  书上的公式是在不太好理解,在文库中看到一个文章不错,我转一下。

下面我们考虑一个固定的查询和文档集,包含一个查询Q和三篇文档组成的文档集:

Q:"gold silver truck"

D1:"Shipment of gold damaged in a fire"

D2:"Delivery of silver arrived in a silver truck"

D3:"Shipment of gold arrived in a truck"

在这个文档集中,有三篇文档,所以d = 3。如果一个词项仅在三篇文档中的一篇中出现,那么该词项的IDF就是lg(d/dfi) = lg(3/1) = 0.477。类似地,如果一个词项在三篇文档中的两篇中出现,那么该词项的IDF就是lg(d/dfi) = lg(3/2) = 0.176。如果一个词项在三篇文档中都出现了,那么该词项的IDF就是lg(d/dfi) = lg(3/3) = 0。

三篇文档的每个词项的IDF值如下所示:

IDF(inverse document frequency),因为文档频率很高的词语,相反不是很重要的。比如一些停用词,所以引入了这个概念。

现在就可以构造文档向量了。因为文档集中出现了11个词项,所以我们构造一个11维的文档向量。我们可以用上文给出的按字母顺序排列的词项来构建文档向量,所以t1对应第一个词项"a",t2对应"arrived",依次类推。向量j中词项i的权重计算方式为idfi×tfij。文档向量如表2-1所示。


docid


a


arrived


damaged


delivery


fire


gold


in


of


shipment


silver


truck


D1


0


0


0.477


0


0.477


0.176


0


0


0.176


0


0


D2


0


0.176


0


0.477


0


0


0


0


0


0.954


0.176


D3


0


0.176


0


0


0


0.176


0


0


0.176


0


0.176


Q


0


0


0


0


0


0.176


0


0


0


0.477


0.176

那么计算权重:

便是计算Q与各个文档的向量的内积,这个也能代表相似度

sim(Q,d1) = 0x0 + 0x0.477 + 0x0 + 0x0.477 + 0.176x0.176 + 0x0 + 0x0 + 0x0.176 + 0.477x0 + 0x0.176 = 0.031

相应的计算其他的,便可得出排序。

这是比较原始的模型。未完待续。

时间: 2024-10-09 21:50:24

现代信息检索 -- 空间向量模型的相关文章

使用 TF-IDF 加权的空间向量模型实现句子相似度计算

使用 TF-IDF 加权的空间向量模型实现句子相似度计算 字符匹配层次计算句子相似度 计算两个句子相似度的算法有很多种,但是对于从未了解过这方面算法的人来说,可能最容易想到的就是使用字符串匹配相关的算法,来检查两个句子所对应的字符串的字符相似程度.比如单纯的进行子串匹配,搜索 A 串中能与 B 串匹配的最大子串作为得分,亦或者用比较常见的最长公共子序列算法来衡量两个串的相似程度,使用编辑距离算法来衡量等. 上述基于字符匹配层次的算法一定程度上都可以计算出两个句子的相似度,不过他们只是单纯的从字符

空间向量模型lucene

把一篇文档看作是一系列词元的集合,每个词元都有一个权重,如下: Document A= {termX, termY, termZ -- termN} Document B= {termX, termY, termZ -- termN} DocumentVector = {weight1, weight2, weight3 -- weightN} weigh为每个分词的映射到单位矩阵的,长度.这样就把文档放到一个N维的空间向量中(矩阵)[所有文档分成N个词元,就N维向量矩阵:其中文档D在m坐标上的

[从头学数学] 第191节 空间向量与立体几何

剧情提要: [机器小伟]在[工程师阿伟]的陪同下进入了[九转金丹]之第五转的修炼. 这次要研究的是[空间向量与立体几何]. 正剧开始: 星历2016年04月23日 11:00:22, 银河系厄尔斯星球中华帝国江南行省. [工程师阿伟]正在和[机器小伟]一起研究[空间向量与立体几何]. <span style="font-size:18px;">#例5 def dot(a, b): if (len(a) >= 3): return a[0]*b[0] +a[1]*b[1

机器学习入门-文本特征-word2vec词向量模型 1.word2vec(进行word2vec映射编码)2.model.wv[&#39;sky&#39;]输出这个词的向量映射 3.model.wv.index2vec(输出经过映射的词名称)

函数说明: 1. from gensim.model import word2vec  构建模型 word2vec(corpus_token, size=feature_size, min_count=min_count, window=window, sample=sample) 参数说明:corpus_token已经进行切分的列表数据,数据格式是list of list , size表示的是特征向量的维度,即映射的维度, min_count表示最小的计数词,如果小于这个数的词,将不进行统计,

词袋模型(BOW,bag of words)和词向量模型(Word Embedding)概念介绍

例句: Jane wants to go to Shenzhen. Bob  wants to go to Shanghai. 一.词袋模型 将所有词语装进一个袋子里,不考虑其词法和语序的问题,即每个词语都是独立的.例如上面2个例句,就可以构成一个词袋,袋子里包括Jane.wants.to.go.Shenzhen.Bob.Shanghai.假设建立一个数组(或词典)用于映射匹配 1 [Jane, wants, to, go, Shenzhen, Bob, Shanghai] 那么上面两个例句就可

基于word2vec的文档向量模型的应用

基于word2vec的文档向量模型的应用 word2vec的原理以及训练过程具体细节就不介绍了,推荐两篇文档:<word2vec parameter learning explained>.和<word2vec中的数学>. 在<word2vec中的数学>中谈到了训练语言模型的一些方法:比如n-gram和神经网络.在使用神经网络训练语言模型时得到的"副产物",就是word2vec词向量.基于神经网络训练语言模型有2种方案:cbow和skip-gram,

信息检索 3 检索模型

检索模型分为两种,一种是boolean model 一种是ranked retrieval 一 boolean查找: 1 binary decision:is document relevant or not? 文档只有相关和不相关两种,并没有排行 2 presence of term is necessary and sufficient for match 我们只需要记录每个文档有那些词汇就ok了 3 我们查询时的操作可以有 and和or都是集合操作 二 ranked algorithm:

hdu 5206 Four Inages Strategy (空间向量)

中文题目:<四象阵法> 判断空间四点能否组成正方形. 一次AC,好激动~ #include <algorithm> #include <iostream> #include <cstring> #include <cstdio> #include <cmath> typedef long long ll; using namespace std; struct point{ int x,y,z; }; bool isequal(poi

[C++][代码库]Vector3空间向量类

本文用C++实现一个简单的Vector3类的功能,暂时有的功能是: 1 + - * /算术运算 2 向量的数量积,又叫:点乘 3 向量的向量积,又叫:叉乘 4 向量单位化(normalization) //Vecotr3.h #pragma once extern const double uZero; class Vector3 { float x, y, z; public: Vector3():x(0), y(0), z(0){} Vector3(float x1, float y1, f