简介

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的情况

相关度

采用深度学习的模板匹配方法 深度匹配模型_深度语义匹配_02


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].

参考

  1. paper,cikm2013_DSSM_fullversion.pdf
  2. github 参考代码, Keras框架, deep_semantic_similarity_keras.py
  3. github 自己代码, yichu_dssm.py