今天给你们介绍一篇2018年提出的论文《Deep contextualized word representations》,在这篇论文中提出了一个很重要的思想ELMo。本人认为ELMo的提出对后面的的GPT和BRET有一个很好的引导和启发的做用。ELMo是一种是基于特征的语言模型,用预训练好的语言模型,生成更好的特征。html
ELMo是一种新型深度语境化词表征,可对词进行复杂特征(如句法和语义)和词在语言语境中的变化进行建模(即对多义词进行建模)。咱们的词向量是深度双向语言模型(biLM)内部状态的函数,在一个大型文本语料库中预训练而成。算法
说到词向量,咱们必定会联想到word2vec,由于在它提出的词向量概念给NLP的发展带来了巨大的提高。而ELMo的主要作法是先训练一个完整的语言模型,再用这个语言模型去处理须要训练的文本,生成相应的词向量,因此在文中一直强调ELMo的模型对同一个字在不一样句子中能生成不一样的词向量。函数
前面也说过ELMo最重要的一点是就是训练语言模型,语言模型的结构以下:学习
他们使用的是一个双向的LSTM语言模型,由一个前向和一个后向语言模型构成,目标函数就是取这两个方向语言模型的最大似然。spa
前向LSTM结构:
\[ p(t_1,t_2,...,t_N) = \prod^N_{k=1}p(t_k|t_1,t_2,...,t_{k-1}) \]code
反向LSTM结构:
\[ p(t_1,t_2,...,t_N) = \prod^N_{k=1}p(t_k|t_{k+1},t_{k+2},...,t_{N}) \]orm
最大似然函数:htm
\[ \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})) \]blog
在预训练好这个语言模型以后,ELMo就是根据公式来用做词表示,其实就是把这个双向语言模型的每一中间层进行一个求和。最简单的也可使用最高层的表示来做为ELMo。而后在进行有监督的NLP任务时,能够将ELMo直接当作特征拼接到具体任务模型的词向量输入或者是模型的最高层表示上。get
你们有想过为何ELMo的效果会比word2vec的效果好?我我的认为有一下几点: