Motivation
一个好的词向量模型应能够:
- 反映出语义和语法的复杂特征
- 反映出不同上下文
多层LSTM的好处:
可以刻画不同的语义信息,不同的输出适用于不同的任务。higher-level LSTM可以捕捉上下文独立的语义信息,适合做有监督的词义消歧任务;lower-level LSTM可以捕捉句法信息,适合做词性标注。
这篇文章主要是用pretrained bidirectional language model来学习你所需任务中的词向量,这样做的好处是现在所用的词向量是有你任务中语料的上下文信息的。拿word2vec来说,原来的词向量都是在特定语料上直接训练的,你要做啥任务就直接把词向量搬过来做任务了,最多训练的时候fine-tune一下,基本很少训练,也学不到特定环境中的语义信息,特别是这篇文章中指出的一词多义。因此就有了ELMo(这个小名比较好记,也比较形象)。
ELMo: Embeddings from Language Models
ELMo word representations are functions of the entire input sentence.
Bidirectional language models
给定一个句子
t
1
,
t
2
,
⋯
 
,
t
N
t_1,t_2,\cdots,t_N
t1,t2,⋯,tN ,前向语言模型:
p
(
t
1
,
t
2
,
⋯
 
,
t
N
)
=
∏
k
=
1
N
p
(
t
k
∣
(
t
1
,
t
2
,
⋯
 
,
t
k
−
1
)
p(t_1,t_2,\cdots,t_N)=\prod_{k=1}^{N}p(t_k|(t_1,t_2,\cdots,t_{k-1})
p(t1,t2,⋯,tN)=k=1∏Np(tk∣(t1,t2,⋯,tk−1)
x
k
L
M
x_k^{LM}
xkLM :上角标LM说明是language model,
k
k
k 表示是第
k
k
k 个词,结合一下就是第
k
k
k 个词在language model里的表示。通过token embeddings或者CNN over characters获得。
h → k , j L M \overrightarrow{h}_{k,j}^{LM} hk,jLM : j j j 表示LSTM layers的第 j j j 层。 h → k , N L M \overrightarrow{h}_{k,N}^{LM} hk,NLM 即顶层的输出,输入到softmax layer里就可以用来预测 t k + 1 t_{k+1} tk+1.
类似地,后向语言模型:
p
(
t
1
,
t
2
,
⋯
 
,
t
N
)
=
∏
k
=
1
N
p
(
t
k
∣
(
t
k
+
1
,
t
k
+
2
,
⋯
 
,
t
N
)
p(t_1,t_2,\cdots,t_N)=\prod_{k=1}^{N}p(t_k|(t_{k+1},t_{k+2},\cdots,t_{N})
p(t1,t2,⋯,tN)=k=1∏Np(tk∣(tk+1,tk+2,⋯,tN)
biLM是前向和后向语言模型的结合,公式是最大化前向和后向对数似然函数:
∑
k
=
1
N
(
log
p
(
t
k
∣
(
t
1
,
t
2
,
⋯
 
,
t
k
−
1
;
Θ
x
,
Θ
→
L
S
T
M
,
Θ
s
)
+
log
p
(
t
k
∣
(
t
k
+
1
,
t
k
+
2
,
⋯
 
,
t
N
;
Θ
x
,
Θ
←
L
S
T
M
,
Θ
s
)
)
\sum_{k=1}^N(\log p(t_k|(t_1,t_2,\cdots,t_{k-1};\Theta_x,\overrightarrow{\Theta}_{LSTM},\Theta_s)+\log p(t_k|(t_{k+1},t_{k+2},\cdots,t_{N};\Theta_x,\overleftarrow{\Theta}_{LSTM},\Theta_s))
k=1∑N(logp(tk∣(t1,t2,⋯,tk−1;Θx,ΘLSTM,Θs)+logp(tk∣(tk+1,tk+2,⋯,tN;Θx,ΘLSTM,Θs))
其中
Θ
x
\Theta_x
Θx 是token representation的参数,
Θ
s
\Theta_s
Θs 是softmax layer的参数,
Θ
→
L
S
T
M
\overrightarrow{\Theta}_{LSTM}
ΘLSTM 和
Θ
←
L
S
T
M
\overleftarrow{\Theta}_{LSTM}
ΘLSTM 分别是前向和后向模型的参数。前向和后向参数是部分共享,不是完全独立的。