1. 语言模型

2. Attention Is All You Need(Transformer)算法原理解析

3. ELMo算法原理解析

4. OpenAI GPT算法原理解析

5. BERT算法原理解析

6. 从Encoder-Decoder(Seq2Seq)理解Attention的本质

1. 前言

今天给大家介绍一篇2018年提出的论文《Deep contextualized word representations》,在这篇论文中提出了一个很重要的思想ELMo。本人认为ELMo的提出对后面的的GPT和BRET有一个很好的引导和启发的作用。ELMo是一种是基于特征的语言模型,用预训练好的语言模型,生成更好的特征。

2. ELMo模型介绍

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

说到词向量,我们一定会联想到word2vec,因为在它提出的词向量概念给NLP的发展带来了巨大的提升。而ELMo的主要做法是先训练一个完整的语言模型,再用这个语言模型去处理需要训练的文本,生成相应的词向量,所以在文中一直强调ELMo的模型对同一个字在不同句子中能生成不同的词向量。

3. ELMo原理介绍

3.1 ELMo的预训练

前面也说过ELMo最重要的一点是就是训练语言模型,语言模型的结构如下:

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

前向LSTM结构:
\[
p(t_1,t_2,...,t_N) = \prod^N_{k=1}p(t_k|t_1,t_2,...,t_{k-1})
\]

反向LSTM结构:
\[
p(t_1,t_2,...,t_N) = \prod^N_{k=1}p(t_k|t_{k+1},t_{k+2},...,t_{N})
\]

最大似然函数:

\[
\sum_{k=1}^N(logp(t_k|t_1,t_2,...,t_{k-1}) + logp(t_k|t_{k+1},t_{k+2},...,t_{N}))
\]

3.2 使用语言模型

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

4. 总结

大家有想过为什么ELMo的效果会比word2vec的效果好?我个人认为有一下几点:

  1. ELMo的假设前提一个词的词向量不应该是固定的,所以在一词多意方面ELMo的效果一定比word2vec要好。
  2. word2vec的学习词向量的过程是通过中心词的上下窗口去学习,学习的范围太小了,而ELMo在学习语言模型的时候是从整个语料库去学习的,而后再通过语言模型生成的词向量就相当于基于整个语料库学习的词向量,更加准确代表一个词的意思。
  3. ELMo还有一个优势,就是它建立语言模型的时候,可以运用非任务的超大语料库去学习,一旦学习好了,可以平行的运用到相似问题。

最新文章

  1. java面试题——集合框架
  2. 【Python】调用WPS V9 API,实现Word转PDF
  3. 自定义组件 -- android联系人
  4. 在web.xml中配置error-page
  5. 【网络收集】获取JavaScript 的时间使用内置的Date函数完成
  6. A Game of Thrones(9) - Tyrion
  7. js中json的添加和指定位置的删除
  8. HTML5培训入门基础知识了解CSS3 3D属性
  9. Java包装类介绍与类型之间相互转换
  10. Mac/Linux 常用命令
  11. vivado和modelsim联合调试仿真
  12. 获取js连接参数js_args
  13. Instrumentation 两种方法 premain Agent
  14. Servlet—生命周期
  15. c#逐行分元素读取记事本txt数据写进数据库
  16. Video如何不自动全屏播放?
  17. ChannelSftp.chmod方法赋权文件夹
  18. 关于Array的操作
  19. 【Hive】窗口函数
  20. derby_学习_00_资源帖

热门文章

  1. 使用SQL逆向生成PDM文件
  2. .NET Core中使用Docker
  3. 【随笔】借鉴 & KPI式设计
  4. 多臂机测试, AB测试
  5. 判断socket连接是否失效
  6. eclipse更改workspace中出现The superclass "javax.servlet.http.HttpServlet" was not found on the Java----问题》》
  7. php null
  8. CentOS 7安装Ansible
  9. How to change the implementation (detour) of an externally declared function
  10. Android -- 再来一发Notification