博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
论文笔记 | Simplify the Usage of Lexicon in Chinese NER
阅读量:4290 次
发布时间:2019-05-27

本文共 6728 字,大约阅读时间需要 22 分钟。


作者:刘锁阵

单位:燕山大学


论文地址:https://www.aclweb.org/anthology/2020.acl-main.528.pdf

代码地址:https://github.com/v-mipeng/LexiconAugmentedNER

文章目录

背景介绍

Lattice-LSTM 在多个中文NER数据集上取得了新的基准测试结果。然而,Lattice-LSTM的模型比较复杂限制了其在工业界的应用(需要实现实时NER响应)。

在本篇工作中,作者提出了一个简单但是有效的方法来将单词词典信息合并到字符表示中。对四个中文NER数据集的基准测试表明,该方法的推理速度比SOTA方法快6.15倍,而且性能更高。实验结果还表明,该方法可能很容易地与预训练模型BERT相结合

简单介绍两个相关的工作

Softword特征

Softword技术最初被用于合并分词信息到下游任务中。它通过嵌入对应的分词标签来增强字符表示:

x j c ← [ x j c ; e s e g ( s e g ( c j ) ) ] (1) x_j^c \leftarrow [x_j^c; e^{seg}(seg(c_j))] \tag{1} xjc[xjc;eseg(seg(cj))](1)
s e g ( c j ) ∈ y s e g seg(c_j) \in \mathcal{y}_{seg} seg(cj)yseg表示由词分割器预测的字符 c j c_j cj的分词标签.
e s e g e^{seg} eseg表示将分词标签嵌入到查找表中,通常 y s e g = { B , M , E , S } y_{seg} = \{B, M, E, S\} yseg={
B,M,E,S}
.(Begin, Middle, End, Single)

Lattice-LSTM

Lattice-LSTM将词库信息整合到基于字符的神经NER模型中。相关内容此处不再过多赘述了,网上已有很多分析文章。

模型设计

作者提出了一个方法 S o f t L e x i c o n SoftLexicon SoftLexicon:通过简单地调整NER模型的字符表示层来引入词典信息。整个架构如图一所示:

  • 首先,将输入序列中的每个字符映射到一个dense vector中。
  • 接下来,构造 S o f t L e x c i o n SoftLexcion SoftLexcion特征,并且添加每个字符的表示。
  • 然后,将添加的字符表示放入序列模型层和CRF层,并获得最终的预测结果。
    在这里插入图片描述

字符表示层

对于基于字符的中文NER模型,输入句子被视为一个字符序列 s = c 1 , c 2 , … , c n ∈ v c s = {c_1, c_2, \dots, c_n} \in \mathcal{v}_c s=c1,c2,,cnvc, 这里 v c \mathcal{v}_c vc是字符字典。每个字符 c i c_i ci都使用一个dense vector(embedding)表示:

x i c = e c ( c i ) (4) x_i^c = e^c (c_i) \tag{4} xic=ec(ci)(4)
e c e^c ec表示字符嵌入查找表。

合并词典信息

单纯地基于字符的NER模型的问题在于:它无法利用单词信息

为了解决这个问题,作者提出了两个方法来将单词信息引入到字符表示层。在下面的介绍中,任何输入序列 s = { c 1 , c 2 , … , c n } s = \{c_1, c_2, \dots, c_n\} s={
c1,c2,,cn}
, w i , j w_{i,j} wi,j表示它的子序列 { c i , c i + 1 , … , c j } \{c_i, c_{i+1}, \dots, c_j\} {
ci,ci+1,,cj}

ExSoftword特征

首先需要构造 E x S o f t w o r d ExSoftword ExSoftword特征(是 S o f t w o r d Softword Softword方法的扩展),它保留了所有可能的词典匹配的分词结果:

x j c ← [ x j c ; e s e g ( s e g s ( c j ) ) ] (6) x_j^c \leftarrow [x_j^c; e^{seg}(segs(c_j))] \tag{6} xjc[xjc;eseg(segs(cj))](6)

  • s e g s ( c j ) segs(c_j) segs(cj)表示所有与 c j c_j cj相关的分词标签
  • e s e g ( s e g s ( c j ) ) e^{seg}(segs(c_j)) eseg(segs(cj))是一个5维的multi-hot vector 每一维都与{B, M, E, S, O}相对应(Begin, Middle, End, Single, Other)。
    在这里插入图片描述

图2 的例子表示,字符 c 7 c_7 c7(“西”) 在 w 5 , 8 w_{5,8} w5,8(“中山西路”)和 w 6 , 7 w_{6,7} w6,7(“山西”)两个单词中出现,并且是在"中山西路"的中间和“山西”的结尾。因此,它对应的分词结果是 { M , E } \{M, E\} {

M,E}。下面是它的字符表示形式:
x 7 c ← [ x 7 c ; e s e g ( { M , E } ) ] (7) x_7^c \leftarrow [x_7^c; e^{seg}(\{M, E\})] \tag{7} x7c[x7c;eseg({
M,E})]
(7)
e s e g e^{seg} eseg的第二个和第三个维度被设置为1({B,M,E,S,O}中第二维表示M, 第三维表示E),其它三个维度被设置为0.

该方法的问题是它没有继承Lattice-LSTM的两个优点:

  • 首先,它不能引入预训练的词向量。
  • 第二,它仍然损失了一些匹配结果的信息。

如 图2 所示,对于字符 { c 5 , c 6 , c 7 , c 8 } \{c_5, c_6, c_7, c_8\} {

c5,c6,c7,c8}构造的 E x S o f t w o r d ExSoftword ExSoftword特征是 { { B } , { B , M , E } , { M , E } , { E } } \{\{B\}, \{B, M, E\}, \{M, E\}, \{E\}\} {
{
B},{
B,M,E},{
M,E},{
E}}
。然而,给定构造好的序列,存在超过一种对应的匹配结果,例如 { w 5 , 6 ( " 中 山 " ) , w 5 , 7 ( " 中 山 西 " ) , w 6 , 8 ( " 山 西 路 " ) } \{w_{5,6}("中山"), w_{5,7}("中山西"), w_{6,8}("山西路")\} {
w5,6(""),w5,7("西"),w6,8("西")}
{ w 5 , 6 ( " 中 山 " ) , w 6 , 7 ( " 山 西 " ) , w 5 , 8 ( " 中 山 西 路 " ) } \{w_{5,6}("中山"), w_{6,7}("山西"), w_{5,8}("中山西路")\} {
w5,6(""),w6,7("西"),w5,8("西")}
因此,我们不能判断哪一个是要被存储的正确结果

SoftLexicon

基于对 E x s o f t w o r d Exsoftword Exsoftword的分析,作者更近一步开发了 S o f t L e x i c o n SoftLexicon SoftLexicon方法来合并词典信息。通过下面三个步骤来构造 S o f t L e x i c o n SoftLexicon SoftLexicon 特征。

对匹配到的单词分类

首先,为了记录分词信息,每个字符 c i c_i ci的所有匹配的单词被分类到四个单词集合 B M E S BMES BMES中,即被四个分词标签所标记。对于输入序列 = { c 1 , c 2 , … , c n } = \{c_1, c_2, \dots, c_n\} ={

c1,c2,,cn}中每个字符 c i c_i ci, 通过以下方法构造四个集合:
B ( c i ) = { w i , k , ∀ w i , k ∈ L , i < k ≤ n } , M ( c i ) = { w j , k , ∀ w j , k ∈ L , 1 ≤ j < i < k ≤ n } , E ( c i ) = w j , i , ∀ w j , i ∈ L , 1 ≤ j < i , S ( c i ) = { c i , ∃ c i ∈ L } . (8) B(c_i) = \{w_{i, k}, \forall w_{i,k} \in L, i < k \le n \},\\ M(c_i) = \{w_{j,k}, \forall w_{j,k} \in L, 1 \le j < i < k \le n\},\\ E(c_i) = {w_{j,i}, \forall w_{j,i} \in L, 1 \le j < i},\\ S(c_i) = \{c_i, \exists c_i \in L\}. \tag{8} B(ci)={
wi,k,wi,k
L,i<kn},M(ci)={
wj,k,wj,k
L,1j<i<kn},E(ci)=wj,i,wj,iL,1j<i,S(ci)={
ci,ci
L}.(8)
在这里, L L L表示我们使用的词典。另外,如果一个单词集合是空的,一个特殊的单词 N O N E NONE NONE被添加到空的单词集合中。
图3 展示了该分类方法的一个例子。
在这里插入图片描述
可以看到,使用该方法,我们不仅引入了word embedding, 而且没有信息损失,因为可以从字符的四个单词集中准确地恢复匹配结果。

压缩词典

在获得每个字符"BMES"单词集合后,每个单词集将被压缩成一个固定维的向量。在本工作中,作者尝试用两种方法来实现该压缩。

第一个实现采用平均池化方法:
v s ( S ) = 1 ∣ S ∣ ∑ w ∈ S e w ( w ) (9) v^s (S) = \frac{1}{|S|} \sum\limits_{w\in S}e^w (w) \tag{9} vs(S)=S1wSew(w)(9)
S S S表示一个单词集合, e w e^w ew表示word embedding lookup table。
然而,如 表8 所示,该算法执行效果并不好。

因此,需要引入加权算法来进一步利用单词信息。为了维持计算效率,作者并没有引入动态的加权算法(例如注意力机制)。相反,作者使用每个单词的频率作为权重指标。因为单词的频率是一个静态值,所以它计算每个单词的权重时会非常快。

具体地,让 z ( w ) z(w) z(w)表示一个单词 w w w在统计数据中出现的频率。单词结合 S S S的权重表示可以通过以下方式获得:
v s ( S ) = 4 Z ∑ w ∈ S z ( w ) e w ( w ) , (10) v^s(S) = \frac{4}{Z}\sum\limits_{w\in S}z(w)e^w(w), \tag{10} vs(S)=Z4wSz(w)ew(w),(10)
这里 Z = ∑ w ∈ B ∪ M ∪ E ∪ S z ( w ) Z = \sum_{w\in B \cup M\cup E \cup S} z(w) Z=wBMESz(w)
在这里,对四个单词集进行权重归一化以进行整体比较。
在这个工作中,统计数据集合是由任务的训练和开发数据的组合构成的。当然了,如果任务中有未标记的数据,则可以将未标记的数据集合用作统计数据集。此外,注意如果 w w w被另一个与词典的子序列覆盖,则 w w w的频率不会增加。这避免了短字的频率总是小于它的长字的频率的问题。

与字符表示相结合

最后一步是将四个单词集的表示形式组合为一个固定维特征,并且将它添加到每个字符的表示中。为了保持尽可能多的信息,作者选择了连接四个单词集合的表示,每个字符的最终表示可能通过以下方式获得:

e s ( B , M , E , S ) = [ v s ( B ) ; v s ( M ) ; v s ( E ) ; V s ( S ) ] , x c ← [ x c ; e s ( B , M , E , S ) ] (11) e^s(B, M, E, S) = [v^s(B); v^s(M); v^s(E); V^s(S)],\\ x^c\leftarrow [x^c;e^s(B, M, E, S)] \tag{11} es(B,M,E,S)=[vs(B);vs(M);vs(E);Vs(S)],xc[xc;es(B,M,E,S)](11)
在这里, v s v^s vs表示上面介绍的加权函数。

序列模型层

结合了词典信息,然后将字符表示放入序列建模层,该层对字符之间的依赖关系进行建模。本层的常用的架构包括BiLSTM、CNN和transformer。在本工作中,作者使用的是单层的BiLSTM

标签推断层

在序列建模层的上面,使用CRF层来执行一次对整个字符序列的标签推断。

在这里插入图片描述

  • y s \mathcal{y}_s ys表示 s s s的所有可能的标签序列,
  • ϕ t ( y ′ , y ∣ s ) = e x p ( W y ′ , y T , h t = b y ′ , y ) \phi_t(y', y|s) = exp(W_{y',y}^T, h_t = b_{y',y}) ϕt(y,ys)=exp(Wy,yT,ht=by,y),在这里, w y ′ , y w_{y',y} wy,y b y ′ , y b_{y',y} by,y是可训练参数与标签对 ( y ′ , y ) (y',y) (y,y)相对应
  • θ \theta θ表示模型参数

对于序列推断问题,它寻找给定输入序列 s s s,找到最大可能性的标签序列 y ∗ y^* y

y ∗ = y p ( y ∣ s ; θ ) , (14) y^* = _y p(y|s;\theta), \tag{14} y=yp(ys;θ),(14)
使用 V i t e r b i Viterbi Viterbi算法可以有效的解决该问题。

实验结果

大多数实验设置都与Lattice-LSTM一样,这里简单展示下实验结果。

推理速度比较:
在这里插入图片描述
推理速度和句子长度成反比:
在这里插入图片描述
准确性:
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

在本工作中,作者解决了在中文NER中利用单词词典的计算效率问题。为了获得具有较高推理速度的中文NER系统,提出了一种新颖的方法来将词典信息整合到字符表示中。对四个基准中文NER数据集的实验研究表明,与比较的最新方法相比,该方法可以实现更快的推理速度和更好的性能。


  1. Yue Zhang and Jie Yang. 2018. Chinese ner using lattice lstm. Proceedings of the 56th Annual Meeting of the Association for Computational Linguistics (ACL), 1554-1564.

  2. Hai Zhao and Chunyu Kit. 2008.Unsupervised segmentation helps supervised learning of character tagging for word segmentation and named entity recognition. In Proceedings of the Sixth SIGHAN Workshop on Chinese Language Processing.

转载地址:http://whmgi.baihongyu.com/

你可能感兴趣的文章
sipp命令 各参数含义
查看>>
搜集的动植物分类、检索网站
查看>>
ffmpeg源码分析之媒体打开过程
查看>>
Ubuntu/centos/redhat/SUSE sipp安装(带rtp支持,3.5.1版本)
查看>>
周鸿祎:很多程序员聪明,但我一看就知道他不会成功
查看>>
编译程序遇到问题 relocation R_X86_64_32 against `.rodata' can not be used when making a shared object;
查看>>
Const指针 、 指向const的指针 、引用、指针
查看>>
GDB调试命令
查看>>
常见数据类型的字节数
查看>>
gcc/g++ 编译常见问题
查看>>
【设计模式】 工厂模式实例 C++ , 利用工厂模式写一个计算器
查看>>
opencv
查看>>
【图像处理】 一、OSTU分割
查看>>
Android常用的框架有哪些
查看>>
SSL 证书创建与部署
查看>>
学习搭建人工智能环境遇到的问题
查看>>
自己编写的计算器
查看>>
视频物体检测
查看>>
Tomcat启动遇到的问题
查看>>
Gradle-gradlew
查看>>