《搜索与推荐中的深度学习匹配》-搜索
说明:本文是对Deep Learning for Matching in Search and Recommendation中搜索部分的读书笔记,参考了知乎大佬-后青春期的工程师文章《搜索与推荐中的深度学习匹配》之搜索篇
1 搜索概述
用户输入query,获取信息documents
目标: query 和 documents 的匹配,e.g. “iphone多少钱” = “苹果手机什么价格”
难点:Semantic Gap
1.现有搜索仍基于词级
2.相同内容不同表示,相同表示不同内容
2 Q&D匹配的关键因素
2.1. 词信息
精准匹配同一个词
匹配语义相似词
2.2. 词块信息
N-grams:局部词块(包含词序)
N-terms:局部词块(不包含词序)
重要性:词信息 > 词序信息
3 传统匹配模型
3.1 Matching in latent space
假设:q和d具有一定的相似性,通过用户的点击 (click-through) 数据表示
将q和d都映射到隐空间中进行匹配(正则化约束防止过拟合)
3.2 Matching with machine translation
可以视为将d翻译成q
4 深度语义匹配模型
4.1 优势
4.1.1 表示
- word: one hot => 分布式表示
- Sentence: 词袋模型 => 分布式表示
4.1.2 匹配函数
- 输入特征: 手工设计 => 自动学习
- 匹配函数:简单函数(cos,点乘) => 神经网络
4.2 模式
4.2.1 基于表示学习的方法 (methods of representation learning)
分别学习q和d表示,再进行匹配分计算:
ϕ
(
q
)
⊗
ϕ
(
d
)
\phi(q)\otimes\phi(d)
ϕ(q)⊗ϕ(d),其中,词编码方式、句子表示方式和匹配分计算方式各有变化
(1) Deep Structured Semantic Model (DSSM)
- 基于字母级表示 trigram,e.g. [#candy#] -> [#ca, can, and, ndy, dy#]。每个词被映射为一个 D \mathbb{D} D维向量 L T w LT_{w} LTw( D \mathbb{D} D为letter-trigram词表大小,类似于multi-hot)
- 对于q和d分别计算 L T q = ∑ w ∈ q L T w LT_{q} = \sum_{w \in q} LT_{w} LTq=∑w∈qLTw 和 L T d = ∑ w ∈ d L T w LT_{d} = \sum_{w \in d} LT_{w} LTd=∑w∈dLTw,将不定长文档、问句变成定长向量
- 全连接层分别抽取 L T q LT_{q} LTq 和 L T d LT_{d} LTd特征,最后计算余弦相似度 c o s ( x , y ) cos(x,y) cos(x,y)获得匹配分
训练样本:<q,
D
=
{
d
+
,
d
−
}
D=\{d_{+},d_{-}\}
D={d+,d−}>
缺点:词序信息丢失
(2) CNN类
CDSSM 用 conv1d 操作获得
L
T
q
LT_{q}
LTq 取代了 DSSM 中对各词的加和
ARC-I 和 CNTN 用 word embedding 编码词
(3) RNN类
RNN-LSTM 用 LSTM 抽取,最后一个时刻 t 的输出代表整个句子
4.2.2 基于交互的方法 (methods of matching function learning)
底层提前交互奖励基础匹配信号,在融合成匹配分:
ϕ
(
q
⊗
d
)
\phi(q\otimes d)
ϕ(q⊗d)
(1) ARC-II
- 每次从q,d中各取一个词级trigram做一维卷积 c o n v 1 d ( c o n c a t e ( w 1 q , w 2 q , w 3 q , w 1 d , w 2 d , w 3 d ) ) conv1d( concate(w_{1}^q,w_{2}^q,w_{3}^q,w_{1}^d,w_{2}^d,w_{3}^d)) conv1d(concate(w1q,w2q,w3q,w1d,w2d,w3d)),获得匹配矩阵
- 在匹配矩阵上不断卷积,最后获得定长向量,输入MLP
Ad:有基础匹配信号 & 可解释信强 & 有次序
Dis:无1-gram匹配信号 & 未区分精确匹配和普通匹配
(2) MatchPyramid
用1-gram获得匹配矩阵,其余类似(1)
(3)Match-SRNN
用动态规划的思想,在匹配矩阵上逐词向后求解,黄色部分作为q和d的最终匹配表示
(4) Decomposable Attention Model for Matching
- q和d中每个词计算attention A i A_{i} Ai和 B j B_{j} Bj
- 对每个词用一个func作用到每个词编码 w w w和attention向量上(类似于词 w q w^{q} wq在d下的加权表示) x i = f u n c ( w i q , A i ) x_{i}=func(w_{i}^{q},A_{i}) xi=func(wiq,Ai) 和 y j = f u n c ( w j d , B j ) y_{j}=func(w_{j}^{d},B_{j}) yj=func(wjd,Bj)
- V q = ∑ i x i V^{q}=\sum_{i}x_{i} Vq=∑ixi, V d = ∑ j y j V^{d}=\sum_{j}y_{j} Vd=∑jyj
- 计算 V q , V d V^{q},V^{d} Vq,Vd相似度
4.2.3 两种方法结合
方法1: 对短的、热门的q更有效
重点学习表示,可预先计算存储
学出表示前,q和d无任何交互,细粒度匹配信号丢失
方法2: 对长的、冷门的q更有效
匹配信号细粒度、精细化、上层匹配提取更大粒度;可解释性好
在线计算代价大
5 q&d相关性深度匹配模型
语义匹配是相关性匹配的基础技术。
5.1 语义相似 ≠ \neq = 语义相关
相似 | 相关 |
---|---|
句子语义相似? | q与d相关? |
文本一般同质(长度相近,属性类似) | 异构文本 |
两端文本全部位置进行匹配 | 在d不同部分匹配 |
匹配func对称 | 匹配func不对称 |
5.2 基于全局的匹配信号(Based on global distribution of matching strength)
5.2.1 原理
- 对于q中每个term t i q t^{q}_{i} tiq,计算其与d中各term t j d t^{d}_{j} tjd 匹配信号 s i j s_{ij} sij,再获得其整体匹配强度 S i S_{i} Si
- 累计所有 t i q t^{q}_{i} tiq的匹配强度分布
Ad:构建短q与长d间的匹配;与原始匹配信号相比更鲁棒
Dis:词序信息丢失
5.2.2 模型
(1) DRMM
- 编码用w2v,不在本模型中学习训练
- t i q t^{q}_{i} tiq 与 t j d t^{d}_{j} tjd 计算匹配分,获得匹配矩阵
- 矩阵每行离散化分桶,获得 t i q t^{q}_{i} tiq的匹配分统计直方图(直接用count、归一化和 log ( c o u n t ) \log(count) log(count))
- 对直方图向量用fc学习表示 z i z_{i} zi(各i用同一个网络,参数共享)
- 经过Term Gating Network加权求和 t o t a l = ∑ i g i z i total=\sum_{i}g_{i}z_{i} total=∑igizi,其中 g i g_{i} gi 与 t i q t^{q}_{i} tiq 的 idf 值或者 w2v 编码有关(用 idf 时表现更好)
(2) K-NRM
- cos计算匹配矩阵
- 对矩阵每一行用 K 个 pooling-kernel (高斯核)得到 K-dim 向量 z i z_{i} zi,高斯核 μ , σ \mu,\sigma μ,σ参数可调, μ = 1 , σ → 0 \mu=1,\sigma\rightarrow0 μ=1,σ→0时只取精确匹配, σ → ∞ \sigma\rightarrow\infty σ→∞时类似于mean-pooling
- 将每行向量加和得到 Z = ∑ i z i Z=\sum_{i}z_{i} Z=∑izi输入fc
(3) Conv-KNRM
- 用CNN分别抓取q、d的unigram和bigram信息,两两组合
- 同(2)用pooling-kernel,最后concate
5.3 基于局部term级匹配信号(Based on local context of matched terms)
5.3.1 原理
- 对 t i q t^{q}_{i} tiq 找出最匹配的d局部上下文,与q进行匹配计算
- 累计局部匹配信号
Ad:robust;删去了d与q无关部分;局部上下文可结合位置信息
5.3.2 模型
(1) DeepRank
- 对于每个
t
i
q
t^{q}_{i}
tiq :
找出在 d 中出现的位置,取 window 大小为 2k+1,提取局部文本序列 s n s_{n} sn(有多处就提多处);
对于每个 s n s_{n} sn 计算其与 q 的匹配矩阵(如用MatchPyramid等打分);
每个 t i q t^{q}_{i} tiq 对应的多个 $ s_{n} $用RNN融合; - 对所有 $ t^{q}_{i}$ 加权求和
(2) PACRR(Position-Aware Neural IR Model)
- 预处理:
将 q padding成固定长度
d 有两种方式
取前n个词;
先计算 q 和 d 的匹配矩阵;用大小为 k 的 window 划分 d,在各window 中取各词对于各 t i q t^{q}_{i} tiq的最大评分平均后作为该 window 对于 q 的 最终匹配分;取 top p 个 window,凑齐 n 个长度序列 p = ⌊ n / k ⌋ p=\lfloor n/k \rfloor p=⌊n/k⌋; - 在匹配矩阵上,用不同size的kernel抽取(如果对于d采用第二种预处理方式,则对于 k window 的序列用 size 为 k 的核,不断变化 k 获取不同特征)
- 对于 t i q t^{q}_{i} tiq 融合上述所有特征,同时得到该term的权重信号
- 用RNN融合各 t i q t^{q}_{i} tiq得到匹配分