在搜索过程中,需要使用同义词来达到提高召回的目的,例如用户搜索:口红,但是商品名称却不含口红关键词,比如商品名为:xxx彩色唇膏。但其实两个词是指代同一产品。那么在用户搜索的时候,就搜不到对应的产品。这时可以 同义词词典来解决这个问题,使用Elasticsearch做搜索引擎,在query和索引数据时,先将query和doc分词,然后使用同义词替换,将特定词替换成同义词索引。
如:同义词词典 口红 => 彩色唇膏 彩色唇蜜
那么问题又来了?同义词词典怎么构建呢?
同义词词典来源:
- 业务部门整理的同义词
-
2.百科挖掘别名
百科中别称,别名,俗称,又称,简称等词可以抽取出来作为同义词。
- query日志挖掘
- 同义词词林词典,哈工大同义词词林,或者根据英文同义词词典翻译对应的中文同义词
首先,很多人会想到使用word2vec来挖掘同义词,实际上根据word2vec的原理可知,其挖掘的topK相近词其实是基于 共现关系的相关词,并不是只有近义词,因此会出现很大的噪声。
使用word2vec挖掘
'富裕'近义词:
富裕:1.0
富足:0.734253
穷困:0.714261
中产阶级:0.712797
贫穷:0.711762
富有:0.681186
富人:0.656687
有钱:0.633914
贫苦:0.632235
殷实:0.604537
如上所示,虽然富裕的相近词,富有,富足有返回,但是穷困,平穷也有返回,词义恰恰是反义词,因此使用完全无监督的word2vec挖掘近义词效果并不好。
关于word2vec挖掘同义词还有两个思路。
- 基于query log挖掘出来的同义词,可以使用word2vec根据相似度阈值来进行筛选
- 最新的bert模型挖掘出来的embedding包含了word embedding和句法语义信息,可以尝试是否能使用bert来挖掘同义词,这个接下来有空会进行尝试。
参考:
https://zhuanlan.zhihu.com/p/33942535
https://www.zhihu.com/question/40777785/answer/88189037
http://www.mamicode.com/info-detail-2486542.html