自然语言处理从入门到应用——动态词向量预训练:双向语言模型

news2024/9/20 22:33:54

分类目录:《自然语言处理从入门到应用》总目录


对于给定的一段输入文本 w 1 w 2 ⋯ w n w_1w_2\cdots w_n w1w2wn,双向语言模型从前向(从左到右)和后向(从右到左)两个方向同时建立语言模型。这样做的好处在于,对于文本中任一时刻的词 w t w_t wt,可以同时获得其分别基于左侧上下文信息和右侧上下文信息的表示。具体地,模型首先对每个词单独编码。这一过程是上下文无关的,主要利用了词内部的字符序列信息。基于编码后的词表示序列,模型使用两个不同方向的多层长短时记忆网络(LSTM)分别计算每一时刻词的前向、后向隐含层表示,也就是上下文相关的词向量表示。利用该表示,模型预测每一时刻的目标词。对于前向语言模型, t t t时刻的目标词是 w t + 1 w_{t+1} wt+1,对于后向语言模型,目标词是 w t − 1 w_{t-1} wt1

输入表示层

ELMo模型采用基于字符组合的神经网络表示输入文本中的每个词,目的是减小未登录词(Out-Of-Vocabulary,OOV)对模型的影响。下图展示了输入表示层的基本结构。首先,字符向量层将输入层中的每个字符(含额外添加的起止符)转换为向量表示。假设 w t w_t wt由字符序列 c 1 c 2 ⋯ c l c_1c_2\cdots c_l c1c2cl构成,对于其中的每个字符 c i c_i ci,可以表示为: v c i = E char e c i v_{c_i}=E^{\text{char}}e_{c_i} vci=Echareci。其中, E char ∈ R d char × ∣ V char ∣ E^{\text{char}}\in R^{d^{\text{char}}\times |V^{\text{char}}|} EcharRdchar×Vchar表示字符向量矩阵; V char V^{\text{char}} Vchar表示所有字符集合; d char d^{\text{char}} dchar表示字符向量维度; e c i e_{c_i} eci表示字符 c i c_i ci的独热编码。记 w t w_t wt中所有字符向量组成的矩阵为 C t ∈ R d char × l C_t\in R^{d^{\text{char}}\times l} CtRdchar×l,即 C t = [ v c 1 , v c 2 , ⋯   , v c l ] C_t=[v_{c_1}, v_{c_2}, \cdots, v_{c_l}] Ct=[vc1,vc2,,vcl]。接下来,利用卷积神经网络对字符级向量表示序列进行语义组合(Semantic Composition)。这里使用一维卷积神经网络,将字符向量的维度 d char d^{\text{char}} dchar作为输入通道的个数,记为 N in N^{\text{in}} Nin,输出向量的维度作为输出通道的个数,记为 N out N^{\text{out}} Nout。另外,通过使用多个不同大小(宽度)的卷积核,可以利用不同粒度的字符级上下文信息,并得到相应的隐含层向量表示,这些隐含层向量的维度由每个卷积核对应的输出通道个数确定。拼接这些向量,就得到了每一位置的卷积输出。然后,池化操作隐含层所有位置的输出向量,就可以得到对于词 w t w_t wt的定长向量表示,记为 f t f_t ft。假设使用宽度分别为{1,2,3,4,5,6,7}的7个一维卷积核,对应的输出通道数量分别为{32,32,64,128,256,512,1024},那么输出向量 f t f_t ft的维度为2048。基于字符卷积神经网络和Highway神经网络的输入表示层示意图接着,模型使用两层Highway神经网络对卷积神经网络输出作进一步变换,得到最终的词向量表示 x t x_t xt。Highway神经网络在输入与输出之间直接建立“通道”,使得输出层可以直接将梯度回传至输入层,从而避免因网络层数过多而带来的梯度爆炸或弥散的问题。单层Highway神经网络的具体计算方式如下:
x t = g ⊙ f t + ( 1 − g ) ⊙ ReLU ( W f t + b ) x_t=g\odot f_t+(1 - g)\odot\text{ReLU}(Wf_t+b) xt=gft+(1g)ReLU(Wft+b)

式中, g g g为门控向量,其以 f t f_t ft为输入,经线性变换后通过Sigmoid函数计算得到:
g = σ ( W g f t + b g ) g=\sigma(W^gf_t+b^g) g=σ(Wgft+bg)

式中, W g W^g Wg b g b^g bg为门控网络中的线性变换矩阵与偏置向量。可见,Highway神经网络的输出实际上是输入层与隐含层的线性插值结果。当然,通常模型的结构是根据实验调整和确定的,我们也可以自行尝试其他的模型结构。例如,可以使用字符级双向LSTM网络编码单词内字符串序列。接下来,在由上述过程得到的上下文无关词向量的基础之上,利用双向语言模型分别编码前向与后向上下文信息,从而得到每一时刻的动态词向量表示。

前向语言模型

在前向语言模型中,对于任一时刻目标词的预测,都只依赖于该时刻左侧的上下文信息或者历史。这里使用基于多层堆叠的长短时记忆网络语言模型。将模型中多层堆叠LSTM的参数记为 θ → LSTM \overrightarrow{\theta}^\text{LSTM} θ LSTM,Softmax输出层参数记为 θ out \theta^\text{out} θout。则模型可以表示为:
p ( w 1 w 2 ⋯ w n ) = ∏ t = 1 n P ( w t ∣ x 1 : t − 1 ; θ → LSTM ; θ out ) p(w_1w_2\cdots w_n)=\prod_{t=1}^nP(w_t|x_{1:t-1}; \overrightarrow{\theta}^\text{LSTM}; \theta^\text{out}) p(w1w2wn)=t=1nP(wtx1:t1;θ LSTM;θout)

后向语言模型

与前向语言模型相反,后向语言模型只考虑某一时刻右侧的上下文信息。可以表示为:
p ( w 1 w 2 ⋯ w n ) = ∏ t = 1 n P ( w t ∣ x t + 1 : n ; θ ← LSTM ; θ out ) p(w_1w_2\cdots w_n)=\prod_{t=1}^nP(w_t|x_{t+1:n}; \overleftarrow{\theta}^\text{LSTM}; \theta^\text{out}) p(w1w2wn)=t=1nP(wtxt+1:n;θ LSTM;θout)

参考文献:
[1] 车万翔, 崔一鸣, 郭江. 自然语言处理:基于预训练模型的方法[M]. 电子工业出版社, 2021.
[2] 邵浩, 刘一烽. 预训练语言模型[M]. 电子工业出版社, 2021.
[3] 何晗. 自然语言处理入门[M]. 人民邮电出版社, 2019
[4] Sudharsan Ravichandiran. BERT基础教程:Transformer大模型实战[M]. 人民邮电出版社, 2023
[5] 吴茂贵, 王红星. 深入浅出Embedding:原理解析与应用实战[M]. 机械工业出版社, 2021.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/660038.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

go 调试利器之pprof指标分析

文章目录 概要一、指标类型1.1、堆栈指标1.2、CPU指标分析1.3、http-pprof 二、go tool pprof2.1、可视化2.2、CPU火焰图 概要 Go语言原生支持对于程序运行时重要指标或特征进行分析。pprof是其中一种重要的工具,其不仅可以分析程序运行时的错误(内存泄…

ChatGPT 之 LangChain的文本切割方法对比

本文来自http://blog.csdn.net/hellogv/ ,引用必须注明出处! ChatGPT面向对话格式的文本理解很好,但如果要把网络上的文章让ChatGPT直接分析则会有格式的问题。文本清洗是个大课题,讲起来需要很多篇幅,优化起来前路漫…

使用arduino IDE开发ESP8266NodeMCU连接DHT11实现温湿度检测并上传onenet官网

前言: 本篇博客记录一下以arduino IDE来开发一下ESP8266NodeMCU,实现用DHT11进行温湿度检测,并且上传新版的onenet官网;我在实现这个小项目的时候,发现网上资料有关onenet的资料都是旧版的,这就有点难受了&…

[MAUI]弧形进度条与弧形滑块的交互实现

文章目录 弧形基类定义绘制弧 弧形进度条(ProgressBar)添加动画宽度补偿文本 弧形滑块(Slider)创建控制柄拖动事件处理 项目地址 进度条(ProgressBar)用于展示任务的进度,告知用户当前状态和预期; 滑块(Slider&#xf…

本地安装部署运行 ChatGLM-6B 的常见问题解答以及后续优化

报错 No module named ‘transformers_modules.THUDM/chatglm-6b’ 报错本身的意思是,没有在指定的路径THUDM/chatglm-6b找到推理用模型 一般常见于自己手动下载模型,而不是通过下边这些文件直接启动,自动下载的情况 你需要修改web_demo.py&…

分层测试终究是大梦一场空?

分层测试分了个寂寞? 分层测试这个风吹了好多年,不分层都不好意思说自己是专业测试。各互联网公司更是对此乐此不疲,测试架构、测试平台,搞了一套又一套,然而。。。 理想总是丰满,现实总是骨干&#xff0…

第十三章 反射操作相关函数

1. 【检测对象是否可被调用】callable()函数 语法参考 callable函数的语法格式如下: callable(object)参数说明: object:对象; 返回值:如果对象可调用返回 True,否则返回 False。 说明:对于…

Python 中print 和return 的区别,你了解吗?

1、print() print()函数的作用是输出数据到控制台,就是打印在你能看到的界面上。 2、return return语句[表达式]退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None。 return作为脚本单独运行时则需要print函数才能显示,但是…

【id:17】【1分】A. DS顺序表--类实现

题目描述 用C语言和类实现顺序表 属性包括:数组、实际长度、最大长度(设定为1000) 操作包括:创建、插入、删除、查找 类定义参考 输入 第1行先输入n表示有n个数据,即n是实际长度;接着输入n个数据 第2行输…

c语言项目——三子棋小游戏(带详细讲解解析)

1.三子棋是什么? 三子棋是一种民间传统游戏,又叫九宫棋、圈圈叉叉棋、一条龙、井字棋等。游戏分为双方对战,双方依次在9宫格棋盘上摆放棋子,率先将自己的三个棋子走成一条线就视为胜利,而对方就算输了,但是…

【MySQL 索引、事务与存储引擎】

目录 一、索引的介绍2、索引的作用3、创建索引的原刚依据(面试题) 二、索引的分类和创建1、普通索引2、唯一索引3、主键索引4、组合索引5、全文索引6、查看索引7、删除索引8、分析是否使用索引 三、MySQL事务介绍1、事务的ACID特性2、隔离性 --- 不一致的…

Linux编译器gcc/g++

文章目录 Liinux编译器gcc/g1.背景知识(程序的翻译)2.动态库、静态库 Liinux编译器gcc/g 1.背景知识(程序的翻译) 以gcc编译 以g编译,但是此时会发现没有g这个指令,所有需要安装它,安装指令 yum install gcc gcc-c gcc和g都会形成可执行文…

TransFusion:利用 Transformer 进行鲁棒性融合来进行 3D 目标检测

Query 初始化 Input-dependent 以往 Query 位置是随机生成或学习作为网络参数的,而与输入数据无关,因此需要额外的阶段(解码器层)来学习模型向真实对象中心移动的过程。 论文提出了一种基于center heatmap 的 input-dependent 初…

在 Python 中使用令牌进行 API 调用

文章目录 在 Python 中进行不带令牌的 API 调用在 Python 中使用令牌调用 API总结 当我们第一次遇到如何在 Python 中调用 API 的问题时,我们的第一个想法是,“什么是 API?”。 API是应用程序编程接口的首字母缩写; 它允许您访问…

【面试】Java并发编程

ThreadLocal ThreadLocal 为什么会导致内存泄漏 hreadLocalMap使用ThreadLocal的弱引用作为key,如果一个ThreadLocal不存在外部强引用时,Key(ThreadLocal)势必会被GC回收,这样就会导致ThreadLocalMap中key为null, 而value还存在着…

15-ajax、实现过程、封装

定义 🍿🍿🍿Async Javascript and XML 异步的JavaScript 和XML,是一种创建交互式网页应用的网页开发技术,可以在不重新加载整个网页的情况下,与服务器交换数据,并且更新部分网页 离不开 XMLH…

【C语言】万字教学,带你分步实现扫雷游戏(内含递归函数解析),剑指扫雷,一篇足矣

君兮_的个人主页 勤时当勉励 岁月不待人 C/C 游戏开发 带你轻松玩转扫雷游戏 前言一. 扫雷游戏的介绍以及内部需要实现的功能解析1.什么是扫雷游戏2.扫雷游戏所需的几个步骤 二.扫雷游戏的具体实现1.打印菜单菜单上的选择功能 2.初始化以及打印棋盘初始化函数InitBoard打印棋…

如何使用测试驱动开发(TDD)来实现100%的测试覆盖率?

本文以 DDM 为例,简单地介绍一下如何用测试驱动开发(TDD, Test-Driven Development)的方法来驱动出这个函数库。 本文以DDM为例,简单地介绍一下如何用测试驱动开发(TDD, Test-Driven Development)的方法来驱动出这个函数库。 DDM简介 DDM是…

vue-cli3的安装和项目创建

一 vue-cli3的安装 (注意:vue-cli3在安装之前,需要先删除旧版本,即vue-cli2) cnpm i -g vue/cli vue-cli3的卸载:cnpm uninstall -g vue/cli 然后用命令“vue -V”查看是否删除vue,如果没有删…

kafka原理架构深入

目录 1. 下载安装2. 命令行命令3. 概述3.1 定义3.2 基本架构 4. 架构深入4.1 生产者4.1.1 分区4.1.2 数据可靠性保证4.1.3 Exactly Once语义4.1.4 发送消息流程 4.2 broker4.2.1 日志结构4.2.2 存储策略4.2.3 Controller & ZooKeeper4.2.4 高效读写数据 4.3 消费者4.3.1 消…