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

前言

在前面一篇文章中,我总结了Representation-Based文本匹配模型的改进方法,其中在一篇论文中提到了使用Pre-train方式来提高效果,论文连接如下:

Chang, W., Yu, F.X., Chang, Y., Yang, Y., & Kumar, S. (2020). Pre-training Tasks for Embedding-based Large-scale Retrieval. ArXiv, abs/2002.03932.[PDF]

论文中提到的预训练数据均为,relevant positive Query-Doc 对:

训练的目标为最大化当前Postive Query-Doc的Softmax条件概率:

论文中提到,softxmax分母中的 D \mathcal D D为所有可能的文档集合,这样的话候选文档集合非常大,所以论文中做了近似,训练时使用当前batch中文档这个子集来代替全集 D \mathcal D D,这种方法称为Sample Softmax。 TensorFlow中也有这个方法的API实现,但是我一直不是很能理解代码中到底应该怎么实现,突然这几天读到了文本匹配的开山之作 DSSM,我发现DSSM的训练方法与上面那篇论文非常类似,于是研究了一下源码,有一种豁然开朗的感觉,所以想分享一下,我对这种训练方式的理解。DSSM论链接如下:

Huang, Po-Sen et al. “Learning deep structured semantic models for web search using clickthrough data.” CIKM (2013).[PDF]

DSSM论文中的训练数据也是Query-Document对,训练目标也为最大化给定Query下点击Doc的条件概率,公式如下,和上面说的Pre-train任务基本一致:
在这里插入图片描述
极大似然估计的公式基本一样,训练都是Point-wise loss,具体各个符号我在下面仔细介绍。

DSSM框架简要介绍

作为文本匹配方向的开山之作,已经有非常多的博客介绍了这个模型,这里我就简单介绍一下,重点放在后面训练源码的阅读。

模型结构

在这里插入图片描述
DSSM也是Representation-Based模型,其中Query端 Encoder 和 Doc端 Encoder都是使用 MLP实现,最后Score计算使用的是cosine similarity,后续模型的改进很多都是使用更好的Encoder结构。

输入

DSSM中输入并不是单纯直接使用 bag-of-word,从上面结构图可以看出,输入的时候做了Word Hashing,在进行bag-of-word映射,目的主要如下:

  • 减少词典的大小,直接使用原始word词典非常大(500K),导致输入向量的维数也非常高,使用Word Hashing做分解后,可以减少词典大小,比如letter-trigram(30K)
  • 一定程度解决OOV问题
  • 对拼写错误也有帮助

Word Hashing的做法类似于fast-text中的子词分解,但是不同点在于

  • fast-text中会取多个不同大小窗口对一个单词进行分解,比如2、3、4、5,词表是这些所有的子词构成的集合
  • Word Hashing只会取一个固定大小窗口对单词进行分解,词表是这个固定大小窗口子词的集合,比如letter-bigram,letter-trigram

比如输入的词为#good#,我们选tri-gram,则Word-hashing分解后,#good#的表示则为#go,goo,ood,od#,然后就是输入的每个词都映射为tri-gram bag-of-words 向量,出现了的位置为1,否则为0。假设数据集进行tri-gram分解后,构成的词表大小为N,那么Query输入处理方式如下:

  • 首先将每个词进行Word Hashing分解
  • 获得每个词的表示,比如 [0,1,1,0,0,0…,0,1] ,维数为N,其中在词表中出现了的位置为1,否则为0
  • 将Query中所有的词的表示向量相加可以得到一个N维向量,其实就是bag-of-word表示(只考虑有没有出现,并不考虑出现顺序位置)

Doc端输入的处理也类似于上面Query端的处理,获得Word-Hashing后的向量表示,作为整个模型的输入。

Encoder层

Query端和Doc端Encoder层处理很简单,就是MLP,计算公式如下:
在这里插入图片描述
可以看出就是标准的全连接层运算

相似度Score计算

DSSM中最后的相似度计算用的是 cosine similarity,计算公式如下:
在这里插入图片描述
模型训练好之后,给定一个Query我们就可以对其所有Doc按照这个计算出来的cosine similarity进行排序。

训练方式解读

训练数据

DSSM的训练方式是做Point-wise训练,论文中对于训练数据的描述如下:

The clickthrough logs consist of a list of queries and their clicked documents.

给定的是Query以及对应的点击Document,我们需要进行极大似然估计。

训练目标

DSSM首先通过获得的semantic relevance score计算在给定Query下Doc的后验概率:
在这里插入图片描述
其中 γ \gamma γ为softmax函数的平滑因子, D \bold D D表示所有的待排序的候选文档集合,可以看出这个目标其实和我们一开始提到的Pre-train那篇论文的目标是一样的。我们的候选文档大小可能会非常大,论文在实际训练中,做法如下:

  • 我们使用 ( Q , D + ) (Q,D^+) (Q,D+)来表示一个(Query,Doc)对,其中 D + D^+ D+表示这个Doc是被点击过的
  • 使用 D + D^+ D+和四个随机选取没有被点击过的Doc来近似全部文档集合 D D D,其中 { D j − ; j = 1 , . . . , 4 } \{D^-_j;j=1,...,4\} { Dj;j=1,...,4}表示负样本

上面就是训练时候的实际做法,对于每个 ( Q , D + ) (Q,D^+) (Q,D+),我们只需要采样K个负样本(K可以自己定), ( Q , D j − ) (Q,D^-_j) (Q,Dj),这样softxmax操作我们也只需要在 D ^ = { D + , D 1 −

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值