最近在家听贪心学院的NLP直播课。都是比较基础的内容。放到博客上作为NLP 课程的简单的梳理。

本节课程主要讲解的是词向量和Elmo。核心是Elmo,词向量是基础知识点。

Elmo 是2018年提出的论文 《Deep contextualized word representtations》,在这篇论文中提出了很重要的思想Elmo,Elmo 是一种基于特征的语言模型,用预训练的语言模型,生成更好的特征。

Elmo是一种新型深度语境化词表征,可对词进行复杂特征(如句法和语义)和词在语言语境中的变化进行建模(即对多义词进行建模)。我们的词向量是深度双向语言模型biLM内部状态的函数,在一个大型文本语料库中预训练而成。

Elmo的主要做法是先训练一个完整的语言模型,再用这个语言模型去处理需要训练的文本,生成相应的词向量,所以在文中一直强调Elmo的模型对同一个字的不同句子中能生成不同的词向量。

在讲ELmo之前 我们先回顾一下词向量和语言模型,因为ELmo的提出 就是因为就语言模型的词向量 有一些缺点(主要是无法解决一词多意的问题),所以提出双向-深度-LSTM 的Elmo模型。这里的‘双向’是一个拼接而已,不是真正意义上的双向,所以XLNET 有permutation的改进实现真正的根据上下文内容的双向, 这里的‘深度’ 是横向和纵向的深度,因为深度 每层可以学习到不同的点,并且越深的层学的东西越具体。

1.词向量与语言模型

NLU 文本的量化表示方式

独热编码:能否表示单词之间的相似度? — 不能。因为通过任何一种方式(余弦相似度等)无法计算两两向量的相似度。

所以我们有了 词向量 (分布式表示的词向量)

独热编码: 稀疏向量,并且都是正交的。

词向量:稠密向量,分布式词向量。

类似的单词 都是聚集在一起的。当我们提取出某些词向量时,我们可以通过可视化来呈现出他们的关系。 可视化 T-SNE (sklearn里面有)这是一种降维的算法(针对词向量一般用TSNE),其他降维算法有PCA 等。

语言模型的目标是最大的话 一句话的 概率的。

基于前面几个单词预测下一个单词 这就是语言模型。

语言模型的基础:链式法则,马尔科夫,N元组,平滑方式,困惑度。

Global 方法:全局方法

Local 方法: 局部方法

基于LM的训练:基于语言模型的训练

基于非LM的训练:基于非语言模型的训练

1 Global vs Local

Global: 优势:全局. 缺点:计算量大,有新的文本的时候 需要更新。

Local: Skip Gram

2. 基于LM vs 非基于LM

对于Elmo: 语言模型-NNLM-层次表示-HMM-RNN-LSTM-BiLSTM-DeepBiLSTM-ELMO

2.学习不同语境下的语义表示

基于Distributional Hypothesis

– Skip-Gram

句子: 词向量 训练 方法 有 两种

单词: W1 W2 W3 W4 W5

windows = 1

假设已知 w2, 预测出 w1 和 w3

目标函数:Maximize P(w2|w1)P(w1|w2)P(w3|w2)P(w2…)

– CBOW:

通过 w1 和 w3 预测 w2

目标函数: Maximize P(w2| w1,w3) P(w3| w2,w4)…

Language Model + HMM

– NNLM:

目标函数: Maximize P(w2|w1)P(w3|w2)

上面句子里面的Back 是不同的意思。

理解词向量 在不同语境下的含义 就是我们的目标。所以有了Elmo,Bert 等模型。

正确答案是 ABCD。

A是一种比较直观的 可行方案,每个单词多意,那么可以对应多个词向量。当然方法可行,不过具体执行问题有可能也很懂。

B和C是相关的。example: I back my car, I heart my back. 首先对back计算一个基准向量 H_back 一对一的,如何计算2个back这个句子里面的含义分别是什么? H_back + ▲(基于上下文的偏移)

3.基于LSTM 的词向量学习

基于LSTM 作为基石

深度,层次

LSTM 来源于RNN, 因为RNN有些梯度爆咋的问题,所以提出了LSTM。

目标函数 是一个 语言模型,输出层 通过softmax 获取 期望输出向量,然后 期望输出 和实际值(热独编码) 计算交叉熵,反向传播。

下面是两个独立的 LSTM。不是一个真正的双向LSTM。

为什么不是真正的双向 是因为只是把前向和反向 拼接起来的结果,不是完整意义上的双向。 所以后面Permutation(XLNET) 可以认为是真正的双向

4.深度学习中的层次表示以及Deep BI-LSTM

深度 : 可以从纵向和横向上深度。

层次表示 可以看出 每层学出来的结果是不一样的。

这个就是Deep-bi-LSTM

基于LM方式来训练。

5.ELMO模型

Elmo 使用的是一个双向的LSTM语言模型,由一个前向和一个后向语言模型构成,目标函数就是取这两个方向语言模型的最大似然。

语言模型的双向体现在对句子的建模:给定一个N个token的句子, t1,t2,t3...tNt1,t2,t3...tNt_1,t_2,t_3...t_Nt1​,t2​,t3​...tN​。

前向语言模型:从历史信息预测下一个词,即从给定的历史信息$(t_1,…,t_{k-1}) $ 建模下一个token 预测 tktkt_ktk​的概率 (这是前向LSTM)

对于一个L层的LSTM, 设其输入是xLMkxkLMx^{LM}_kxkLM​(token embedding)每一层都会输出一个context-dependent representation (h⃗LMk,jh⃗k,jLM\vec{h}^{LM}_{k,j}hk,jLM​), LSTM的最后一层输出为(h⃗LMk,Lh⃗k,LLM\vec{h}^{LM}_{k,L}hk,LLM​),该输出会在Softmax layer被用来预测下一个token tk+1tk+1t_{k+1}tk+1​

后向语言模型:从未来信息预测上一个词,即从给定的未来(tk+1,...tNtk+1,...tNt_{k+1},...t_Ntk+1​,...tN​)建模上一个token tktkt_ktk​的概率(反向LSTM)

对于一个L层的LSTM, 设其输入是xLMkxkLMx^{LM}_kxkLM​(token embedding)每一层都会输出一个context-dependent representation 反向的(h⃗LMk,jh⃗k,jLM\vec{h}^{LM}_{k,j}hk,jLM​), LSTM的最后一层输出为反向的(h⃗LMk,Lh⃗k,LLM\vec{h}^{LM}_{k,L}hk,LLM​),该输出会在Softmax layer被用来预测下一个token tk−1tk−1t_{k-1}tk−1​

双向语言模型是前向、后向的一个综合,通过两个方向的对数极大似然估计来完成:

其中:

ΘxΘx\Theta_{x}Θx​是token embedding

ΘsΘs\Theta_{s}Θs​代表softmax layer的参数

biLM利用了biLSTM,biLSTM在前向和后向两个方向上共享了部分权重

对于一个token,ELMo会计算2L+1 个representation(输入的一个token embedding和前向、后向的2L个representation):

其中:

在下游任务中,ELMo将R的所有层压缩成一个向量ELMok=E(Rk;Θe)ELMok=E(Rk;Θe)ELMo_k=E(R_k;Θe)ELMok​=E(Rk​;Θe) ,在最简单的情况下,也可以只使用最后一层E(Rk)=hLMk,LE(Rk)=hk,LLME(R_k)=h^{LM}_{k,L}E(Rk​)=hk,LLM​

其中

可以看出,ELMo是biLM多层输出的线性组合。

在监督NLP任务中使用Elmo

在supervised NLP tasks中使用ELMo, 给定N个token的句子,supervised NLP处理的标准过程的输入是context-independent token词向量xkxkx_kxk​,加入ElMo有两种方式:

直接将ELMo词向量ELMokELMokELMo_kELMok​和普通词向量xkxkx_kxk​ 拼接得到[xk;ELMotaskk][xk;ELMoktask][x_k; ELMo_k^{task}][xk​;ELMoktask​],作为模型的输入。

将ELMo词向量ELMokELMokELMo_kELMok​ 和隐藏层输出hkhkh_khk​ 进行拼接得到[hk;ELMotaskk][hk;ELMoktask][h_k; ELMo_k^{task}][hk​;ELMoktask​]

(一个单词在语境下的表示 就是所有层的加权平均。

在预训练好这个语言模型之后,ELMo就是根据公式来用作词表示,其实就是把这个双向语言模型的每一中间层进行一个求和。最简单的也可以使用最高层的表示来作为ELMo。然后在进行有监督的NLP任务时,可以将ELMo直接当做特征拼接到具体任务模型的词向量输入或者是模型的最高层表示上。)

6.总结

ELMo的假设前提一个词的词向量不应该是固定的,所以在一词多意方面ELMo的效果一定比word2vec要好。

word2vec的学习词向量的过程是通过中心词的上下窗口去学习,学习的范围太小了,而ELMo在学习语言模型的时候是从整个语料库去学习的,而后再通过语言模型生成的词向量就相当于基于整个语料库学习的词向量,更加准确代表一个词的意思。

ELMo还有一个优势,就是它建立语言模型的时候,可以运用非任务的超大语料库去学习,一旦学习好了,可以平行的运用到相似问题。

Bert 是 AutoEncoder 通过上下文来预测中间mask单词,损失函数是ADE的损失函数,不是交叉熵损失。Bert 模型不是基于语言模型的,只是基于ADE。

Elmo 是基于语言模型的。

词向量与词向量拼接_第一节——词向量与ELmo(转)相关推荐

  1. 域名后面加端口号_第一节.外贸网站如何做好域名选择-外贸网站营销建站及推广...

    想要做外贸网站首先就要确定网站域名,对后期网站品牌的推广有着十分重要的作用,那么外贸老船长就详细介绍一下如何做给外贸公司或者企业选择适合他们的域名吧. 1. 选择域名要注意的问题: (1)必须使用国际 ...

  2. 搜索引擎的概念鄂州_第一节 搜索引擎的概念

    第一节 搜索引擎的概念 如上所述,本书的主要内容是介绍搜索引擎的工作原理和实现技术.搜索引擎,在本书指的是一种在Web上应用的软件系统,它以一定的策略在Web上搜集和发现信息,在对信息进行处理和组织后 ...

  3. mysql菜鸟教程面向对象_第一节--面向对象编程

    第一节--面向对象编程 发布时间:2016-06-17 来源: 点击: 次 +------------------------------------------------------------- ...

  4. 欧阳萍经典听口班第四季_第一节:餐厅里_学习笔记

    欧阳萍经典听口班第四季 第一节:餐厅里 主要学习方法 1.echo练口语听力方法总体先听一遍,此时大概率听不懂1.一句一句话的听2.看着字幕在脑子里想一遍本句话3.自己复述本句话4.如有听不懂则反复练 ...

  5. 代驾APP_第一章_项目环境搭建_第一节

    代驾APP_第一章_项目环境搭建 文章目录 代驾APP_第一章_项目环境搭建 1-1 创建根项目 一.创建SpringBoot项目 二.覆盖pom.xml文件 1-2 创建根项目 一.创建公共模块 二 ...

  6. python一节课多久_第一节课 python简介

    标签: 一.python特性概要 1. Python是解释性语言.我们和c比较一下. 2. Python特性总结:字节码.动态.缩进 2.1 字节码 2.2 动态语义 在赋值时确定数据类型 2.3 缩 ...

  7. 机器人守则悖论_第一节:机器人三定律的悖论

    正版?狼 我们经常可以在日常生活中看到一些由电脑控制的工具.在某种程度上,我们有时也把他们称作机器人.在科技日新月异的今天,电脑和机器人的发展几乎可以说是一日千里.也许我们不难想象,在未来的某一天的早 ...

  8. 三元函数的几何图形一般是_第一节 多元函数的基本概念

    多元函数大都由一个数学解析式给出,所以对应法则即由解析式确定,我们重点讨论定义域.在教材p6第二段有如下约定:在一般地讨论用算式表达的多元函数时,就以是这个算是有意义的变元的值所组成的点集为这个多元函 ...

  9. mysql php 入门_第一节 数据库概述_MySQL_php入门教程

    数据库是数据管理的有效技术,是计算机科学的重要分支.随着时代的发展,今天信息资源已经成为一种宝贵的财富.从校务管理系统到电子政务.商务系统,这些社会的方方面面都会产生庞大的数据,管理和使用这些数据成为 ...

最新文章

  1. windows自动更新安装后遗留文件或文件夹的删除
  2. python基础-字典(8)
  3. 高可用集群的脑裂问题
  4. 2 亚马逊_索泰称仅亚马逊渠道就收到2万块RTX 3080显卡订单,无法按时发货
  5. 分布式选举协议:Paxos
  6. 基于JAVA+Swing+MYSQL的宿舍管理系统
  7. android httpclient webview,android – 访问WebView中的http响应头?
  8. 计算机网络原理(04741)第1章:计算机网络概述
  9. Ant Design Upload 文件上传功能
  10. python版武侠小说男女侠姓名生成器
  11. java 日期 纳秒_java – 具有纳秒的字符串日期转换
  12. Android 应用的逆向和审计
  13. Linux后端开发-POSIX标准以及shell编程
  14. C语言——用函数方法判断闰年
  15. Redis删除过期数据的策略概要
  16. Python 语言中有关复数的几个概念
  17. 十年经验建模师!给你3d建模学习的十条铁律,请收藏
  18. 【QT小记】QT中QString与常用字符编码转换
  19. 理财001 理财是人人都需要的基础能力
  20. CF1039B:交互题+二分

热门文章

  1. python代码设置超参数_Python 机器学习:超参数调优
  2. 欢迎来到Jsp编程课时十二——今天实现的目标是。@1将数据库的数据发送到浏览器。@2利用浏览器实现对数据库的增删改查操作。@3理解MVC三层架构的定义。
  3. 深度学习 | pytorch(二)
  4. 入门接口测试——总结笔记
  5. 一个计算机专业学生几年的编程经验汇总
  6. TopLanguage小组讨论精选[四](2007.12-2008.1)
  7. 数据结构——优先级队列(堆)
  8. URL不支持Post的方法——解决方法
  9. C# 快速释放内存的大数组
  10. vue中特殊符号的理解如$