从字符中生成嵌入:用于开放词表示的组合字符模型 Finding Function in Form:Compositional Character Models for Open Vocabulary Word Representation
本文是卡耐基梅隆大学Wang Ling在2015年EMNLP发表的,提出新的从字符形式学习语义语法等复杂形式结构学得词向量的方法。单词间不该相互独立,形式一致性会导致功能一致性,本文通过双向LSTM学得这种一致性。在语言模型任务和词性标注任务(POS)均取得不错的效果。
文章目录
背景知识
(一)开放词
即任意大小词表,不需要提前定义词表,通过字符生成向量,不会有unk。(unk即对未出现在训练集的词(OOV,out of Vocabulary)替换为unk字符,unknown)
(二)词嵌入的缺陷
1、词嵌入方法里每个词有自己的词向量,即认为词之间是相互独立的,但显然物质的形式一致性会导致功能一致性,形态丰富的语言中这一点也相当明显。
可以这样理解:我们虽然可以推导big-bigger=strong-stronger,但是给出big词向量,在词嵌入模型里我们无法自动推断bigger的词向量。
2、词表太大时存储所有词词向量不现实。即使形态不丰富的英语里,这也是相当庞大的工作,尤其网络舆论等有噪音的数据里。
3、词嵌入因为词表太大,会把大写转为小写,即不保存大小写信息。
(三)双向LSTM
这里不做循环神经网络和LSTM介绍,请自行查看相关知识。
有些时候预测可能需要由前面若干输入和后面若干输入共同决定,而非像LSTM假设的仅由前面的若干输入决定,这样会更加准确。所以出现了双向循环神经网络,结构如下:
(四)词簇表示
词簇是最小的语义构成单元,例如compressor,就可分为com、press、or。缺点是需要相当好的词簇分析器,尤其是对于那些难以很好划分词簇的词还有意义不同的例如lesson、lessen和coarse、course——course和lesson同义但形式相近的意思却不一样。
这也正是使用LSTM来解决这个学习问题的原因。
C2W模型
我们先小小总结一下:
这是使用组合字符、双向LSTM生成词表示的模型,所以参数主要分为两部分:字符映射为向量的参数、LSTM的参数。参数量相对之前的词向量法大大减少,但在词性标注等任务性能更好,尤其在形态越丰富的语言上这个优势越明显。
对于英语而言,首先生成字符表C,里面包括大写字母、小写字母、数字、标点符号,输入词
w
w
w就会分解为
C
1
,
C
2
,
.
.
.
,
C
i
,
.
.
.
,
C
m
C_1,C2,...,C_i,...,C_m
C1,C2,...,Ci,...,Cm,m就是词
w
w
w的长度。对于每个
C
i
C_i
Ci都转换为这M个字符的表的one-hot表示。映射矩阵大小就是
d
C
∗
∣
C
∣
d_C*|C|
dC∗∣C∣,即embedding维度大小乘字符表大小。映射后表示为
e
c
i
=
P
c
∗
I
c
i
e_{c_i}=P_c*I_{c_i}
eci=Pc∗Ici,
I
I
I是单位矩阵。然后通过LSTM得到前向
s
m
f
s^f_m
smf,和后向输出
s
0
b
s_0^b
s0b,线性组合得到词表示
e
w
c
=
W
f
s
m
f
+
W
b
s
0
b
+
b
d
e_w^c=W^fs_m^f+W^bs_0^b+b_d
ewc=Wfsmf+Wbs0b+bd,b是偏执项,前向后向LSTM会得到各自的权重矩阵W。
例如上面模型图里,模型把cats每个字符映射成向量然后传入双向LSTM,正向第一时间步从c开始输入,反向第一时间步从s开始输入,最后把正向和反向的最后一个隐藏输出线性组合为cats的词表示。
显然,这样的方法远比词向量的方法速度慢。词向量法只需找出词在词表的位置就可以得到词表示,字符嵌入法则需要找到字符表示再经过双向LSTM找到词表示,计算复杂度很高。
我们通过缓存可以缓解这个问题,预先生成所有词向量存储起来就可以在使用的时候获得和词向量法一样的速度。但这显然很吃存储资源,所以只缓存和词向量法一样大的词向量,获得差不多的使用效率。训练时,每个batch更新一次权重,组合时更新一次梯度,所以选择大的batch可以降低计算开销。
另外,测试阶段可能出现OOV词,而C2W模型训练显然是没有OOV词的,所以为了保证训练测试一致性,训练时虽然仍给低频词映射词向量,但以0.5概率预测其为OOV词。
适用场景
1、需要用字符的场景。序列标注任务如词性标注任务(POS)、命名实体识别任务(NER)、语义理解任务。
2、OOV词多的任务。对抗样本任务(如网络评论样本中错词较多,对抗生成和正确样本相似的词表示)。
字符向量法在捕捉语法、语义关系方面还是不如词向量法强,现在主要是词向量方法和字符向量方法结合使用。