概述
深度结构化语义模型(Deep Structed Semantic Models),可用于匹配搜索问题和搜索答案,即匹配 query-doc 对。
DSSM 可分为输入层、表示层、匹配层。
输入层
输入层负责将输入句子转化为数据向量。传统方法一般是做独热编码,然而这里为了减小数据量并对没有在训练集中见过的单词做出较好地反映,可以采用下面的做法。
英文
对每一个单词编码用 multi-hot,即在字母层面上用 N-grams 分解单词,如 preview,编码后 pr-pre-rev-evi-vie-iew-ew。
这种编码方式虽然会在一定情况下有冲突,但是实际中冲突的概率非常小,而且这种编码方式可以有效处理没有见过的新单词。
中文
中文的词数相比英文来说要多得多。一般处理中文的方法都是分词之后去编码,除了embedding外,还可以对中文的字进行编码,作者对每一个单独的字 one-hot 编码,我认为,这里需要考虑实际的任务需求,来选择合适的编码方式。
表示层
表示层中,首先需要把变长的句子转化为定长。
在不考虑单词/字顺序时,可以用 Bag of Words,否则,RNN、CNN、LSTM、Gru 和 transformer 等模型都是不错的选择。
定长向量可以表达少量的句子信息,为了更加合理地表示句子,用深度神经网络去学习句意表达。通过多层的累加,表示层的输出为 query 或 doc 的语义。
匹配层
作者的匹配方法简单粗暴,直接选择用余弦距离决定两个语义的相似程度。
在训练时,从其他的doc中选择若干个不相关的搜索答案,然后将余弦距离层的输出通过 softmax,得到正样本。
预测时,直接在已有的 doc 中计算最大余弦距离,标记答案。