[论文笔记] [中文NER] Chinese NER Using Lattice LSTM

这篇论文的相关笔记还挺多的,但是第三章的模型部分公式比较多,看着看着就糊涂了,所以自己做了下笔记,并且尝试把Lattice LSTM部分用图画出来,方便自己理解。

3. 模型部分

主要记录不同模型的输入向量,以式(0)为例:
(0)1234567 \frac{南}{1}\frac{京}{2}\frac{市}{3} | \frac{长}{4}\frac{江}{5}\frac{大}{6}\frac{桥}{7} \tag{0}

  • 若以对句子进行分割,则句子表达如下:
    s=c1,c2,,m s= c_1, c_2, \dots, _m
    其中cjc_j表示句中第jj个字。
  • 若以对句子进行分割,则句子表达如下:
    s=w1,w2,,wm s= w_1, w_2, \dots, w_m
    其中wiw_i表示句中第ii个词。
  • 对于某个字,可以用t(i,k)=jt(i,k)=j表示第jj个字位于句子中第ii个词的第kk位,因此对于式(0)中的4t(2,1)=4\frac{长}{4},t(2,1) = 4

下文中的公式编号对应原文中的编号,所以不是连续的。

3.1 Character-Based Model(基于字)

  • Char
    基于单字的模型输入向量如式(1):
    (1)xje=ee(cj) \bold{x}_j^e=\bold{e}^e(c_j) \tag{1}
    其中cjc_j表示每个字,ee\bold{e}^e表示单字的embedding。
  • Char + Bichar
    基于单字两字词的模型输入向量如式(3):
    (3)xjc=[ec(cj);eb(cj,cj+1)] \bold{x}_j^c=[\bold{e}^c(c_j);\bold{e}^b(c_j,c_{j+1})] \tag{3}
    其中eb\bold{e}^b两字词的embedding,分号表示连接两部分的向量。
  • Char + softword
    基于单字分词的模型输入向量如式(4):
    (4)xjc=[ec(cj);es(seg(cj))] \bold{x}_j^c=[\bold{e}^c(c_j);\bold{e}^s(seg(c_j))] \tag{4}
    其中es\bold{e}^s表示分词后的词embedding。

3.2 Word-Based Model(基于词)

  • Word
    基于的模型输入向量如式(6):
    (6)xiw=ew(wi) \bold{x}_i^w=\bold{e}^w(w_i) \tag{6}
    其中wiw_i表示每个词,ew\bold{e}^w表示词的embedding。

  • Integrating character representations
    基于加上词所包含的字的模型输入向量如式(7):
    (7)xiw=[ew(wi);xic] \bold{x}_i^w=[\bold{e}^w(w_i);\bold{x}_i^c] \tag{7}
    其中xic\bold{x}_i^c表示词wiw_i所包含的字对应的向量。

  • Word + char LSTM

  • Word + char LSTM’

  • Word + char CNN
    (9)xic=maxt(i,1)jt(i,len(i))(WCNNT[e(cjke13)e(cjke13)]+bCNN) \bold{x}_i^c= \mathop{max}\limits_{t(i,1)\leq j \leq t(i, len(i))} (\bold{W}_{CNN}^T \begin{bmatrix} \bold{e}(c_{j-\frac{ke-1}{3}})\\ \dots \\ \bold{e}(c_{j-\frac{ke-1}{3}}) \tag{9} \end{bmatrix} +\bold{b}_{CNN})
    其中ke=3ke=3表示kernal size,maxmax表示max pooling。

3.3 Lattice Model (文章所提出的模型)

  • 模型整体如下:
    [论文笔记] [中文NER] Chinese NER Using Lattice LSTM

  • 字LSTM部分(整体图中c加蓝色圈的部分)结构如下图及式(11):
    [论文笔记] [中文NER] Chinese NER Using Lattice LSTM
    (11)[ijcojcfjcc~jc]=[σσσtanh](WcT[xjchj1c]+bc) \begin{bmatrix} \bold{i}_j^c\\\bold{o}_j^c\\\bold{f}_j^c\\\bold{\widetilde{c}}_j^c \end{bmatrix} =\begin{bmatrix} \sigma\\\sigma\\\sigma\\tanh \end{bmatrix} (\bold{W}^{c^T} \begin{bmatrix} \bold{x}_j^c\\\bold{h}_{j-1}^c \end{bmatrix}+\bold{b}^c)\\ \tag{11}
    cjc=fjccj1c+ijcc~jchjc=ojctanh(cjc) \bold{c}_j^c=\bold{f}_j^c\odot\bold{c}_{j-1}^c+\bold{i}_j^c\odot\widetilde{c}_j^c\\ \bold{h}_j^c=\bold{o}_j^c\odot tanh(\bold{c}_j^c)
    其中:
    xjc=ec(cj)\bold{x}_j^c=\bold{e}^c(c_j)表示词所对应的向量,即LSTM的输入向量(input vectorinput \ vector);
    hj1c\bold{h}_{j-1}^c表示前一个字的LSTM cell的输出;
    cj1c\bold{c}_{j-1}^c表示从前一个字和该字相关的词传过来的细胞状态;
    ijc,ojc,fjc\bold{i}_j^c, \bold{o}_j^c,\bold{f}_j^c分别表示输入门(input gateinput\ gate)、输出门(output gateoutput\ gate)和遗忘门(forget gateforget\ gate);
    σ,tanh\sigma, tanh分别表示**函数sigmod和tanh;
    \odot表示矩阵点积。

  • 词LSTM部分(整体图中红色阴影部分)结构如下图及式(12)(13):
    [论文笔记] [中文NER] Chinese NER Using Lattice LSTM
    (12)xb,ew=ew(wb,ed) \bold{x}_{b,e}^w=\bold{e}^w(w_{b,e}^d) \tag{12}
    (13)[ib,ewfb,ewc~b,ew]=[σσtanh](WwT[xb,ewhbc]+bw)cb,ew=fb,ewcbc+ib,ewc~b,ew \begin{bmatrix} \bold{i}_{b,e}^w \\ \bold{f}_{b,e}^w \\ \bold{\widetilde{c}}_{b,e}^w \end{bmatrix}= \begin{bmatrix} \sigma\\ \sigma \\ tanh \end{bmatrix} (\bold{W}^{w^T} \begin{bmatrix} \bold{x}_{b,e}^w \\ \bold{h}_b^c \end{bmatrix}+\bold{b}^w ) \tag{13}\\ \bold{c}_{b,e}^w=\bold{f}_{b,e}^w\odot\bold{c}_b^c+\bold{i}_{b,e}^w\odot\bold{\widetilde{c}}_{b,e}^w
    其中:
    wb,edw_{b,e}^d表示从b开始到e结束的词的子序列,如w1,2dw_{1,2}^d=南京、w6,7dw_{6,7}^d=大桥;
    hbc\bold{h}_b^c表示第bb个字的LSTM cell的输出;
    其他变量解释同上。
    可以发现词LSTM细胞中没有o(output gate)\bold{o}(output\ gate),这是因为词LSTM之间没有联系,每个词LSTM的细胞状态都传给该词最后一个字的字LSTM细胞。

  • 词与字的关联
    整体图中每个字细胞都有两种类型的输入,黑色线表示从前一个字传过来的细胞状态,绿色线表示从以该字结尾的所有词传过来的细胞状态,不同的输入采用加权平均的方法传入,所以cjc\bold{c}_j^c不仅包含与第jj个字符有关的信息,还包含以第jj个字符结尾的词的信息,具体如式(15)(16):
    (15)cjc=b{bwb,jdD}αb,jccb,jw+αjcc~jc \bold{c}_j^c= \mathop{\sum}\limits_{b\in \{ b'|w_{b',j}^d \in \Bbb{D} \}} \boldsymbol{\alpha}_{b,j}^c\odot\bold{c}_{b,j}^w+ \boldsymbol{\alpha}_j^c\odot\bold{\widetilde{c}}_j^c \tag{15}
    其中:
    (16)αb,jc=exp(ib,jc)exp(ijc)+b{bwb,jdD}exp(ib,jc)αjc=exp(ijc)exp(ijc)+b{bwb,jdD}exp(ib,jc) \boldsymbol{\alpha}_{b,j}^c= \frac {exp(\bold{i}_{b,j}^c)} {exp(\bold{i}_j^c) + \sum_{b\in \{ b'|w_{b',j}^d \in \Bbb{D} \}}exp(\bold{i}_{b',j}^c)} \tag{16}\\ \boldsymbol{\alpha}_j^c= \frac {exp(\bold{i}_{j}^c)} {exp(\bold{i}_j^c) + \sum_{b\in \{ b'|w_{b',j}^d \in \Bbb{D} \}}exp(\bold{i}_{b',j}^c)}
    举个例子,对于c7c\bold{c}_7^c,包含了x7c\bold{x}_7^c(桥)、c6,7w\bold{c}_{6,7}^w(大桥)、c4,7w\bold{c}_{4,7}^w(长江大桥)的信息,所以:
    c7c=α6,7cc6,7c+α4,7cc4,7c+α7cc~7c \bold{c}_7^c=\boldsymbol{\alpha}_{6,7}^c\odot\bold{c}_{6,7}^c+\boldsymbol{\alpha}_{4,7}^c\odot\bold{c}_{4,7}^c+\boldsymbol{\alpha}_7^c\odot\bold{\widetilde{c}}_7^c
    其中:
    α6,7c=exp(i6,7c)exp(i7c)+exp(i6,7c)+exp(i4,7c)α4,7c=exp(i4,7c)exp(i7c)+exp(i6,7c)+exp(i4,7c)α7c=exp(i7c)exp(i7c)+exp(i6,7c)+exp(i4,7c) \boldsymbol{\alpha}_{6,7}^c= \frac {exp(\bold{i}_{6,7}^c)} {exp(\bold{i}_7^c) + exp(\bold{i}_{6,7}^c) + exp(\bold{i}_{4,7}^c)}\\ \boldsymbol{\alpha}_{4,7}^c= \frac {exp(\bold{i}_{4,7}^c)} {exp(\bold{i}_7^c) + exp(\bold{i}_{6,7}^c) + exp(\bold{i}_{4,7}^c)}\\ \boldsymbol{\alpha}_7^c= \frac {exp(\bold{i}_{7}^c)} {exp(\bold{i}_7^c) + exp(\bold{i}_{6,7}^c) + exp(\bold{i}_{4,7}^c)}

注:虽然模型看懂了,但对于怎么送变量进去思路还是有点混乱,等跟着作者github上的代码实现以后再来完善笔记。