【AI理论学习】语言模型:从Word Embedding到ELMo

news2024/9/24 21:23:23

语言模型:从Word Embedding到ELMo

  • ELMo原理
  • Bi-LM
  • 总结
  • 参考资料

本文主要介绍一种建立在LSTM基础上的ELMo预训练模型。2013年的Word2Vec及2014年的GloVe的工作中,每个词对应一个vector,对于多义词无能为力。ELMo的工作对于此,提出了一个较好的解决方案。不同于以往的一个词对应一个向量,是固定的。 在ELMo世界里,预训练好的模型不再只是向量对应关系,而是一个训练好的模型。使用时, 将一句话或一段话输入模型,模型会根据上线文来推断每个词对应的词向量。这样做之后明显的好处之一就是对于多义词,可以结合前后语境对多义词进行理解。比如apple,可以根据前后文语境理解为苹果公司或一种水果。可以说,ELMo的提出意味着从词嵌入(Word Embedding)时代进入了语境词嵌入(Contextualized Word-Embedding)时代。

ELMo原理

ELMo来自论文Deep contextualized word representations,它是”Embeddings from Language Models“的简称。从论文题目看,ELMo的核心思想主要体现在深度上下文(Deep Contextualized )上。与静态的词嵌入不同,ELMo除提供临时词嵌入之外,还提供生成这些词嵌入的预训练模型,所以在实际使用时,ELMo可以基于预训练模型,根据实际上下文场景动态调整单词的Word Embedding表示,这样经过调整后的Word Embedding更能表达在这个上下文中的具体含义,自然也就解决了多义词的问题。所以ELMo实现了一个由静态到动态的飞跃。

ELMo的实现主要涉及语言模型,当然,它使用的语言模型有点特别,因为它首先把输入转换为字符级别的Embedding,根据字符级别的Embedding来生成上下文无关的Word Embedding,然后使用双向语言模型(如Bi-LM)生成上下文相关的Word Embedding。

ELMo的整体模型结果如下图所示:
ELMo整体模型结构
从上图中可以看出,ELMo模型的处理流程可分为如下

  1. 输入句子
    句子维度为 B × W × C B\times W\times C B×W×C,其中B表示批量大小(batch_size),W表示一句话中的单词数num_words,C表示每个单词的最大字符数目(max_characters_per_token),可设置为某个固定值(如50或60)。在一个批量中,语句有长短,可以采用Padding方法对齐。

  2. 字符编码层
    输入语句首先经过一个字符编码层(Char Encoder Layer),ELMo实际是对字符进行编码,它会对每个单词中所有字符进行编码,得到这个单词的表示。输入维度是 B × W × C B\times W\times C B×W×C,经过字符编码层后的数据维度为 B × W × D B\times W\times D B×W×D。这里展开进一步说明:
    字符编码层
    如上图所示:

    • Char Embedding
      对每个字符进行编码,包括一些特殊字符,如单词的开始<bow>、单词的结束<eow>、句子的开始符<bos>、句子的结束符<eos>、单词补齐符<pow>和句子补齐符<pos>等,维度会变为 B ∗ W ∗ C ∗ d B*W*C*d BWCd,这里d表示字符的Embedding维度(char_embed_dim)
    • Multi-Scale CNN
      Char Embedding通过不同规模的一维卷积、池化等作用后,再经过激活层,最后进入拼接和修改状态层(Concat&Reshape)
    • Concat&Reshape
      把卷积后的结果进行拼接,使其形状变为 ( B , W , d 1 + . . . + d m ) (B,W,d1+...+dm) B,W,d1+...+dm,di表示第i个卷积的通道数
    • Highway Net
      Highway Net类似残差连接,这里有2个Highway层
    • Linear Projection
      该层为线性映射层:上一层得到的维度d1+…+dm比较长,经过该层后将维度映射到D,作为词嵌入输入后续的层中,这里输出维度为 B ∗ W ∗ D B*W*D BWD

注意:输入度量是字符而不是词汇,以便模型能捕捉词的内部结构信息。比如beauty和beautiful,即使不了解这两个词的上下文,双向语言模型也能够识别出它们在一定程度上的相关性。

  1. 双向语言模型
    对字符级语句编码后,该句子会经过双向语言模型(Bi-LM),模型内部先分开训练了两个正向和反向的语言模型,而后将其表征进行拼接,最终得到输出维度 ( L + 1 ) ∗ B ∗ W ∗ 2 D (L+1)*B*W*2D (L+1)BW2D,这里+1是加上最初的Embedding层,类似残差连接。

ELMo采用双向语言模型,即同时结合正向和反向的语言模型,其目标是最大化如下的log似然值:
log似然值
参数说明
然后,分别训练正向和反向的两个LM,最后把结果拼接起来。词向量层的参数 Θ x \Theta_x Θx和Softmax层参数 Θ \Theta Θ在前向和后向语言模型中是共享的,但LM正向与反向的参数是分开的。如下图所示:
双向语言模型
ELMo 利用正向和反向扫描句子计算单词的词向量,并通过级联的方式产生一个中间向量(下面会给出具体的级联方式)。通过这种方式得到的词向量可以捕获到当前句子的结构和该单词的使用方式。

值得注意是,ELMo 使用的 Bi-LM 与 Bi-LSTM 不同,虽然长得相似,但是 Bi-LM 是两个 LM 模型的串联,一个向前,一个向后;而 Bi-LSTM 不仅仅是两个 LSTM 串联,Bi-LSTM 模型中来自两个方向的内部状态在被送到下层时进行级联(注意下图的 out 部分,在 out 中进行级联),而在 Bi-LM 中,两个方向的内部状态仅从两个独立训练的 LM 中进行级联
Bi-LSTM

  1. 混合层
    得到各层的表征后,会经过一个混合层(Scalar Mixer),它会对前面这些层的表示进行线性融合,得出最终的ELMo向量,维度为 B ∗ W ∗ 2 D B*W*2D BW2D。·

Bi-LM

设一个序列有N个 token ( t 1 , t 2 , . . . , t N ) (t_1,t_2,...,t_N) (t1,t2,...,tN)(这里说 token 是为了兼容字符和单词,如上文所说,EMLo使用的是字符级别的Embedding)

对于一个前向语言模型来说,是基于先前的序列来预测当前 token: p ( t 1 , t 2 , . . . , t N ) = ∏ k = 1 N p ( t k ∣ t 1 , t 2 , . . . , t k − 1 ) p (t_1 ,t_2 ,...,t_N )=\prod_{k=1}^{N}{p( t_k|t_1 ,t_2 ,...,t_{k-1} )} p(t1,t2,...,tN)=k=1Np(tkt1,t2,...,tk1)
而对于一个后向语言模型来说,是基于后面的序列来预测当前 token: p ( t 1 , t 2 , . . . , t N ) = ∏ k = 1 N p ( t k ∣ t k + 1 , t k + 2 , . . . , t N ) p (t_1 ,t_2 ,...,t_N )=\prod_{k=1}^{N}{p( t_k|t_{k+1} ,t_{k+2} ,...,t_{N} )} p(t1,t2,...,tN)=k=1Np(tktk+1,tk+2,...,tN)可以用 h k , j → \overrightarrow{h_{k,j}} hk,j h k , j ← \overleftarrow{h_{k,j}} hk,j 分别表示前向和后向语言模型。

ELMo 用的是多层双向的 LSTM,所以我们联合前向模型和后向模型给出对数似然估计
∑ k = 1 N ( log ⁡ p ( t k ∣ t 1 , . . . , t k − 1 ; Θ x , Θ → L S T M , Θ s ) + log ⁡ p ( t k ∣ t k + 1 , . . . , t N ; Θ x , Θ ← L S T M , Θ s ) ) \sum_{k=1}^{N}(\log p(t_k | t_1,...,t_{k-1}; \Theta_x, \overrightarrow{\Theta}_{LSTM},\Theta_s) + \log p(t_k | t_{k+1},...,t_{N}; \Theta_x, \overleftarrow{\Theta}_{LSTM},\Theta_s)) k=1N(logp(tkt1,...,tk1;Θx,Θ LSTM,Θs)+logp(tktk+1,...,tN;Θx,Θ LSTM,Θs))其中, Θ x \Theta_x Θx表示 token 的向量, Θ s \Theta_s Θs表示 Softmax 层对的参数, Θ → L S T M \overrightarrow{\Theta}_{LSTM} Θ LSTM Θ ← L S T M \overleftarrow{\Theta}_{LSTM} Θ LSTM表示前向和后向的LSTM 的参数。

我们刚说 ELMo 通过级联的方式给出中间向量(这边要注意两个地方:一个是级联,一个是中间向量),现在给出符号定义:对每一个 token t k t_k tk来说,一个 L 层的 ELMo 的 2L + 1 个表征: R k = { x k L M , h k , j → , h k , j ← ∣ j = 1 , . . , L } = { h k , j ∣ j = 0 , . . . , L } R_k=\{x_k^{LM},\overrightarrow{h_{k,j}},\overleftarrow{h_{k,j}} | j=1,..,L\} \\ =\{h_{k,j}| j=0,...,L\} Rk={xkLM,hk,j ,hk,j j=1,..,L}={hk,jj=0,...,L}其中, h k , 0 h_{k,0} hk,0表示输入层, h k , j = [ h k , j → ; h k , j ← ] h_{k,j} = [\overrightarrow{h_{k,j}}; \overleftarrow{h_{k,j}}] hk,j=[hk,j ;hk,j ]。(之所以是 2L + 1 是因为把输入层加了进来)

对于下游任务来说,ELMo 会将所有的表征加权合并为一个中间向量:
E L M o k = E ( R k ; Θ ) = γ ∑ j = 0 L s j h k , j L M ELMo_k=E(R_k;\Theta) = \gamma\sum_{j=0}^{L}s_jh_{k,j}^{LM} ELMok=E(Rk;Θ)=γj=0Lsjhk,jLM其中, s s s 是 Softmax 的结果,用作权重; γ \gamma γ 是常量参数,允许模型缩放整个 ELMo 向量,考虑到各个 Bi-LSTM 层分布不同,某些情况下对网络的 Layer Normalization 会有帮助。
ELMo

总结

ELMo预训练模型采用双向语言模型,该预训练模型能够随着具体语言环境更新词向量表示,即更新对应词的Embedding。当然,由于ELMo采用LSTM架构,因此,模型的并发能力、关注语句的长度等在大的语料库面前,不能完全适用。而且通过拼接(word embedding,Forward hidden state,backward hidden state)方式融合特征的方式,削弱了语言模型特征抽取的能力。

参考资料

  1. ELMo (Embeddings from Language Models)
  2. ELMo原理解析及简单上手使用
  3. Deep contextualized word representations(ELMO词向量理解)

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

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

相关文章

视频讲解|3014 含分布式电源的配电网优化重构

目录 1 主要内容 2 讲解视频链接 3 部分程序 1 主要内容 该视频为程序目录中编号1034的讲解内容&#xff0c;该程序的链接为配电网优化重构matlab智能算法&#xff0c;本次重点讲解了基本环矩阵原理以及代码两步实现过程、如何利用基本环向量去创造可行解、粒子群优化过程、…

GeoNet: Unsupervised Learning of Dense Depth, Optical Flow and Camera Pose 论文阅读

论文信息 题目&#xff1a;GeoNet: Unsupervised Learning of Dense Depth, Optical Flow and Camera Pose 作者&#xff1a;Zhichao Yin and Jianping Shi 来源&#xff1a;CVPR 时间&#xff1a;2018 Abstract 我们提出了 GeoNet&#xff0c;这是一种联合无监督学习框架&a…

Kafka3.0.0版本——消费者(消费者组案例)

目录 一、消费者组案例1.1、案例需求1.2、案例代码1.2.1、消费者1代码1.2.2、消费者2代码1.2.3、消费者3代码1.2.4、生产者代码 1.3、测试 一、消费者组案例 1.1、案例需求 测试同一个主题的分区数据&#xff0c;只能由一个消费者组中的一个消费。如下图所示&#xff1a; 1…

[CISCN 2019华北Day1]Web1

文章目录 涉及知识点解题过程 涉及知识点 phar反序列化文件读取 解题过程 打开题目&#xff0c;注册用户为admin 进去发现有文件上传的功能&#xff0c;我们随便上传个图片 然后就有下载和删除两个功能 我们尝试抓包下载文件的功能 发现参数可控&#xff0c;我们尝试读取一下…

C++如何查看栈的变量

在如下行下断点&#xff0c;然后运行&#xff0c;中断&#xff1b; 右击中断的代码行&#xff0c;选择 转到反汇编&#xff1b; 红线标示的行是调用AddNum()函数处&#xff1b;看一下之前使用了push把a和b压入栈&#xff1b;使用push压入栈的变量就是放入栈的变量&#xff1b; …

Net跨平台UI框架Avalonia入门-安装和使用(v11版本)

介绍Avalonia v11版本 avalonia v11版本发布了&#xff0c;增加了很多新的功能&#xff0c;Avalonia的扩展也同步升级了。 主要更新内容&#xff1a; 辅助功能&#xff1a;增加了对各种辅助工具的支持&#xff0c;提高了Avalonia应用程序的可用性。输入法编辑器&#xff08;I…

模型压缩-对模型结构进行优化

模型压缩-对模型结构进行优化 概述 模型压缩通常都是对推断过程而言&#xff0c;训练过程的计算代价通常不考虑&#xff0c;因为GPU可以快速完成任意复杂度模型的训练对于推断过程来说&#xff0c;模型应用才是对于速度敏感的场景多数情况下 希望使用尽可能少的能耗完成京可能…

通俗讲解傅里叶变换

参考:六一礼物:给孩子解释什么是傅里叶变换 牛!不看任何数学公式来讲解傅里叶变换 如何直观形象、生动有趣地给文科学生介绍傅里叶变换? - 知乎 从基说起…… 从数学的角度,提供一个形象有趣的解释。理解傅里叶变换的钥匙是理解基♂,它能让你重新认识世界。 1. 什么是…

概率有向图模型(一)

文章目录 前言概率有向图模型验证回到书中隐马尔可夫模型信念网络朴素贝耶斯 总结 前言 经过前面的复习&#xff0c;我们把李航老师的《统计学习方法》中的监督学习部分回顾了一遍&#xff0c;接下来我们在此基础上&#xff0c;开始学习邱锡鹏老师的《神经网络与深度学习》&am…

02_常见网络层协议的头结构

1.ARP报文的报文结构 ARP首部的5个字段的含义&#xff1a; 硬件类型&#xff1a;值为1表示以太网MAC地址。 协议类型&#xff1a;表示要映射的协议地址类型&#xff0c;0x0800 表示映射为IP地址。 硬件地址长度&#xff1a;在以太网ARP的请求和应答中都是6&#xff0c;表示M…

【LeetCode题目详解】第九章 动态规划part06 完全背的讲解 518. 零钱兑换 II 377. 组合总和 Ⅳ (day44补)

本文章代码以c为例&#xff01; 动态规划&#xff1a;完全背包理论基础 思路 # 完全背包 有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品都有无限个&#xff08;也就是可以放入背包多次&#xff09;&#…

QT QScrollArea控件 使用详解

本文详细的介绍了QScrollArea控件的各种操作&#xff0c;例如&#xff1a;新建界面、源文件、布局、进度条宽、进度条高、水平滚动条值、垂直滚动条值、移入事件、移出事件、效果图、其它文章等等操作。 实际开发中&#xff0c;一个界面上可能包含十几个控件&#xff0c;手动调…

Qt creator中项目的构建配置和运行设置

使用 Qt Creator 集成开发环境构建和运行程序是一件非常简单的事情&#xff0c;一个按钮或者一个快捷键搞定全部&#xff0c;大家已经都了解了。但是&#xff0c;这些看起来简单的过程&#xff0c;背后到底发生了什么呢&#xff1f; 点击 Qt Creator 项目模式&#xff0c;可以…

elasticsearch的DSL查询文档

DSL查询分类 查询所有&#xff1a;查询出所有数据&#xff0c;一般测试用。例如&#xff1a;match_all 全文检索&#xff08;full text&#xff09;查询&#xff1a;利用分词器对用户输入内容分词&#xff0c;然后去倒排索引库中匹配。例如&#xff1a; match_query multi_ma…

(源码版)2023 年高教社杯全国大学生数学建模竞赛-E 题 黄河水沙监测题一数据分析详解+Python代码

十分激动啊啊啊题目终于出来了&#xff01;&#xff01;官网6点就进去了结果直接卡死现在才拿到题目&#xff0c;我是打算A-E题全部做一遍。简单介绍一下我自己&#xff1a;博主专注建模四年&#xff0c;参与过大大小小数十来次数学建模&#xff0c;理解各类模型原理以及每种模…

50etf期权最多能开仓多少手?

50etf期权限仓限额的操作&#xff0c;是为了能更好防范和控制期权交易的风险&#xff0c;无论是期货还是期权&#xff0c;在交易中都有规定的持仓限额&#xff0c;不能超过某个额度&#xff0c;那么50etf期权最多能开仓多少手&#xff1f;下文为你们全面介绍&#xff01;本文来…

2023高教社杯数学建模E题思路模型 - 黄河水沙监测数据分析

# 1 赛题 E 题 黄河水沙监测数据分析 黄河是中华民族的母亲河。研究黄河水沙通量的变化规律对沿黄流域的环境治理、气候变 化和人民生活的影响&#xff0c; 以及对优化黄河流域水资源分配、协调人地关系、调水调沙、防洪减灾 等方面都具有重要的理论指导意义。 附件 1 给出了位…

项目01—基于nignx+keepalived双vip的负载均衡高可用Web集群

文章目录 一.项目介绍1.拓扑图2.详细介绍 二.前期准备1.项目环境2.IP划分 三. 项目步骤1.ansible部署软件环境1.1 安装ansible环境1.2 建立免密通道1.3 批量部署nginx 2.配置NFS服务器和负载均衡器搭建keepalived2.1 修改nginx的index.html界面2.2 nginx实现七层负载均衡2.4 使…

[LeetCode]栈,队列相关题目(C语言实现)

文章目录 LeetCode20. 有效的括号LeetCode225. 用队列实现栈LeetCode232. 用栈实现队列LeetCode622. 设计循环队列 LeetCode20. 有效的括号 题目 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有…

【数据结构与算法系列4】长度最小的子数组

给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl1, ..., numsr-1, numsr] &#xff0c;并返回其长度**。**如果不存在符合条件的子数组&#xff0c;返回 0 。 示例 1&#xff1a; 输入&…