论文:http://sigir-ecom.weebly.com/uploads/1/0/2/9/102947274/paper_8.pdf
问题
有些query其实在eBay上有很多相关的商品,但是这些query搜索返回的结果没有或很少。
模型
用更激进的query改写来搜索返回更多的商品
用query改写系统将原始query标准化成多个替代query来提升召回率,并且保证不改变真实搜索意图。
去掉不重要term的算法
适用长query
将长query缩短成多个短的候选query来提高召回率,并且保证与原始query意图保持一致
- query理解
(1) 从eBay的结构化目录中挖掘出实体字典
(2) 与字典匹配识别出实体:包括商品品牌、商品名称、颜色、材料、型号、度量单位
(3) 对term进行词性标注
(4) 从用户query日志中挖掘出词组phrase,保证同一phrase里的term同时去掉或者同时保留 - 生成候选改写
第一级:商品品牌、商品名、第一个名词词组phrase
第二级:商品属性(颜色、材料)、度量单位、形容词
第三级:停用词、连接词
拼接组合第一级和第二级生成改写query,相当于去掉不重要的第三极term - 多个候选改写排序
打分算法
商品品牌消歧
存在商品品牌歧义问题,如"white"或者"1928"
B是q的某一个term,P(B|q)表示q中的term B是商品品牌的概率
C_i是第i个购物类别,其实是隐变量。
P(B|C_i)可以直接从eBay的存货清单中计算出来
打分算法
考虑因素:改写后query的长度、质量
包含更多品牌或名词的改写query要比包含更多形容词的改写query的得分要高
总得分计算公式
score=w1 * tagging score+w2 * click score
其中的权重w1、w2是最大化discounted cumulative gain (DCG)的优化结果
tagging score是给评为这个tag的所有item都打固定的分数
因为搜索返回商品没有或很少的query,很多都包含拼写错误的单词。所以用交叉熵来计算click score,然后根据分值来排序
其中r是query中token搜索返回文档数。P(click|r)是从搜索没有返回商品的query的大量样本中计算出来的
替换term的算法
适用短query
从用户行为和语言模型中学出term替换算法
query q0=(w1,...,wm),包含m个单词
从用户行为日志中为每个单词wi生成候选改写单词,然后生成候选改写query C(q0)
候选改写query的概率是P(q0|q1)P(q1)
概率最高的就是最好的改写query
其中P(q0|q1)是噪音信道模型得出的概率
P(q1)是n-gram语言模型得出的概率
给噪音信道模型增加权重,乘以r次幂
噪音信道模型
P(q0|q1)描述了原始query q0被q1替换的概率
从用户同一搜索session中搜集替换term的query对
假设query q0改写成query q1只替换了其中一个token,所以
计算概率P(wi|wi')也要考虑到P(wi|wi'=wi),其实P(wi|wi'=wi)的计算公式如下
语言模型
n-gram语言模型,由于query中包含的单词是稀疏的,所以这里使用2-gram语言模型
语言模型单单从query中构建,只建立query的语言模型
语言模型概率为
用的2-gram,所以
P(w1,...,wm)=P(w1)P(w2|w1)
在电商搜索场景下,query的词序影响不大
"case iphone"跟"iphone case"的意思几乎相同
后向2-gram语言模型
其中加了参数r
用的2-gram,所以
P(w1,...,wm)=P(w2|w1)*P(w1|w2)^r
为了防止过度替换over-replace的问题,不只挑选概率最大的改写query,而是返回概率大于原始query的所有改写query。
看论文时的疑问
电商垂直搜索场景下的idea能否适用大搜环境
感觉这篇电商垂直搜索场景下的idea不调整的话,不适用于大搜环境,需要经过大的调整才能适用大搜环境
在电商垂直搜索场景下,商品的属性也被认为是实体,比如商品的品牌、材料、颜色、形状、性别等,而大搜环境对实体的识别应该没有这么细。
而且论文中用到的模型:去掉不重要term的算法,直接是将拼接组合第一级和第二级来生成改写query,相当于去掉了不重要的第三级term。而这里的第一级与第二级的定义不适用于大搜环境。而且商品品牌消歧也是属于电商领域的。
品牌消歧涉及到的P(C_i|q)模型如何训练和预测
应该是eBay不愿意透露训练的具体细节
P(C_i|q)是query属于购物类别C_i的概率,感觉直接用了个分类模型,然后带有概率。
如果商品品牌有歧义的很少的话,是否直接用一个有歧义品牌的list,而不用专门建立一个品牌消歧的模型
感觉可以将两者结合,将歧义品牌放在list里,然后来了一个query之后,先判断是否包含list中的string,如果不包含,则直接跳过品牌消歧模型,如果包含,则再用品牌消歧模型来判断query中包含的这个string是否是品牌
公式(2)的P(click|r)为什么是用null query的样本计算,而不是用null and low query的样本计算
没有具体解释,应该是eBay不愿意透露具体细节
如何从用户行为日志中为每个单词wi生成候选改写单词
应该是eBay不愿意透露具体细节。感觉应该是从用户日志中,找到相似(比如:用户同一搜索session中的多个query不相同的单词可以认为是相似的单词)的单词pair对,然后进行单词替换。