边读边参考别人的理解,边加入自己的理解。
一.标题
Chinese NER Using Lattice LSTM.Yue Zhang and Jie Yang.ACL2018
二.文章
摘要
We investigate a lattice-structured LSTM model for Chinese NER, which encodes a sequence of input characters as well as all potential words that match a lexicon.Compared with character-based methods,
our model explicitly leverages word and word sequence information. Compared with word-based methods, lattice LSTM does not suffer from segmentation errors.Gated recurrent cells allow our model to choose the most relevant characters and words from a sentence for better NER results.Experiments on various datasets show that lattice LSTM outperforms both word-based and character-based LSTM
baselines, achieving the best results.
提出了一种用于中文NER的LSTM的格子模型,与传统使用字向量的模型相比,本文提出的模型显式地利用了字序列之间的关系。与传统使用词向量的模型相比,本文提出的模型能够很好的避免分词错误带来的影响。
Lattice LSTM能够将字符级别序列信息和该序列对应的词信息同时编码供模型自动取用。相较于字粒度(字符级)的编码,Lattice LSTM加入了词信息,丰富了语义表达;相较于词粒度的编码,Lattice LSTM可以避免分词错误带来的影响。
介绍:
传统方法一般把NER看作是一个序列标记问题,同时预测序列中的实体边界以及实体所属的类别。中文中基于字向量的模型问题:因为如果单纯采用字向量的话会导致我们拆开了很多并不应该拆开的词语,从而丢失了它们本身的内在信息(比如“上海”这个词如果拆成字向量就成了“上”和“海”,这两个字的单独含义明显与它们组合起来的词的含义大相庭径)。为了解决这个问题,本文提出了一种新型的格子结构(lattice structure),它能够将单词本身的含义加入基于字向量的模型中(比如LSTM-CRF)。
相当于想方法融合了字符向量和词向量。如上图所示,格子结构最终会包含一个我们自动学出来的词典里的词(比如图中的“南京”,“市长”,“长江”,“大桥”,“南京市”,“长江大桥”),这样一来,我们的模型就会避免一些使用字向量造成的歧义,比如如果按照一个个字来组合的话还能组成“南京”,“市长”,“江大桥”这样的组合,由于“江大桥”不在词格中,我们的模型就很好的避免了这种歧义。这个词格我的理解应该是
下图所示的格子看上去有很多,说明路径个数很多,所以就要利用模型来控制从头到尾的信息流。(下面会说)模型中有一些红色的 Cell,他们是句子中潜在词汇产生的信息,同主干 LSTM 相应的 Cell 连接起来就构成了类似于网格的结构,也就是题目中的 Lattice。
模型
0.lstm
基本的 LSTM 结构中,每个 Cell 含有输入门、遗忘门和输出门,它们都是0~1的小数(默认激活函数为 Sigmoid),根据当前输入和前一个 Cell 的输出计算得到的。还有一个核心元素就是 Cell State,也就是最上面那条从左到右的箭头,它从头走到尾,记录整个序列的信息。输入门决定当前输入有多少加入 Cell State;遗忘门决定 Cell State要保留多少信息;输出门决定更新后的 Cell State 有多少可以输出。
1、 cell 的状态是一个向量,是有多个值的。
2、 上一次的状态 h(t-1)是怎么和下一次的输入 x(t) 结合(concat)起来的,concat, 直白的说就是把二者直接拼起来,比如 x是28位的向量,h(t-1)是128位的,那么拼起来就是156位的向量。
3、 cell 的权重是共享的,这是指这张图片上有三个绿色的大框,代表三个 cell 对吧,但是实际上,它只是代表了一个 cell 在不同时序时候的状态,所有的数据只会通过一个 cell,然后不断更新它的权重。
4、那么一层的 LSTM 的参数有多少个?根据第 3 点的说明,我们知道参数的数量是由 cell 的数量决定的,这里只有一个 cell,所以参数的数量就是这个 cell 里面用到的参数个数。假设 num_units 是128,输入是28位的,那么根据上面的第 2 点,可以得到,四个小黄框的参数一共有 (128+28)(1284),也就是156 * 512,可以看看 TensorFlow 的最简单的 LSTM 的案例,中间层的参数就是这样,不过还要加上输出的时候的激活函数的参数,假设是10个类的话,就是128*10的 W 参数和10个bias 参数5、cell 最上面的一条线的状态即 s(t) 代表了长时记忆,而下面的 h(t)则代表了工作记忆或短时记忆暂时这么多。
c
j
c
~
\tilde{c_j^c}
cjc~是输入状态值。
c
j
c
{c_j^c}
cjc是新状态值新的state值,
h
j
c
{h_j^c}
hjc是输出。
x
j
c
{x_j^c}
xjc是当前的输入,
h
j
−
1
c
{h_{j-1}^c}
hj−1c则表示上一时刻的输出。
其中每一个字
c
j
c_j
cj被表示为:
隐含层的总输出表示为:
上面的那个论文中的公式其实拆开来就是下面这个公式。
分割线===========================================================分割线
模型基准取自Lample G , Ballesteros M , Subramanian S , et al. Neural Architectures for Named Entity Recognition[J]. 2016.
首先,我们以字为基本单位定义一个输入句子s为,
c
1
c_1
c1表示第1个字符:
s又可以用词为基本单位被表示为,
w
1
w_1
w1表示第一个词:
我们设
t
(
i
,
k
)
t(i,k)
t(i,k)为句子的第i个词的第k个字在句子中的位置,比如“南京市,长江大桥”这句话中的“大”字,我们就有
t
(
2
,
3
)
=
7
t(2,3)=7
t(2,3)=7,即“大”这个字是句子第2个词的第3个字,并且它在句子中的位置为第7个字。
1.基于字向量的模型
其中每一个字
c
j
c_j
cj被表示为:
隐含层的总输出就可以表示为:
就是前后拼接起来。
(1)Char + bichar
就是字符的embedding和二元字符信息的embedding拼接
(2)Char + softword
就是将分词的embedding和字符embedding拼接,我估计意思是将cj按照索引去找一个词表中的词,然后取出这个词作为一个embedding,但是问题是一个字能组成多个词。
2.基于词向量的模型
和上面一样,不同的是把词作为一个单位。
(1)Word + char LSTM
普通的bilstm获得
(2)Word + char LSTM“
用两个singlelstm去获得上面的h。
(4)Word + char CNN
就是普通cnn字符,括号里面是卷积层运算,max是最大池化。
3.词格模型(Lattice Model)
比如“桥”字,句子中潜在的以它结尾的词汇有:“长江大桥”和“大桥”。因此,当前字符 Cell 除了“桥“字以外,还要考虑这两个词汇。从图上看就是两个红色 Cell 引出的两个绿色箭头,代表这两个词汇的信息。
文章中对于词汇信息的算法如下图公式所示,每个词汇的红色 Cell 类似 LSTM Cell 且相互独立。因为序列标记是以字符为级别,所以这个 Cell 中没有输出门,Cell State 即为词汇信息,所以从左到右只有一条线。
基本的lstm模型见(0)lstm
和基本的lstm不一样,计算
c
j
c
c_j^c
cjc需要考虑在句子中的字典序列
w
b
,
e
d
w_b,_e^d
wb,ed,它在每个序列中被表示成如下:e就是查lockup后的embebding。
c
b
,
e
w
c_b,_e^w
cb,ew被用来去表示从句子开始的循环状态recurrent state
X
b
,
e
w
{X_{b,e}}^w
Xb,ew,
c
b
,
e
w
c_b,_e^w
cb,ew是新状态值新的state值
c
b
,
e
w
c_b,_e^w
cb,ew由下面公式计算,这个公式要记住就是要拆开来,然后圆圈点是对应元素相乘。
c
b
e
w
{c_{be}}^w
cbew就是字符b到e的word。
c
b
c
c_b^c
cbc就是字符b开始字符。
由于标注只是在字级进行,所以word cell就不需要输出门。
下面是图2
c
j
c
c_j^c
cjc由上面变成了这样:
就是公式15中的a是由i门值经过下面归一化得到的。
就是公式11
实验
主要就是预训练得到了字符和词的embedding
结论
与其他模型相比,lattice具有更强的鲁棒性,其准确度也随着句子的长度增加而降低,原因应该是随着句子长度的增加lattice中的word combination的数量有指数级的增加;
lattice方法完全不依赖word segmentation ,由于它可以自由选择词表中的词,它可以更有效的利用词信息,因为他自由的选择了词表中的词。