作者:PRATEEK JOSHI
翻译:韩国钧
校对:李 浩
本文约3500字,建议阅读15分钟。
本文将介绍ELMo的原理和它与传统词嵌入的区别,然后通过实践来展示其效果。
简介
我致力于研究自然语言处理(NLP)领域相关问题。每个NLP问题都是一次独特的挑战,同时又反映出人类语言是多么复杂、美丽又绝妙。
但是一个让NLP从业者头疼的问题是机器无法理解语句的真正含义。是的,我指的是自然语言处理中的上下文问题。传统的NLP技术和架构能很好地处理基础任务,但当我们尝试将上下文纳入变量时其效果就会下降。
近18个月以来NLP领域的格局发生了重大变化,诸如Google的BERT和Zalando的Flair等NLP模型已经能够分析语句并掌握上下文中的信息。
ELMo模型
能够理解上下文语境是NLP领域的一项重大突破,这归功于ELMo(Embeddings from Language Models),它是AllenNLP研发的一种最先进的NLP架构。当你读完这篇文章,你会和我一样成为ELMo的忠实粉丝。
在这篇文章中,我们会探索ELMo(嵌入语言模型),并通过python使用它在一个真实的数据集上构建一个令人兴奋的NLP模型。
注:这篇文章假设你熟悉多种word embeddings和LSTM(Long short-term memory)结构,你可以参阅以下文章来了解有关这些专题的更多信息:
An Intuitive Understanding of Word Embeddings
(https://www.analyticsvidhya.com/blog/2017/06/word-embeddings-count-word2veec/?utm_medium=ELMoNLParticle&utm_source=blog )
Essentials of Deep Learning : Introduction to Long Short Term Memory
(https://www.analyticsvidhya.com/blog/2017/12/fundamentals-of-deep-learning-introduction-to-lstm/?utm_medium=ELMoNLParticle&utm_source=blog )
目录
1. 什么是ELMo?
2. 理解ELMo工作原理
3. ELMo与其他词嵌入的区别是什么?
4. 在python中应用ELMo模型进行文本分类:
理解问题陈述
数据集介绍
导入库
导入和检查数据
文本清洗和预处理
简要介绍TensorFlow Hub
准备ELMo模型向量
构建模型并评估
5. 我们还能用ELMo做什么?
6. 结语
1. 什么是ELMo?
我们提到的ELMo并不是《芝麻街》(Sesame Street)中的角色,这也是一个体现了上下文语境的重要性的典型例子。
ELMo是一种在词向量(vector)或词嵌入(embedding)中表示词汇的新方法。这些词嵌入方法在下列几种NLP问题中能有效生成最先进(SOAT)的结果:
全球的自然语言处理学家都开始在学术或应用领域的NLP问题中使用ELMo。建议你查看ELMo的初始论文(https://arxiv.org/pdf/1802.05365.pdf)。通常我不会建议大家去读学术论文因为它们往往又长又复杂,但这篇论文不同,它很好地解释了ELMo原理和设计过程。
2. 理解ELMo工作原理
在实践之前让我们需要先直观了解一下ELMo是如何运作的。为什么说这一步很重要?
试想如下场景:你已经成功地从GitHub上下载了ELMo的python代码并在自己的文本数据集上构建了模型,但只得到了一般的结果,所以你需要改进。如果你不理解ELMo的架构你将如何改进呢?如果没有研究过又怎么知道需要调整哪些参数呢?
这种思路适用于其他所有机器学习算法,你不需要了解它们的推导过程但必须对它们有足够的认识来玩转和改进你的模型。
现在,让我们回到ELMo的工作原理。
正如我之前提到的,ELMo的词向量是在双层双向语言模型(two-layer bidirectional language model , biLM)上计算的。这种模型由两层叠在一起,每层都有前向(forward pass)和后向(backward pass)两种迭代。
上图中的结构使用字符级卷积神经网络(convolutional neural network, CNN)来将文本中的词转换成原始词向量(raw word vector)
将这些原始词向量输入双向语言模型中第一层
前向迭代中包含了该词以及该词之前的一些词汇或语境的信息
后向迭代中包含了该词之后的信息
这两种迭代的信息组成了中间词向量(intermediate word vector)
这些中间词向量被输入到模型的下一层
最终表示(ELMo)就是原始词向量和两个中间词向量