IS-搜索中的新词应用
一、前言
将新词应用于搜索中,首先要明确应用的目的,其次要分析目的是否可达成,最后来思考具体的解决方案。
二、应用目的
新词应用于搜索的目的,无疑是提升搜索的准确率、召回率,同时保证搜索的响应速度。
三、可行性
3.1 新词对搜索准确率的影响
搜索准确率 = 检索到的相关文档 / 所有被检索到的文档,即返回的N篇文档,有几篇是和搜索相关的文档。
当用户输入“中国科学技术大学”时,细粒度分词结果为“中国|科学|技术|大学”,粗粒度的分词结果“中国科学技术大学”。将“中国|科学|技术|大学”作用于lucene检索,那么文档中只要出现了这些词的都会被召回,而不管这些词是否是邻接的,而将“中国科学技术大学”作用于lucene检索,则不会将两者是非邻接的文档召回。
新词可以看作粗粒度词,如上所述,新词的加入可以减小公式中的分母,从而提高搜索准确率。
3.2 新词对搜索召回率的影响
搜索召回率 = 检索到的相关文档 / 所有相关的文档,即有N篇相关的文档,有多少被检索出来了。
对于返回全部相关结果的搜索而言,新词的加入不会影响搜索召回率。但对于搜索而言,结果排序至关重要,尤其需要关注排在前面的结果的质量。根据3.1小节的分析,细粒度分词结果召回的非相关文档已不再会被返回,从而排序靠前的结果也会更干净,即分子增大,搜索召回率提高。
3.3 新词对搜索响应速度的影响
3.3.1 query分词
以jieba分词为例,词典越大,分词速度越慢,新词的加入无疑会产生负面影响。不过考虑到query一般是短句,所以影响可以忽略不计。
3.3.2 索引检索
搜索term和索引term需要一致才能真正对搜索产生影响。比如,索引term切分采用的是细粒度的分词技术,而搜索term切分采用的是粗粒度的分词技术,搜索term“知识图谱”便无法匹配到索引term,也就找不到相关的文档。从而在构建索引时,需要加载自定义新词词典。
但是加入新词词典,索引term的数量也会增加,导致索引变大,查询时加载索引的速度无疑也会变慢。当新词规模不大时,影响同样可以忽略不计,但大规模时,则需要关注、测试、解决。
四、存在的问题
4.1 粗粒度分词的问题
粗粒度分词,“知识图谱”不会再被拆分为“知识|图谱”,对于包含“图谱”但不包含“知识图谱”的文档不会被召回,但有时会用“图谱”来指代“知识图谱”,且当没有包含“知识图谱”的文档时,返回结果为空。
4.2 新词质量的问题
根据Fudan-NW算法,“AnyBackup产品”可能会被作为新词提取出来,但其实“AnyBackup产品”作为新词是有争议的,“AnyBackup”和“产品”也可看作存在一层隐藏关系,即“产品”是一个类别,“AnyBackup”属于“产品”类别。若将“AnyBackup产品”看作新词,则会出现4.1小节的问题。
五、知识图谱的支持
如果引入知识图谱技术,在“图谱”和“知识图谱”之间建立一条“简称”关系,在对query进行解析后,通过知识图谱去扩展query term,将“图谱”和“知识图谱”一同应用于索引检索,则4.1小节的问题将不再存在。同样的,在“中国科学技术大学”和“中科大”之间建立“简称”关系,也可以提高搜索召回率。
但是这对知识图谱的质量有较高的要求。不过可以看到,基于高质量的新词和高质量的知识图谱的搜索,将非常强大。
六、实现方案
无论是高质量的新词,还是高质量的知识图谱,都不容易实现。可以根据业务需求,比如分析用户搜索日志,提取查询频繁的新词,然后围绕这些新词去优化图谱结构。但这是初步方案,技术难题可以视情况一点点去攻克。
以下问题是一定要确定的。
6.1 query解析自定义词典加载
明确query解析分词工具是不是可以加载自定义词典,测试加入的新词会不会被有效切分出来。
6.2 索引构建自定义词典加载
明确lucene全文检索构建索引时是不是可以加载自定义词典,测试加入的新词会不会被有效切分出来。
6.3 lucene全文检索查询方式
第五节讲到可以将“图谱”和“知识图谱”一同应用于索引检索,这里需要明确lucene全文检索支不支持灵活的“or”和“and”的查询方式,以及它对“or”方式的算分方式,是否是将两边的词的得分进行累加作为最后的得分。

浙公网安备 33010602011771号