Java教程

文本匹配-dssm

本文主要是介绍文本匹配-dssm,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

文章目录

  • 论文链接地址
  • github
  • 前言
  • 整体模型结构
    • 输入层
    • 表示层
    • 匹配层
    • 训练阶段
    • 优缺点
    • 模型改进
  • 欢迎指正

论文链接地址

Learning Deep Structured Semantic Models for Web Search using Clickthrough Data

github

https://github.com/KATEhuang920909/deep_text_match

前言

传统文本相似性如BM25、tf-idf等,无法发现语义的query-doc相似对,因此DSSM为计算语义相似度提供了一种方法。

整体模型结构

DSSM模型结构如下:
在这里插入图片描述

输入层

在输入层用到了word hashing操作,这里用了n-grams方式进行hash,例如trigram将boy切分:#-b-o, b-o-y, o-y-#。这样可以将将50万个单词压缩到三万个,bigram可以压缩到1607个,但是会产生更多碰撞冲突,即不同单词会用同一个n-gram形式表示,paper中做了一些统计如下:
在这里插入图片描述
因此作者选择了tri-gram,然后one-hot。中文可以以字为最小单位,常用字为1.5万左右,因此可以直接one-hot。

表示层

表示层为多层DNN,隐藏层神经元大小均为300,最后一层为128,激活函数tanh。

匹配层

匹配层用余弦距离得出相似分数,然后接入softmax将query和doc之间的相似性转化为一个概率值,公式如下:
在这里插入图片描述在这里插入图片描述
其中, γ \gamma γ为平滑引子, D ∈ ( D + , D − ) D \in (D^+ ,D^-) D∈(D+,D−),D为整个样本空间,D+为正样本,D-为负样本。

训练阶段

极大似然估计
在这里插入图片描述
利用随机梯度下降(SGD)使模型收敛。

优缺点

DSSM用字向量,减少切词产生的误差,同时送入模型的编码方式为one-hot,最大程度上减少了基于词向量累加或者拼接这种方式所带来的误差,缺点就是未考虑语序上下文信息

模型改进

CDSSM:1.添加word-trigram,即构建大小为3的滑动窗口,然后拼接起来,维度大小为90K;2.在word-hash层后面接入卷积层和池化层,这样可以一定程度保留了上下文信息。整体结构如下:
在这里插入图片描述
图中feature map 为 300*1,采用max-pooling,然后接128维输出层。
优缺点: 上下文信息有效的保存,间隔较远的上下文信息无法保留

欢迎指正

这篇关于文本匹配-dssm的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!