论文:《Deep contextualized word representations》
我们先简单回顾下word2vector。我们想解的问题的是:如何将一个词语用向量来表示?
首先想到的是使用one-hot来表示,如我们有一个词典:【a,apple,…,zoo,】,词典有n个词语,那么就用n维向量表示某个词。向量中词语下标位的值为1,其余为0:
该方法的主要缺点为:
语言模型简单可以理解是某一句话是合理的概率模型。如给出“I want a glass of orange __”,通过语言模型我们可能得到空格处最可能的单词为“juice”。基于神经网络结构的语言模型如下所示:
Neural Architecture of language model 非常重,一个比较轻巧训练词向量的方式就是最流行的word2vector:
word2vector的显而易见的缺点是没考虑上下文含义。比如说“我 用 苹果 手机 上网 买了 一箱 苹果”,这里的两个“苹果”我们从词向量矩阵中lookup出来的是相同的向量,但是显然这两个苹果的含义的不同的。这个问题之前的解法有如,训练多个词向量矩阵,可参阅《improving word representations via global context and multiple word prototypes》。但是,这个方法存在比较大我问题是,如何确定一个词有多少种意思(多少个矩阵)?如何更好的确定选哪个词向量的矩阵?
ELMo 借鉴CV中低、中、高特征的表示,如图:
ELMo用多层的BiLSTM语言模型,也想训练出多层次的文本表示:
可认为,低层特征表示是词语级别的特征,中层特征表示是句法级别的特征、高层特征表示是语义级别的特征。
其中:h0=[x,x]h_0 =[x,x]h0=[x,x],hl=[hl→,hl←]h_l=[\stackrel{\rightarrow}{h_l},\stackrel{\leftarrow}{h_l}]hl=[hl→,hl←]
其中:sss为各层表示的权重,γ\gammaγ为改次任务的权重。
如下表所示,ELMo能非常好的找到相同语境含义的“play”: