白天的小萤火虫

导航

关于query扩展的问题

之前看过这方面的东西,也从同事那里拿过一些简单的query扩展的词典加入系统中,其实这个事情分为query的纠错和query的扩展两个方面,前者query的纠错比较简单。

 

query纠错,关于英文的纠错可以理解成根据英文单词的字典树来进行纠错(包括正反字典树),而中文的纠错也可以在一定的程度上借鉴英文的纠错方式,前提是先将中文字标注拼音,然后利用拼音纠错(事先我们是有一份中文环境的拼音==》汉字的映射字典,当然这些都是事先经过切词了的),这种方法是基于高频词汇与汉语拼音对应进行转换的处理办法。这样的办法简单易行,但是汉语是大字符集语言,音字词库无法囊括所有的用户输入;不在词库内的句子更是无法转换,因此,降低了用户对这项应用的使用信心;对音字词库的更新也存在问题,新的条目需要全部加入才能识别出来,尤其是长的条目句子,这样的处理方法显然越来越会增加系统开销,甚至是失去了转换能力,也无法进行长久的扩展,相传百度就是这样做的(估计也是N久前的百度,我看现在百度的长query纠错也不错)。

另一种技术就是用通用的音字转换技术,google使用的就是这样的技术,这种技术不受拼音词库的限制,而是使用通用的转换引擎,就所有的汉字都转换成可能串。后一种技术的方法也有很多种,有基于字的有基于词的,又基于字的,性能有一定的差别。

 

query的扩展,其实就是同意词扩展,但是这样的字典构造很不容易,基本上全靠手工,有一种方法是通过用户在搜索引擎中输入的query来做query扩展。每天都有大量的用户输入query,而且这些用户最后都会点击一些page,这样我们可以得到用户的pv log,有了这些,我们可以从同一个page对应的不同query来找这些query之间的关联,这样可以在一定的程度上得到一份query扩展的字典,其实这就是协同过滤的思路来做query关联。当然,还有一个用 Latent semantic indexing 的方法来做,分析我们的语义库资料,构造出M*N(M为term,N为文档)的巨大矩阵T,将T与T的转置做一下相乘,就可以得到term与term之间的矩阵,根据这些数据来分析term之间的关联,从而得到term的扩展,也就是可以完成query的扩展。个人觉得这种方法仅仅考虑TFIDF,应该没有协同过滤的方法来的好,当然需要调试参数才能做好。

posted on 2011-01-05 21:18  白天的小萤火虫  阅读(554)  评论(0编辑  收藏  举报