简介
DSSM, Deep Semantic Similarity Model, 深度语义匹配模型,
它是基于深度神经网络的一项建模技术,可以将具有成对关系的, 不同类型的文本(e.g., < queries , documents > )投射到一个共同的低维语义空间中,进而完成后续的机器学习任务。
Word Hashing
当语料库规模很大时, vocabulary_size 也会很大, 所以 embedding_matrix 也会很大, 进而影响网络的训练. 可以使用基于 letter n-gram 的 Word Hashing 方法, 简化网络的输入向量维度.
letter n-gram:
主要用于英文NLP.
设置一个固定长度的窗口, 以字母为单位, 以步长stride=1不断滑动窗口.
Given a word (e.g. good
), we first add word starting and ending marks to the word (e.g. #good#
). Then, we break the word into letter n-grams (e.g. letter trigrams: #go
, goo
, ood
, od#
).
Finally, the word is represented using a vector of letter n-grams.
降维效果
论文[1]中的例子, vocabulary_size=500K, letter_tri_gram_size=30K .
网络结构
正负pair
figure 1-1 数据集为正负pair的情况
相关度
figure 1-2 数据集为包含relevance scale的pair, 来自论文[1]
图中的说明见下:
Illustration of the DSSM. It uses a DNN to map high-dimensional sparse text features into low-dimensional dense features in a semantic space. The first hidden layer, with 30k units, accomplishes word hashing. The word-hashed features are then projected through multiple layers of non-linear projections.
The final layer’s neural activities in this DNN form the feature in the semantic space.
论文[1]中的实验
- 模型超参
每层为维度与图中(figure 1-2)是一致的, batch_size=1024 and epoch_num=20, optimizer=SGD. - 数据集
来自搜索引擎日志, 16K个query, 和对应的有点击的文档. 平均每个query配对15个文档.
query与文档的匹配程度 is on a 5-level relevance scale, 0 to 4, where level 4 means that the document is the most relevant to query and 0 means is not relevant to . - 性能评价
nDCG@10 =0.49
代码实现sample
见 参考[2].
- 任务
query 与 doc之间 的相似度建模. - 训练集格式
- 输入
[query, 1 clicked doc, 4 unclicked docs]. - 输出
有点击的doc, label为1, 无点击的doc, label为0.
- 网络结构
figure 拥有 shared layer 的含CNN子网络的网络架构
输出层的激活函数是 softmax. 损失函数是 categorical_crossentropy .
讨论
- 数据的 label
- 若是正相关和负相关, label分别取0和1.
- 若是有点击率或其他有标注的 pair 的紧密程度, label就取这个紧密程度.
- 数据的输入
通常是 < query, {若干doc} > 的形式.
- 若不共享网络的权重, 激活策略等, 就需要把输入拆成 < query,单个doc> 的形式, 数据集的个数膨胀.
- 若共享网络权重, 一个样本就可以一次传播并参与训练.
自己tf代码
详见参考[3].
参考
- paper,cikm2013_DSSM_fullversion.pdf
- github 参考代码, Keras框架, deep_semantic_similarity_keras.py
- github 自己代码, yichu_dssm.py