这里主要实现的是基于表征文本匹配和基于交互的文本匹配模型。
同时也对比了各个模型在wikiQA上的运行结果。

1. 基于表征的文本匹配模型

1.1 DSSM 模型

1. 简介

DSSM 模型是2013提出的 最早的基于表征的文本匹配方法,整体流程比较简单:首先基于bag-of-words得到文本的向量表征,再基于word-hashing方法进行降维,接着就是MLP,得到最终128维的文本embedding, 最后对两个文本emebdding 计算cosine相似度得到相似度分数。
该模型也奠定了基于表征匹配的基本范式(Embedding层–Encoding层—DNN层----Prediction层)之后的表征匹配大抵都是类似的流程。

DSSM是Deep Structured Semantic Model的缩写,即我们通常说的基于深度网络的语义模型,其核心思想是将query和doc映射到到共同维度的语义空间中,通过最大化query和doc语义向量之间的余弦相似度,从而训练得到隐含语义模型,达到检索的目的。DSSM有很广泛的应用,比如:搜索引擎检索,广告相关性,问答系统,机器翻译等。

典型的DNN结构是将原始的文本特征映射为在语义空间上表示的特征。DNN在搜索引擎排序中主要是有下面2个作用:

  • 将query中term的高维向量映射为低维语义向量
  • 根据语义向量计算query与doc之间的相关性分数

通常,x表示谁让的term向量,y表示输出的term向量, li,i=1,2,...N−1l_i,i=1,2,...N-1li,i=1,2,...N1 层,WiW_iWi表示第i层的参数矩阵,bib_ibi表示第i个偏置项。
l1=W1x,li=f(Wili−1+bi),i=2..N−1,y=f(WNlN−1+bN)l_1 = W_1x, l_i = f(W_il_{i-1} +b_i),i=2..N-1, y = f(W_Nl_{N-1}+b_N)l1=W1xli=f(Wili1+bi),i=2..N1,y=f(WNlN1+bN)
我们使用tanh作为输出层和隐藏层的激活函数,有下列公式:
f(x)=1−e−2x1+e−2xf(x) = \frac {1-e^{-2x}}{1+e^{-2x}}f(x)=1+e2x1e2x
在搜索排序中,我们使用Q表示一个query,D 表示一个doc, 那么他们是的相关性可以用下面的公式衡量 R(Q,R)=cosine(yQ,yD)=yQTyD∣∣yQ∣∣∣∣yD∣∣R(Q,R) = cosine(y_Q, y_D) = \frac {y^T_Qy_D}{||y_Q||||y_D||}R(Q,R)=cosine(yQ,yD)=yQyDyQTyD
其中yQy_QyQyDy_DyD是query和doc的语义向量。在搜索引擎中,给定一个query,会返回相关性分数排序的文档。
通常情况下,输入的term向量使用最原始的bag of words特征,通过one-hot进行编码,但是在实际中,词典的大小将会非常大,如果直接将数据输入给DNN,神经网络时无法进行训练和预测的,因此,在DSSM中,引入了word hashing的方法,并且作为DNN中的第一层。

2. WordHashing

word hashing方法是用来减少输入向量的维度,该方法基于字母的n-gram,给定一个单词(good),我们首先增加词的开始和结束部分(#good#),然后将该词转换为字母 [公式] -gram的形式(假设为trigrams:#go,goo,ood,od#)。最后该词使用字母 n-gram的向量来表示。

这种方法的问题在于有可能造成冲突,因为两个不同的词可能有相同的n-gram向量来表示。下图显示了word hashing在2个词典中的统计。与原始的one-hot向量表示的词典大小相比,word-hashing明显降低了向量的表示维度。

3. dssm的学习

点击日志里通常包含了用户搜索的query和用户点击的doc,可以假定如果用户在当前query下对doc进行了点击,则该query与doc是相关的。通过该规则,可以通过点击日志构造训练集与测试集。

首先,通过softmax 函数可以把query 与样本 doc 的语义相似性转化为一个后验概率:
P(D∣Q)=exp(rR(Q,D))∑D′∈Dexp(rR(Q,D′))P(D|Q)=\frac {exp(rR(Q,D))}{\sum_{D' \in D} exp(rR(Q,D'))}P(DQ)=DDexp(rR(Q,D))exp(rR(Q,D))
其中r是softmax 函数的平滑因子,D表示被排序的候选文档集合,在实际中,对于正样本,每一个query-doc对儿,使用(Q,D+)表示,对于负样本,随机选择4个曝光但未点击的doc,使用{D-j,j=1,…4}来表示。
在训练阶段,通过极大似然估计来最小化损失函数:
L(W)=−log∏Q,D+P(D+∣Q)L(W) = -log\prod_{Q,D^+}P(D+|Q)L(W)=logQ,D+P(D+Q)
其中W表示神经网络的参数,模型通过随机梯度下降SGD来进行优化,最终可以得到各网络层的参数{W,b}

4. 总结

DSSM的提出主要有下面的优点:

  • 解决了LSA,LDA, AutoEncoder等方法存在的一个最大的问题,字典爆炸(导致计算复杂度非常高),因为在英文单词中,词的数量可能是没有限的,但是字母n-gram的数量通常是有限的。
  • 基于词的特征表示比较难处理新词,字母的n-gram可以有效地处理OOV,鲁棒性比较强。
  • 使用监督方法,优化语义embedding的映射问题
  • 省去了人工的特征工程

缺点:

  • wordhash 可能造成冲突,所谓的冲突是 两个不同的词 可能由相同的n-gram来表示
  • DSSM采用词袋模型,损失了上下文信息,对于每一个词都是用n-gram 没有上下文信息。
  • 在排序中,搜索引擎的排序由多种因素决定,由于用户点击时doc的排名靠前,点击的概率就越大,如果仅仅使用点击来判断是否为正负样本,噪音比较大,难以收敛。

对于中文而言,处理方式与英文有很多不一样的地方,中文往往需要分词,但是我们可以仿照英文的处理方式,将中文的最小粒度看做是单字,因此,通过这种wordhash的方法,可以将向量空间大大降低。

对DSSM的优化出现了很多的变种,有CNN-DSSM, LSTM-DSSM, MV-DSSM等,大多对隐藏层做了一些修改。

其他可以参考:
DSSM在推荐上的应用

文本匹配模型-DSSM相关推荐

  1. laravel 分词搜索匹配度_DSSM文本匹配模型在苏宁商品语义召回上的应用

    文本匹配是自然语言处理中的一个核心问题,它不同于MT.MRC.QA 等end-to-end型任务,一般是以文本相似度计算的形式在应用系统中起核心支撑作用1.它可以应用于各种类型的自然语言处理任务中,例 ...

  2. 详解深度语义匹配模型DSSM和他的兄弟姐妹

    一只小狐狸带你解锁NLP/ML/DL秘籍 正文作者:郭耀华 正文来源: https://www.cnblogs.com/guoyaohua/p/9229190.html 前言 在NLP领域,语义相似度 ...

  3. nmt模型源文本词项序列_「自然语言处理(NLP)」阿里团队--文本匹配模型(含源码)...

    来源:AINLPer微信公众号 编辑: ShuYini 校稿: ShuYini 时间: 2019-8-14 引言 两篇文章与大家分享,第一篇作者对通用文本匹配模型进行探索,研究了构建一个快速优良的文本 ...

  4. antd 文本域超长问题_「自然语言处理(NLP)」阿里团队--文本匹配模型(含源码)...

    来源:AINLPer微信公众号 编辑: ShuYini 校稿: ShuYini 时间: 2019-8-14 引言     两篇文章与大家分享,第一篇作者对通用文本匹配模型进行探索,研究了构建一个快速优 ...

  5. 「NLP-语义匹配」详解深度语义匹配模型DSSM

    2019-12-29 11:05:55 所谓语义匹配,就是在语义上衡量文本的相似度,在产业界有很多的应用需求.例如,在FAQ场景中需要计算用户输入与标问之间的相似度来寻找合适的答案.本文介绍一种经典的 ...

  6. 【NLP-语义匹配】详解深度语义匹配模型DSSM

    所谓语义匹配,就是在语义上衡量文本的相似度,在产业界有很多的应用需求.例如,在FAQ场景中需要计算用户输入与标问之间的相似度来寻找合适的答案.本文介绍一种经典的语义匹配技术,DSSM,主要用于语料的召 ...

  7. 文本匹配模型ESIM

    ESIM是一个综合应用了BiLSTM和注意力机制的模型,在文本匹配中效果十分强大. 文本匹配说就是分析两个句子是否具有某种关系,比如有一个问题,现在给出一个答案,我们就需要分析这个答案是否匹配这个问题 ...

  8. 文本匹配开山之作--双塔模型及实战

    作者 | 夜小白 整理 | NewBeeNLP 在前面一篇文章中,总结了Representation-Based文本匹配模型的改进方法, 基于表征(Representation)的文本匹配.信息检索. ...

  9. 文本匹配开山之作-DSSM论文笔记及源码阅读(类似于sampled softmax训练方式思考)

    文章目录 前言 DSSM框架简要介绍 模型结构 输入 Encoder层 相似度Score计算 训练方式解读 训练数据 训练目标 训练方式总结 DSSM源码阅读 训练数据中输入有负样本的情况 输入数据 ...

最新文章

  1. .gitignore文件如何编写?
  2. nginx 通过proxy_next_upstream实现容灾和重复处理问题
  3. 编码 Unicode utf-8
  4. 现代化Java代码的七个NetBeans提示
  5. PHP依赖注入(DI)和控制反转(IoC)详解
  6. windows2019域控降级退域
  7. 绘制Python代码的UML图
  8. Python 中list中所有值加和_深入认识Python中的itertools模块-Python教程
  9. Django_modelform组件
  10. 如何在装有 macOS Monterey 的 Mac 上使用省电模式?
  11. 关于left join 一些测试
  12. linux离线卸载docker,Linux系统下Docker的安装与卸载
  13. 共享图书管理系统数据库实现
  14. 消息队列(MQ) 企业服务总线(ESB)
  15. 机器学习基础-统计学习-SLT
  16. 电脑Tab键有什么功能?分享Tab键的6个妙用
  17. linux下的摄像头驱动怎么安装方法,linux下良田摄像头驱动怎么装?
  18. 哔哩哔哩 BV、AV互转 C#版
  19. 什么是面向对象编程(Java)
  20. “燕云十六将”之Jerry葛涵涛

热门文章

  1. 大学生计算机课如何退出教学系统,如何把Windows 10的系统进程关闭?
  2. 新闻|“新”伙伴—智链万源加入VMware创新网络“威睿加速计划日”
  3. android activity 切换屏幕方向时的生命周期
  4. 一个小小的互联网创业狗的自白
  5. Unity 3D SplineMesh样条线工具扩展,链条制作,履带转动,绳子制作,调整弯曲度及一些好用的示例
  6. 60个实用Android框架
  7. zip格式文件伪加密
  8. 杰奇百度推送php文件,杰奇版百度自动化推送插件
  9. 杰奇cms mysql查询_杰奇cms自动推送链接插件使用方式
  10. 亚马逊云科技自动驾驶赛车竞赛,一场AI与速度激情碰撞的大赛