文章目录
用户查询在IR系统中所处的位置:
整个过程的优化方式:
一、查询方式
1:基于关键词的查询
(1)布尔查询
- 用布尔运算符组合关键词:
- 使用“but”运算符可能产生大量的结果,但是和其他运算符组合,却很好地限制了可检索到结果的广泛性(非运算产生的结果太大了)
- 普通用户很难处理布尔逻辑(一个小学生用百度知道什么是与或非吗?)
(2)短语查询
- 使用某个特定的短语(词语的特定组合)来检索文献(注意是组合,像“information theory”,一个短语引起来的多个词语的组合)。
- 可以允许短语中穿插停用词或词干。
“buy camera”
匹配:“buy a camera”
、“buying the cameras”
等,因为系统会将停用词去掉。 - 基于倒排索引的短语查询
倒排索引必须存储每个关键词在文档中的位置信息
为每个词检索它的文献和位置信息,然后查看这些词的相邻情况,这样只要这些词是相邻的,那么就是短语,就可以匹配用户输入的结果。
最好从短语中最少使用的词开始查看相邻情况(每个词的链表长度差异非常大,常用词出现的非常多,所以从罕有词开始寻找相应的链表)
(3)近邻查询:短语查询扩展
指定词之间的最大距离约束的所有词的列表,对短语查询而言,是相邻词才可以算短语,但是这里只要满足出现距离小于某值就满足要求。
- 基于倒排索引的近邻检索
使用和短语检索类似的方法,去查找文档,这些文档中的关键词都满足近邻约束
搜索关键词的位置,找到ki到p的最近的位置,然后是否在允许的最大距离范围内
2:结构查询
假设文档是有结构的,可在检索中用到。允许查询说明是在哪个域中的: 比如是在题目,正文,节等。
3:容错查询(Tolerant Retrieval)
错了也没关系,系统会自动进行转换,非常人性化,也是最重要的功能之一。
(1)模式匹配
- 允许查询匹配字符串而不是单词
- 字典表管理需要适当的数据结构和算法支持
对于最后一个,词的长度没关系。只要第三个字母落在n-x
之间,也就是字典序的区间之内。
任意匹配查询实现方式
前缀匹配一般比较容易,我们使用B树就可以完成,但是后缀比较麻烦,需要维护一个逆向的B树。子串就更难了,不过我们可以把他拆成两部分,如下,然后求交集。不过最popular的方式,还是利用轮排索引或者k-gram索引来搞。
(2)拼写检查
正常情况下,10-15% 的web查询有拼写错误
- 如果查询或文献里含有打字错误、误拼写等情况会怎样?
- 拼写检查(Spell Checking):根据词的相似性给出拼写的建议,注意不仅要给出拼写是否错误,更要给出拼写的建议,因此我们必须知道词之间的相似性(不是语义上的相似性,而是外观的比如horse和house)。
- 判断单词(或任意字符串)的相似性:
编辑距离(Edit distance, Levenstein distance):
最长共同子序列 LCS(Longest Common Subsequence)
编辑距离 (Levenstein)
题目链接
使两个字符串相等,所需要的删除、插入或替换的字母的最小个数
“misspell” 和“mispell” 相距 1 (需要删除一个s)
“misspell”和“mistell”相距 2 (需要删除一个s,将p替换成t)
“misspell”和“misspelling”相距 3
ACM也有相应的题型,不是一个复杂的问题,dp即可解决。
最长共有子序列 (LCS)
同样一个经典的ACM问题,
两个字符串共有的最长子串的长度 子序列是通过删除所有的非公共字符得到的(不可以改变原字符的顺序)
“misspell” 和 “mispell” 的LCS的长度是 7
“misspelled” 和 “misinterpretted”的LCS长度是 7 “mis…p…e…ed”
二、查询操作
1:相关反馈
(1)相关反馈的过程
IR系统非常希望和用户能进行大量的交互,这样他们才能从人的意识上获得对搜索结果的评价,如何利用用户在检索过程中的相关判断?
- 用户发起一个查询 (short, simple),得到初始结果列表
- 用户在结果列表里标记相关或不相关
- 基于用户的反馈,系统重新计算,产生更好的结果
- 一次或多次反复上述的过程
思想:你可能不知道你真正寻找的东西,但是你很清楚你看到的
(2)为什么使用相关反馈?
用户一开始不知道要什么,但是直到眼前的是不是想要的,随着交互的进行,用户想要的东西越来越清晰,我们给出的结果也越来越准确。
- 你可能不知道你真正寻找的东西,但是你很清楚你看到的
- 查询构造可能很困难,通过用户反馈递归查询可以简化查询构造
- 当用户通过看到相关或不相关文献后能够改进查询,怎样改进?有了交互,如何改进是最重要的问题。
- 问题:通过分析用户相关或不相关反馈,是否可以自动地创建更好的查询?
(3)更新查询:三种经典方法
- 假设存在一个最佳的查询(optimal query) 相关反馈的目标就是引导用户查询接近最佳查询
- 相关反馈是怎样工作的?
用户反馈信息来更新查询
更新的查询去检索新的文献集
- 用矢量代数改变查询向量
把相关文献的向量加到查询向量上
把不相关文献的向量从查询向量上减掉 - 上两步把正面权重和负面权重的词项加到查询上,同时也对初始词项重新计算权重
最完美的查询式应该是所有相关文档的归一化矢量和减去不相关文档的归一化矢量和。但是我们不知道
C
r
C_r
Cr集合,只知道已经检索出来的
D
r
,
D
n
D_r,D_n
Dr,Dn集合,我们如何靠已知项进行查询的更新?
标准Rocchio修正方法
因为各种文档的重要性不一样,所以我们给他们不同的权重
Ide Regular方法
Ide “Dec Hi” 方法
减去与查询最相似的不相关文档,而不需要把不相关文档一个一个减去,因为不相关文档实在太多了。
几种方法的比较:
- 各种变形的效果基本相当
- 一些选择
当只有一些反馈文档的时候,Ide Dec Hi
较为有效
当有较多的反馈文档的时候,Rocchio (α=0.75, β=0.25)
较为有效 - 优点:
这几种方法都可改善检索效果(recall & precision) 计算简单,实验结果有效 - 缺点:
多种选择,缺乏优化策略
(4)计算实例
概率模型的相关反馈
(5)显式相关反馈的优缺点
显式相关反馈(Explicit RF):亦称用户相关反馈(User RF),用户显式地参与对检索结果的判定过程
- 优点:通过查询重构、修正,将明显地提高相关文献的排名和降低不相关文献的排名
- 缺点:需要人工的参与,加重用户的负担
- 用户有时候并不愿意提供反馈
- 反馈是基于用户的评注,带有很大的主观性,有时候很难搞清楚为什么会选择某篇文献
如果无需用户决定哪些相关或不相关?
- 隐式相关反馈(Implicit RF):系统通过跟踪用户的鼠标或键盘等动作(Click Data)来对检索结果进行判定,比如你搜索到了n个网页,没点第一第二个,但是点了第三个,那么第一第二显然不是相关的文档。
- 伪相关反馈(Pseudo RF):亦称盲相关反馈(Blind RF),系统自动地进行一些判定假设,如假设返回结果的前N篇是相关的,剩下的都不相关,
非常自信对吧,系统自动假设前TopN的文档是相关的,然后用他们来重构查询,没有任何用户的参与。
(6)总结
- 用户或系统模拟用户对检索的结果的相关性进行判定
- 可能很有效
依赖于用户判断的文档的真实情况 - 逐步被商业系统采用
速度和效率问题
• 系统需要花时间来分析文献
• 较长的查询通常需要花很长的时间 - 很活跃的研究领域 (many open questions)
- 相关反馈实际上是操作关键词的过程,是查询扩展(Query Expansion)的一种方式
2:查询扩展
系统能够更好的理解用户需求,除了相关反馈之外,还可以使用查询扩展。
查询扩展:最初含义是对原始查询增加词项(term),后来逐渐使用查询重构(Query Reformulation or Query Refinement?) 的含义,大部分情况下不做区分。相关反馈本质上就是一种查询重构。
查询重构:对初始查询进行修改,以便能更接近用户的查询需求
增删索引项(term) • 如:“计算机”,“计算机电脑”
修改索引项的权重或者概率分布参数• 如:“清华大学1 本科生1”,如果我更倾向于大学的查询比较准确,不想找到北大的本科生,那么我们可以改变权重,“清华大学2 本科生1”。
(1)为什么要查询重构?
用户有明确的查询目的,但是用户不知道如何构造好的查询,因此,初始查询往往不能很好地表达其查询需求
用户没有经验
查询的表达方式很多
对检索系统不熟悉
对目标文档分布不熟悉
用户不知道要具体查询什么,需要查看结果以后才逐渐细化
(2)查询扩展的方法
主要有两种大类方法:
人工字典(Manual thesaurus):利用已经建立好的词典
- 如: WordNet、Hownet
统计字典(Statistical thesaurus):自动导出字典
- 局部分析(local analysis):利用对初始查询检索得到的结果,特别是排名靠前的那些文档(称为局部文档)进行分析后来改善查询,需要基于上次检索的结果
- 全局分析(global analysis):利用文档集合中的全部文档进行分析,不需要基于初始检索的结果
A:人工字典:WordNet & HowNet
要注意到不仅是同义词可以进行扩展,语义相关都可以进行扩展。而且,利用字典进行扩展,有可能会返回更多的文档,改善查询的结果。也有可能影响查询的准确度,反而使得结果不够好。
WordNet
- 是一部在线词典数据库系统(wordnet.princeton.edu),采用了与传统词典不同的方式,即按照词义而不是词形来组织词汇信息
- 1985年由普林斯顿大学认知科学实验室建立
- WordNet 将成为一种国际标准,许多国家在筹划和建立与英文WorNet兼容的本国语言WorNet系统
- WordNet 将英语的名词、动词、形容词、和副词组织为
Synsets(同义词集)
,每一个Synset表示一个基本的词汇概念,并在这些概念之间建立了包括同义关(synonymy)、反义关系(antonymy) 、上下位关系(hypernymy & hyponymy) 、部分关系(meronymy)等多种语义关系
WordNetd的词义关系
Antonym (反义关系)
: front → back
Attribute: benevolence
→ good (noun to adjective)
Pertainym (属于关系)
: alphabetical → alphabet (adjective to noun)
Similar
: unquestioning → absolute
Cause (因果关系)
: kill → die
Entailment (继承关系)
: breathe → inhale
Holonym (部分关系)
: chapter → text (part-of)
Meronym (整体关系)
: computer → cpu (whole-of)
Hyponym (下位关系)
: tree → plant (specialization)
Hypernym (上位关系)
: fruit → apple (generalization)
中文知识词典—HowNet
- HowNet(keenage.com)的中文名字叫知网,英汉双语
- 一个以汉语和英语的词语所代表的概念为描述对象,以揭示概念与概念之间以及概念所具有的属性之间的关系为基本内容的常识知识库。
基于知识词典的查询扩展
- 增加同义词
- 增加 hyponyms(下位关系)以增加指定的词项
- 增加 hypernyms (上位关系)以放宽查询的范围,泛化,比如你搜个汉堡,也可以加上食物。
- 增加其他的关系词项
B:统计字典:局部分析
人工字典也有很多不足
- 现有的人工字典并不能够囊括所有的语言,而且需要花时间去维护和更新。
- 人工字典局限于同义词或相关语义的范围和种类
- 语义相关的词项可以从文档集的统计分析中挖掘
自动局部分析
只对查询的结果进行分析,而不是对全局的文档进行分析。
- 在查询的时候,动态地决定相似词项,通过检出文献中排在前面的文献分析
- 基于某个特定查询检出文献的一部分作相关性分析
- 在决定相似(相关)词项时,避免模糊性
“Apple computer” → “Apple computer Powerbook laptop”
基于局部聚类的方法
- 利用局部文档对词项进行聚类,即将相关的词项聚在一起,聚类的结果称为一个个簇(cluster),于是利用簇中的相关词项对查询q进行扩展
- 关键:定义词项之间的相似度,不同的相似度定义得到不同的簇
关联矩阵
关联簇(Association clusters)
注意
C
u
,
v
C_{u,v}
Cu,v是单个文献中两个词的词频的积的和哈哈哈。反正定义搞清楚。
关联不能说明两个词在文献中的接近程度,只是文献中两个词的共现频率。真正构成词汇的词不仅词频很接近,而且出现的距离比较近。所以我们需要一种更合理的度量方式:
度量簇
实验表明:使用度量簇效果好于关联簇,说明位置信息是有用的
C:统计字典:全局分析
- 决定词项的相似性:通过对全部文献集合的统计分析,提前计算
- 用最相似的词项(统计分析结果)扩展查询
具体过程:
叙词表的产生
- 基于整个文献集进行聚类分析(层次聚类),形成叙词表,利用建立好的叙词表来进行查询扩展
扩展的词序具有较高的词语分辨值(discrimination value),所以用低频词来构建叙词表类 - 全局统计叙词表采用聚类的方法,将所有文档进行按类聚合,聚成若干的类。
① 初始化:把每篇文档分别归入不同的簇中,设置停止条件;(一般是簇的多少要满足条件)
② 计算:计算每对簇之间的相似度;
③ 合并:从中选择一对相似度最高的簇[Cu,Cv],合并簇Cu与Cv;
④ 循环检测:检查是否满足停止条件,若不满足,返回(2);
⑤ 结束:得到聚类好的文档簇。
文档聚类
- 簇间的相似度定义为:两个簇中文档之间的相似度的最小值。而两个文档之间的相似度,可以使用向量模型中的余弦公式来计算
- 随着簇层次的升高相似度减小
- 簇的选择:
相似度阈值TC(Threshold Class):保证相似度
簇文档个数阈值NDC(Number of Docs in Class):保证紧凑的簇
最小逆文档频率阈值MIDF(Minimum Inverse Doc Frequency) : 保证低频词的词频 - 只要选出满足条件的簇,然后再该簇中选择满足MIDF的词汇作为扩展词加入原来的查询中。
D:局部分析与全局分析的比较
- 局部分析
基于初始查询检出的文献集
基于文献内的共现词项(co-occurrence)
接近单独的查询词项的词被选出 (query specific)
计算必须在线计算,与查询相关联,用于更新查询。 - 全局分析
基于整个文献集
基于上下文和短语结构内的共现词项
接近整个查询的词项被选择
可以离线计算(以提供快速访问),因为不需要和查询相关联,可以算好之后有查询再扩展,快速响应。 - 局部分析通常产生更好的效果,全局分析的文档集过于分散,局部分析本身就是与查询相关的文档再进行分析,所以比较有针对性。
(4)查询扩展小结
-
采用相关词项扩展查询可以提高性能,尤其是查全率(recall)
-
但是,必须小心选择相似的词项,以避免出现一些问题,如精度(precision)的损失
-
词项模糊性可能导致本来不相关但却统计相关的情形出现
“Apple computer” → “Apple red fruit computer” -
因为词项高度关联,扩展也许检索不出更多的 文献