用户在使用搜索引擎过程中,由于表述不清晰或者查询词与索引库描述不一致,为了能召回更多更优质的结果展示给用户。这时就需要对用户查询进行分析,包括词权、同义词、纠错等技术,对原查询进行处理。通常搜索引擎中对同义词的处理,线下挖掘同义词词典,线上加载词典,但由于检索系统应用同义词时词典存在部分质量不好、或者本来质量好但是应用同义词更上下文有很强的关联性,并不一定适用,因此同义词主要包括两大方面,同义词的挖掘和同义词的使用。
获取同义词词林直接生成字典,抓取百度词典、金山词霸等的词条中的数据,提取原词和同义词。从百度百科、搜狗百科等网站抓取词条,在词条中,有“又称”、“别名”等特征词,利用这些特征词,构成模版提取词的其他描述,一般从百科中挖掘出的词条通常质量比较高。
anchor数据是锚文本,利用指向同一链接的不同anchor数据抽取同义词,如“http://www.apple.com.cn/”的anchor有“苹果中国”、“Apple 中国”,可以抽出“苹果”与“Apple”是同义词。session日志是同一用户在一段较短时间内搜索的查询日志,利用session信息可以抽取用户改写的同义词,如用户在搜索中第一次提交查询“VMware汉化版下载”,没有找到想要的结果,然后对查询进行修改“VMware中文版下载”,并得到满意结果,通过分析日志,可以抽取“汉化”与“中文”为同义词。
在搜索引擎中,用户点击反馈是提升搜索效果最有效的方法,点击日志是用户在使用搜索引擎时产生带有标注的数据。点击日志包括query、title、点击次数,通过统计query中某个词在点击的title没有出现,但有其他替换词出现,并且这个替换词在query点击其他的title中也有出现,并统计包含替换词的点击率等特征,可以判断原词与替换词是否是同义词。利用点击日志判断某两个词是否是同义词:一、在多个点击的title中出现,二、在多个上下文片段下出现,三、点击含有同义词的title点击率比较高。如用户搜索“一岁半宝宝感冒吃什么药”,点击title“1岁半小孩感冒发烧吃什么药”中“宝宝”与“小孩”是同义词。
利用点击日志,构建平行语料,如相似的query集、query-title等,相似query集是指点击到同一title的不同query,同时过滤掉一些明显不相关的query,在相似的query集中取query1与query2相差只有一两个词不一样(防止平行语料差异过大,影响翻译对齐的效果),构建成平行语料,通过统计机器翻译的对齐算法,学习词与词之间的对齐关系,利用对齐词,抽取对齐概率高、上下文内容丰富的词语对,作为同义词。除了挖掘同义词外,统计机器翻译还可以直接生成改写句子,利用词对齐信息,抽取短语翻译概率表。
通过上述方法线下挖掘同义词,生成同义词词典,并且根据同义词相关程度,分成不同的级别,如按照完全等价(北京大学、北大)、语义等价(简介、介绍)、语义相近(中国人、中国)、语义相关(须知、流程)分成4个级别,线上加载同义词词典,并将其应用于搜索引擎的召回、相关性计算中。但是同样一个同义词在不同的上下文表现完全不同,如“做 午饭” vs “烧 午饭” ,“做”和“烧”是同义词,如果上下文为“仰卧起坐 一天 做 多少 可以 减肥” ,“做”和“烧”完全不能替换,不同的上下文同义词并不通用,因此线上对同义词的使用需要过滤或调整级别。
语言模型是用来计算一个句子的概率的模型,利用语言模型,可以确定哪个词序列的可能性更大,或者给定若干个词,可以预测下一个最可能出现的词语。利用搜索日志,训练语言模型(https://kheafield.com/code/kenlm/),基于训练好的模型可以用来判断一句话的概率。判断一个词在上下文中,是否其同义词可用,首先利用语言模型算出原句子的概率,然后用同义词替换掉原词,生成新的句子,再利用语言模型判断新句子的概率,如果新句子成一句话的概率高于或者约等于原句子的概率,则可以断定同义词在上下文中有效,甚至提高同义词的级别,如果新句子概率远小于原句子概率,则在上下文中不能构建为同义词,应当对其进行降低同义词级别甚至过滤掉。
利用机器学习优化同义词,不仅提升系统的相应时间,还提高了搜索系统的召回的准确度和相关性特征的表征能力。机器学习解决同义词使用需要有三个问题:一、训练数据的构建,二、特征抽取,三、模型选取。训练数据利用点击日志构建相似的query集(点击到同一title的不同query),如果原词出现在query中,同义词出现在多个以上的相似query中并且相似query不包含原词,则构成正例数据,如果原词出现在query中,同义词在所有的相似的query中都没有出现,则构成负例数据,同时为了提高训练数据的质量,过滤掉原词与同义词差别仅为停用词,还有一些原词和同义词的前缀相同的数据也过滤。特征提取包括:一、利用相似的query集,统计原词和同义词出现的概率、包含上下文片段的原词和同义词共现概率(包括四元、三元、二元),统计数据离线做成字典供线上使用,二、原词与同义词级别,查询长度,原词词数、同义词词数以及原词和同义词等特征。同义词使用可以看成分类问题,通常选取决策树、GBDT、随机森林等算法,如果看成回归问题,可以利用LR模型进行预测。通过机器学习模型可以判断在原词的上下文中,候选同义词是满足以及判断同义词级别。
总结一下,同义词包括两大方面,同义词的挖掘和同义词的使用。同义词的挖掘,包括同义词词林,结构化数据(词典、百科等)、anchor数据、点击日志等,除此之外还可以利用点击日志构建平行语料,悬链机器翻译模型,生成同义词。同义词的使用,主要因为同义词跟上下文有很强的关联性,同一同义词在不同的上下文表现完全不同,需要根据上下文调整同义词使用级别甚至过滤同义词。除了上述所描述的传统方法外,同义词还可以利用深度学习模型,生成新的同义词和优化同义词的使用。