查询关键字理解三部曲.docx
- 文档编号:29348213
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:10
- 大小:23.10KB
查询关键字理解三部曲.docx
《查询关键字理解三部曲.docx》由会员分享,可在线阅读,更多相关《查询关键字理解三部曲.docx(10页珍藏版)》请在冰豆网上搜索。
查询关键字理解三部曲
“查询关键字理解”三部曲
第一:
查询关键字分类
查询关键字理解(QueryUnderstanding)。
也就是说,我们希望通过查询关键字来了解用户种种行为背后的目的。
查询关键字产生的特征(Feature)往往是很强的指导因素,也是个性化搜索结果非常重要的源泉。
因此,深入了解并掌握查询关键字理解方面的技术就变得很有必要。
查询关键字理解最基本的一个步骤就是给查询关键字分类(Classification),看这些查询关键字有什么用户意图(Intent)。
今天我就来聊一聊查询关键字分类的一些基本概念和技术,让你对这方面的开发和研究有一个基本认识。
查询关键字分类的历史
从商业搜索引擎开始面世的第一天起,人们就发现,可以从查询关键字中得到很多用户的信息,特别是理解用户的意图。
早在1997年,商业搜索引擎Excite就开始了百万级别查询关键字的研究工作。
然而,真正对查询关键字分类进行系统阐述的是安德烈·布罗德(AndreiBroder)的论文《网页搜索分类》(ATaxonomyofWebSearch)。
安德烈很有名头,在斯坦福大学攻读博士期间师从图灵奖得主高德纳(DonaldKnuth),然后在曾经名噪一时的第一代搜索引擎公司AltaVista(后被雅虎收购)担任首席科学家,之后加入位于纽约的IBM研究院组建企业级搜索平台,2012年后加入Google,担任杰出科学家(DistinguishedScientist)。
他还是ACM(AssociationofComputingMachinery,计算机协会)和IEEE(InstituteofElectricalandElectronicsEngineers,电气电子工程师学会)的双料院士。
安德烈的这篇论文可以说是奠定了查询关键字分类的坚实基础。
这之后研究人员的很多工作都是围绕着如何自动化分类、如何定义更加精细的用户意图来展开的。
查询关键字分类详解
我就从安德烈这篇非常有名的文章说起。
在网络搜索(WebSearch)成为比较主流的咨询查询手段之前,传统的信息检索认为,查询的主要目的是完成一个抽象的“信息需求”(InformationNeeds)。
在传统信息检索的世界里,最主要的应用应该是图书馆检索或者政府学校等企事业单位的检索。
因此,在这样的场景下,假定每一个查询主要是满足某个“信息需求”就显得很有道理了。
然而,早在2002年,安德烈就认为这样的传统假定已经不适合网络时代了。
他开始把查询关键字所代表的目的划分为三个大类:
导航目的(Navigational);
信息目的(Informational);
交易目的(Transactional)。
此后十多年里,查询关键字的这三大分类都是这个方向研究和实践的基石。
我们先来看这个分类的内涵。
第一类,以导航为意图的查询关键字,这类查询关键字的目标是达到某个网站。
这有可能是用户以前访问过这个网站,或者是用户假设有这么一个关于所提交查询关键字的网站。
这一类查询关键字包括公司的名字(如“微软”)、人的名字(如“奥巴马”)或者某个服务的名字(如“联邦快递”)等。
此类查询关键字的一个重要特点就是,在大多数情况下,这些查询关键字都对应唯一的或者很少的“标准答案”网站。
比如,搜索“微软公司”,希望能够找到的就是微软公司的官方网站。
另一方面是说,某些“信息集成”网站也是可以接受的“答案”。
比如,查询“奥巴马”,搜索返回的结果是一个列举了所有美国总统的网站。
第二类,以信息为意图的查询关键字,这类查询关键字的目标是搜集信息。
这一类的查询和传统的信息检索非常接近。
值得提及的是,从后面的研究结论来看,这一类查询关键字所包含的目标不仅仅是寻找到某类权威性质(Authority)的网页,还包括列举权威信息的俗称“结点”(Hub)的网站。
第三类,以交易为意图的查询关键字,这类查询关键字的目标是到达一个中间站点从而进一步完成“交易”(Transaction)。
这一类查询关键字的主要对象就是“购物”。
现在我们对“电子商务”的态度可以说是非常自然了,但是十多年前,在传统信息检索界统治的搜索研究领域,提出“交易”类型的查询关键字可以说是很有新意的。
当然,这样的分类如果仅仅是概念上的区分那就没有太大的意义。
安德烈利用搜索引擎AltaVista进行了一次调查研究,这次调查有大约3千多的用户反馈。
想到这是在2001年的调查,可以说已经是大规模的研究了。
这次调研的结果是这样的:
在用户提交的信息中,导航类型的查询关键字占26%,交易类型的查询关键字占到了24%,而剩下的将近50%是信息类型的查询关键字,用户的日志(Log)分析进一步证实了这一数据。
你可以看到,这种把查询关键字进行分类的研究是对用户行为进行建模的必要步骤。
于是,很快就有不少研究人员嗅到了查询关键字分类的价值。
然而,完全依靠用户直接反馈来获取这类信息则变得越发困难。
这里主要有三个原因。
第一,不可能寄希望于用户汇报自己所有关键字的意图;第二,面对亿万用户输入的查询关键字,手工标注也是不可能的;最后,安德烈的三类分类还是太粗犷了,在实际应用中希望得到更加细颗粒度的用户意图。
把查询关键字分类问题转换成为标准的机器学习任务其实很直观。
确切地说,这里需要做的是把查询关键字分类转换成为监督学习任务。
这里,每一个查询关键字,就是一个数据样本,而响应变量,则是对应的类别。
具体情况取决于我们的任务是仅仅把查询关键字分为几个类别,并且认为这些类别之间是互相独立的,还是认为这些类别是可以同时存在的。
在最简单的假设下,查询关键字分类就是一个普通的多类分类问题,可以使用普适的多类分类器,比如支持向量机(SVM)、随机森林(RandomForest)以及神经网络(NeuralNetworks)等来解决这类问题。
对于绝大多数监督学习任务而言,最重要的一个组成部分就是选取特征。
随后很多年的研究开发工作中,有一部分就集中在尝试使用不同的特征,然后来看对提高分类的精度是否有效果。
过去的研究反复证明,以下几类特征非常有效。
第一类特征就是查询关键字本身的信息。
比如,查询关键字中已经包括了已知的人名或者公司名,这种时候,分类结果就不太可能是交易意图的类别。
也就是说,查询关键字,特别是某些词或者词组和类别有某种关联信息,而这种关联很大程度上能被直接反映出来。
第二类特征是搜索引擎返回的查询关键字相关的页面本身的信息。
你可以想象一下,假如搜索“奥巴马”这个关键字,返回的页面都是维基百科的页面以及奥巴马基金会的页面,那么这些页面上面的内容可能很难包含任何商业的购买信息。
而对于“佳能相机”这个查询关键字而言,返回的页面很可能都是电子商务网站的商品信息,从而能够更加准确地判断“佳能相机”的分类。
第三类特征则是用户的行为信息,那就是用户在输入查询关键字以后会点击什么网站,会在哪些网站停留。
一般来说,哪些网站点击率高、停留时间长,就表明这些网站在返回结果中可能更相关。
于是,采用这些网站来作为查询关键字所代表的内容,就可能更加靠谱。
在实际的应用中,查询关键字的分类往往还是有很大难度的。
因为在普通的现代搜索引擎上,每天可能有三分之一、甚至更多的关键字是之前没有出现过的。
因此,如何处理从来没有出现过的关键字、如何处理长尾中的低频关键字,就成了让搜索结果的精度再上一个台阶的重要因素。
第二:
查询关键字解析
更加精细的查询关键字理解模块:
查询关键字解析(Parsing)。
如果说查询关键字分类是对查询关键字的宏观把握,那么,对查询关键字的解析就是微观分析。
其实,查询关键字解析是一类技术的统称,我今天就来聊几个比较热的话题。
查询关键字分割
首先,让我们设想这么一个场景,在英文的搜索引擎中,如果一个用户输入的是“WhiteHouseOpening”这个查询关键字,这个用户的意图(Intent)是什么呢?
要想理解用户的意图,我们就得知道用户输入的单词的涵义。
那么,在上面这个查询关键字里,我们到底是分别理解每一个单词“White”、“House”和“Opening”呢,还是“WhiteHouse”和“Opening”呢,还是有可能“WhiteHouseOpening”是一个整体呢?
这里说的其实就是“查询关键字分割”(QuerySegmentation)这个概念。
在刚才的例子中,如何把“WhiteHouseOpening”进行分割直接关系到搜索结果的质量。
试想在一个比较标准的现代搜索引擎里,一般来说,都会有一个模块根据查询关键字来提取“倒排索引”(InvertedIndex)中的文档。
这个阶段的提取数目一般是几百到几千,这个过程常常被称为“检索流程”(RetrievalPhase)。
当有了这些文档以后,现代搜索引擎会利用比较复杂的排序算法,通常就是我们之前提到过的基于机器学习的排序学习模型,来对文档进行重新排序(Re-Rank)。
你可以看到,在这样两个阶段的流程里,如果好的文档没有在第一个阶段被提取出来,不管第二个阶段的功能有多强大,搜索的整体结果都不可能有多好。
而对于“检索流程”而言,在“倒排索引”中进行查询的关键就是使用什么“单词”或者“词组”进行查找。
用刚才的例子来说,就是看文档究竟是符合“WhiteHouse”,还是“White或House”,还是“WhiteHouseOpening”。
很明显,这三种情况得到的文档集合是不尽相同的。
如果用户的真实意图是搜索美国总统府白宫的开放时间,那么把这个搜索关键字给分割成“White或House”,很明显就会影响提取的文档集合。
那究竟该怎样做查询关键字分割呢?
这里我介绍一篇论文《重新审视查询关键字分割》(QuerySegmentationRevisited)。
在这篇论文里,作者们集中介绍了一些主流的“查询关键字分割”技术,文章非常值得精读。
下面我为你归纳一下要点。
第一种技术就是尝试从查询关键字里面产生“N元语法”(N-Grams)。
所谓N元语法其实就是从一组词语中产生连续的子词语。
比如刚才的“WhiteHouseOpening”的例子,我们就可以从这个词组里面产生“WhiteHouse”和“HouseOpening”两个二元语法。
而第一种基于N元语法的方法,就是通过这些N元语法在一个大语料中出现的词频来判断这个“分割”是否有意义。
当然,直接采用词频可能会比较偏好短的单词,所以在论文中,作者们分别介绍了两种矫正词频的方法。
一种是基于词频本身的矫正,一种是基于维基百科,作为一个外部资源的矫正方式。
两种方法的目的都是为了让长短语的打分(Scoring)有机会高于短的单词。
文章中所需要的词频采用了谷歌2005年发布的“N元语法”语料,也就是说,所有单词出现的频率都是直接在这个语料中获得的。
第二种技术是基于短语“互信息”(MutualInformation)的方法。
“互信息”计算了两个随机事件的相关程度。
在这里,就是计算查询关键字中每两个相邻短语的“互信息”。
当这个“互信息”的取值大于某一个预设阈值的时候,我们就认为相邻的两个单词组成了短语。
“互信息”的计算需要知道某个单词出现的概率,这些概率是从微软发布的一个“N元语法”语料获得的。
第三种技术则是基于“条件随机场”(ConditionalRandomField)。
“条件随机场”是机器学习著名学者乔治·拉菲迪(JohnD.Lafferty)、安德鲁·麦卡伦(AndrewMcCallum)和费尔南多·佩雷拉(FernandoPereira)在2001年发表的“序列学习”模型(SequenceModel)中提出的。
条件随机场的基本思想是对输出的复杂标签进行建模,尝试从特征空间建立到复杂标签的一个对应关系。
在“查询关键字分割”的场景下,我们其实可以把复杂标签看作是从一个查询关键字到多个短语的多个二元决策问题。
这里的二元决策是指某一个备选短语是否可以作为分割的短语。
条件随机场可以比较直观地对这类问题进行建模,而传统的二分分类器则很难对序列信息进行建模。
我在这里就不详细展开条件随机场的介绍了,有兴趣的话可以翻看相关的论文。
查询关键字标注
刚才我聊了查询关键字理解最基本的“分割“问题。
可以说,“分割问题”是查询关键字理解的第一步。
那么,下一步则是更细致地分析查询关键字。
回到刚才的例子“WhiteHouseOpening”,我们其实不仅是想知道这个查询关键字可以分割为“WhiteHouse”和“Opening”,而且希望知道“WhiteHouse”是一个建筑物的名字或者一个地理位置的名字,而“Opening”则可能是一个名词,暗指“开门时间”。
也就是说,我们希望为查询关键字中的词组进行“标注”(Annotation),来获取其“属性”(Attribute)信息。
希望为查询关键字中分割出来的词组进行标注的组件就叫做“查询关键字标注”。
那么,标注信息又是怎样帮助搜索结果的呢?
试想一下“苹果价格”这个查询关键字。
这取决于用户搜索的场景,如果“苹果”代表“水果”这个属性,那么这个查询的结果是希望找到水果的价格,可能还需要搜索引擎返回附近超市的一些信息。
但如果“苹果”其实代表的是“手机”,那这个查询的结果也许最好是返回苹果公司的官方销售网站。
你看,“苹果”所代表的属性不同,最优的返回结果可能会有非常大的差别。
对查询关键字进行标注的方法也有很多。
我这里再推荐一篇经典的论文《使用伪相关反馈针对搜索查询关键字进行结构化标注》(Structuralannotationofsearchqueriesusingpseudo-relevancefeedback),这篇论文利用一个叫做PRF(Pseudo-RelevanceFeedback)的方法来进行标注。
这里面的一个技术难点是,查询关键字的信息实在是太少,需要利用大量的辅助信息来进行标注,因此PRF作为一个技术在这里得到了应用。
另外一个主流的查询关键字标注的方法,依然是利用条件随机场。
我前面讲了,条件随机场是很好的序列建模工具。
那么,在这里,以“苹果价格”为例,条件随机场是需要预测标签是否是“手机名词”还是“水果名词”这样的组合输出结果。
而传统的二分或者多类分类器很难捕捉到这里的序列信息,条件随机场就是解决这方面的利器。
于是,我们需要做的就是为查询关键字构建特征(Feature),然后直接放入条件随机场中。
有一点需要注意,条件随机场的应用成功与否与数据的多少有很大关系。
因此,构建一个有标注信息的数据集就变成了查询关键字标注的一个核心挑战。
第三:
查询关键字扩展(QueryExpansion)
查询关键字扩展想要解决的问题和分类以及解析略微不同。
其主要目的不仅仅是希望能够对用户输入的关键字进行理解,还希望能够补充用户输入的信息,从而达到丰富查询结果的效果。
查询关键字扩展的概念
为什么要提供查询关键字扩展?
主要原因还是用户输入的查询关键字信息不足。
还记得我们上次提到的“苹果价格”这个例子吗?
在这个例子中,用户到底是希望查询“苹果”作为一种水果的价格,还是“苹果”作为手机的价格,其实无法真正从这个查询关键字中得出。
因此,作为搜索引擎,如果为用户提供一些“扩展选项”,也就是一个被改写(Reformulated)过的查询关键字,会提供更加好的用户体验和更加精准的搜索结果。
查询关键字扩展除了显示出来能够让用户有更好的体验以外,还有一个作用是增加文档的“召回”(Recall),从而为提高搜索结果奠定基础。
设想这样一个例子,用户搜索“iphone6backup”,希望了解如何备份iPhone6的信息。
因为苹果手机的绝大多数机型的备份流程都大同小异,因此,如果把“iphone6”给扩展到“iphone”其他机型,然后看是否有比较好的介绍备份的网页可以显示。
值得注意的是,在扩展的过程中也有可能失去“精度”(Precision)。
比如假设苹果对iPhone7的备份流程做了很大的改进,那么其他机型的流程也许就不适用了,所以当用户搜索“iphone7backup”的时候,如果我们扩展到了其他机型,那让用户看到的很可能就是不那么相关的信息了。
因此,对“精度”和“召回”的平衡,成了查询关键字扩展的一个重要的权衡点。
查询关键字扩展的另外一个重要应用就是对同义词和缩写的处理。
比如,唐纳德·特朗普(DonaldTrump)是美国现任总统。
那么,如果用户在搜索“DonaldTrump”、“Trump”、“USPresident”、“POTUS”(这是“PresidentOfTheUnitedStates”的简称)等类似词汇的时候,搜索引擎应该提供相似的结果。
而从词汇的直接联系上,这些词汇在表面形式上可能有很大的差异(比如“Trump”和“POTUS”),因此需要其他手段学习到这些词语内涵的同义。
查询关键字扩展的技术
知道了查询关键字扩展的含义以后,我们就来看看有哪些技术可以为查询关键字扩展提供支持。
根据上面提供的一些例子,你可以看到,这里的核心就是找到搜索结果意义上的“同义词”。
那么,在搜索中,如何挖掘“同义词”呢?
今天我在这里分享两种思路。
第一种思路,是根据查询关键字和查询结果之间的自然结合产生的同义效果。
这需要对用户的搜索行为数据进行大规模挖掘。
这里的基本假设是这样的,假设我们有两个搜索关键字,A和B。
从A的搜索结果中,用户可能点击了一些网页,从B的结果中,用户可能点击了另外的一些网页。
如果这些被点击的网页恰好非常类似,那么,我们就可以认为A和B其实是同义的查询关键字。
更加完整的做法是把查询关键字和网页分别表示成“图”(Graph)中的两类节点(Node)。
每个关键字节点和多个网页节点建立联系(Edge)或者边(Link),象征这些网页对应这个关键字的相关页面。
而从每个网页的角度上看,多个关键字节点又和同一个网页节点相连,表示这些关键字都有可能和某个网页相关。
拿上面提到的特朗普的例子来说,美国白宫的首页作为一个节点的话,就有可能会和“Trump”、“USPresident”以及“POTUS”这几个查询关键字相关。
因此你可以看到,寻找同义词的工作就变成了如何在这个图上进行相似节点,特别是相似关键字节点的挖掘工作。
如果把查询关键字的节点放在一边,把网页节点放在一边,我们就看到了典型的“二分图”(BipartiteGraph)。
二分图的特点是同边的节点之间没有连接(比如关键字和关键字之间没有连接),而所有的连接都发生在不同边的节点之间(关键字和网页之间)。
二分图的聚类问题(Clustering)是机器学习界的经典的问题。
而利用二分图的聚类问题来做查询关键字的同义词挖掘也是很多研究人员尝试的方向。
文末我列了几个参考文献,比如参考文献[2]就是利用二分图上的“随机游走”(RandomWalk)以及随机游走所产生的“到达时间”(HittingTime)来挖掘出类似的关键字。
如果你有兴趣,可以查看这篇经典论文。
说了基于用户行为信息和关键字挖掘的思路以后,我们再来看看第二种思路。
第二种思路的核心是从海量的文本信息中分析出词语之间的相关度。
这里面需要注意的是,这些词语的相关度有可能是语言本身带来的。
比如,单词“Male”和“Man”。
也可能是语境带来的,比如谈论手机的网页中对于“iPhone6”和“iPhone7”的谈论。
总之,这一个思路的想法就是如何为每一个词组都建一个“表达”(Representation),从而通过这个表达找到同义词。
近年来流行的一个做法是为单词找到数值表达,也就是通常所说的“嵌入”(Embedding)。
如果两个词在“嵌入空间”(EmbeddingSpace),通常是“欧式空间”中距离相近,那么我们就可以认为这两个词是同义词。
如何为词组产生“嵌入”向量呢?
这里面也有很多做法。
比较通用的有算法Word2Vec(参考文献[3]),目标是通过一个文档的每一句话中某一个词周围的词来预测这个词出现的概率。
可以设想一下,在苹果手机的很多帮助文档或者帮助站点中,描述如何帮助iPhone6或者iPhone7来做数据备份的字句都是相似的,甚至,可能唯一的区别就是描述机型的名字。
因此在这样的情况下,通过文字周围的“上下文信息”(Contextual)来对单词本身的“嵌入向量”进行学习可以有效地学习到单词的语义。
而通过语义,我们就能够找到其他的同义词。
当然,要想真正应用到查询关键字扩展中,可能还需要有其他的调试。
最后我需要说明的是,第一种思路需要已经有不少的用户交互数据,而第二种思路可以通过其他的语料(比如维基百科)加以学习,并不需要用户数据。
这也是另一个值得参考的信息点。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 查询 关键字 理解 三部曲