深度学习笔记——基于双向RNN(LSTM、GRU)和Attention Model的句子对匹配方法

本文主要是介绍深度学习笔记——基于双向RNN(LSTM、GRU)和Attention Model的句子对匹配方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前面写过用Word2vec和Doc2vec进行句子对匹配,以及基于传统机器学习方法进行句子对匹配的方法,本文主要介绍基于双向RNN(LSTM、GRU)和Attention Model的句子对匹配方法。

首先来看一下什么叫句子对匹配:

句子对匹配(Sentence Pair Matching)问题是NLP中非常常见的一类问题,所谓“句子对匹配”,就是说给定两个句子S1和S2,任务目标是判断这两个句子是否具备某种类型的关系。如果形式化地对这个问题定义,可以理解如下:

意思是给定两个句子,需要学习一个映射函数,输入是两个句子对,经过映射函数变换,输出是任务分类标签集合中的某类标签。
典型的例子就是Paraphrase任务,即要判断两个句子是否语义等价,所以它的分类标签集合就是个{等价,不等价}的二值集合。除此外,还有很多其它类型的任务都属于句子对匹配,比如问答系统中相似问题匹配和Answer Selection。

 

接下来我们来看一下深度学习中都有哪些句子对匹配的模型:

 

句子对匹配模型(一)

就是把两个句子S和T拼接起来,中间用一个特殊分隔符EOS分割,这里EOS不代表一个句子的结束,而是代表两个句子的分隔符号,如此就构造出了RNN的输入层。之后可以套上双向以及深层网络结构,在最高一层RNN层的输出之上,套上一个Attention Model层。这里的Attention Model层其实是一个静态的AM,具体做法就是首先计算BLSTM各个节点的注意力权重,然后对各个节点乘以注意力权重进行加和得到一个向量表示。

然后,在Attention Model之上,我们还可以套上一层SoftMax层,这样就可以实现最终的分类目的。

 

句子对匹配模型(二)

对于两个句子,分别套上一个RNN或者深层LSTM亦或双向深层LSTM等,每个RNN的目的是抽取出这个句子的特征,然后将两个句子抽取出的特征拼接成更上层的MLP多层神经网络的输入层,经过MLP的隐层使得两个句子发生非线性映射关系,最后再通过SoftMax分类层给出最后的分类结果。
这样就通过两个RNN实现了对两个句子是否具备某种关系作出分类判断的决策,使用训练数据可以获得网络参数,之后就可以将这个神经网络用来对现实任务进行分类的工作。

 

接下来,我们将MLP层之前添加一个Attention Model层,得到句子对匹配模型三

句子对匹配模型(三)


 

Attention Model层首先得到两个句子的向量表达,然后将得到的向量表达拼接起来作为MLP的输入,最终经过Softmax进行分类。

 

句子对匹配模型(四)


模型四与模型三的区别在于,模型三是对每一个句子经过深层BiLSTM得到的编码结果加上一个静态AM得到句子的一个向量表达,然后将两个句子的向量表达拼接起来。而模型四是通过Soft Attention Model得到两个句子之间的相互Attention向量,然后将这些向量进行MeanPooling,得到的结果输入MLP,最后经过Softmax得到分类结果。

 

最后:图中的BiLSTM还可以替换为BiGRU。

这篇关于深度学习笔记——基于双向RNN(LSTM、GRU)和Attention Model的句子对匹配方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/967618

相关文章

Python常用命令提示符使用方法详解

《Python常用命令提示符使用方法详解》在学习python的过程中,我们需要用到命令提示符(CMD)进行环境的配置,:本文主要介绍Python常用命令提示符使用方法的相关资料,文中通过代码介绍的... 目录一、python环境基础命令【Windows】1、检查Python是否安装2、 查看Python的安

Maven 配置中的 <mirror>绕过 HTTP 阻断机制的方法

《Maven配置中的<mirror>绕过HTTP阻断机制的方法》:本文主要介绍Maven配置中的<mirror>绕过HTTP阻断机制的方法,本文给大家分享问题原因及解决方案,感兴趣的朋友一... 目录一、问题场景:升级 Maven 后构建失败二、解决方案:通过 <mirror> 配置覆盖默认行为1. 配置示

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

Java中Map.Entry()含义及方法使用代码

《Java中Map.Entry()含义及方法使用代码》:本文主要介绍Java中Map.Entry()含义及方法使用的相关资料,Map.Entry是Java中Map的静态内部接口,用于表示键值对,其... 目录前言 Map.Entry作用核心方法常见使用场景1. 遍历 Map 的所有键值对2. 直接修改 Ma

Mybatis Plus Join使用方法示例详解

《MybatisPlusJoin使用方法示例详解》:本文主要介绍MybatisPlusJoin使用方法示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录1、pom文件2、yaml配置文件3、分页插件4、示例代码:5、测试代码6、和PageHelper结合6

Java中实现线程的创建和启动的方法

《Java中实现线程的创建和启动的方法》在Java中,实现线程的创建和启动是两个不同但紧密相关的概念,理解为什么要启动线程(调用start()方法)而非直接调用run()方法,是掌握多线程编程的关键,... 目录1. 线程的生命周期2. start() vs run() 的本质区别3. 为什么必须通过 st

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

C#之List集合去重复对象的实现方法

《C#之List集合去重复对象的实现方法》:本文主要介绍C#之List集合去重复对象的实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C# List集合去重复对象方法1、测试数据2、测试数据3、知识点补充总结C# List集合去重复对象方法1、测试数据

SpringBoot读取ZooKeeper(ZK)属性的方法实现

《SpringBoot读取ZooKeeper(ZK)属性的方法实现》本文主要介绍了SpringBoot读取ZooKeeper(ZK)属性的方法实现,强调使用@ConfigurationProperti... 目录1. 在配置文件中定义 ZK 属性application.propertiesapplicati