【NLP论文】文本纠错相关论文

错别字类型

1. 字形相似错误。

2. 拼音相似错误

拼音: gaoxing -> 高兴 

拼音缩写:

3. 其他: 多字、少字、乱序

纠错难点

1. 需要一定的知识背景: 专有名词、人名等

如: 金子塔 -> 金字塔

2. 需要一定推理和分析能力

如: 他的求胜欲很强,为了越狱在挖洞。 -> 他的求生欲很强,为了越狱在挖洞。

3. 文本纠错对于误纠率的要求很严格(一般要求低于0.5%),因为实际场景中,如果把正确字词"纠正"成错误的,会对后续任务造成很大影响

相关论文

1. Spelling Error Correction with Soft-Masked BERT

论文: https://arxiv.53yu.com/pdf/2005.07421.pdf
代码: https://github.com/quantum00549/SoftMaskedBert

摘要

由于BERT基于MLM的预训练方式,它没有足够的能力去检测句子中的每个位置是不是有错字。基于此,论文提出了一种新的模型架构去解决这个问题,该模型包括一个错误检测网络和一个错误纠正网络,前者通过soft-masking将它的预测结果输出给后者,用来处理字级别的中文文本纠错。

相关工作

先前的文本纠错方法一般基于传统的机器学习或其他深度学习。传统的机器学习方法是一个pipeline的过程,先进行错误检测,再生成候选集,再从候选集中选择正确的字;深度学习方法利用seq2seq模型从原始句生成一个纠错后的新句子。最近基于BERT进行文本纠错的方式,用纠错前后的语料对预训练好的模型进行微调,预测时,模型在每个位置从一些候选中预测出最有可能的字;然而,这种方式中模型的错误检测能力不是很好,作者推测是因为BERT在预训练时只mask了句子中15%的字,导致模型只学习到masked tokens的分布,从而选择不做任何correction。为了解决这个问题,作者提出了检测和纠正两个网络结合的模型,其中检测网络是一个Bi-GRU,用来预测某个位置是否有错字的概率,纠正网络与上面仅用BERT进行纠错方法类似。

模型

Detection Network

输入向量(input embedding)是句子中每个字的词向量、位置向量和segment向量之和,输出是该字是否是错字的概率。检测网络是一个双向GRU,给句子中的每个字预测一个是否为错字的概率。而soft masking (e'_i) 就是input embedding (e_i) 和mask embedding (e_{mask}) 的加权平均,权重就是是否为错字的概率。

e'_i=p_i \cdot e_{mask} + (1-p_i)\cdot e_i

若该字是错字的概率越大,则它的soft-masked embedding则更接近mask embedding;相反则更接近input embedding.

Correction Network

纠正网络是一个基于BERT的序列多标签标注模型,输入是上面得到的soft-masked embedding,输出是纠正后的文本序列。对于序列中的每个字,纠正模型将它纠正成字j的概率为

P_c(y_i=j|X)=softmax(Wh'_i + b)[j]

其中,h_i\prime是BERT最后一层embedding和input embedding之和,也就是说这里有一个残差连接。softmax输出字x_i被纠正成词典中每个字的概率,概率最大的字被选为纠错后的字。

损失

最终损失是检测模型损失与纠正模型损失的线性组合

L=\lambda \cdot L_c + (1-\lambda)\cdot L_d

\lambda是[0-1]的系数。

其中,

L_d = -\sum_{i=1}^n log P_d (g_i|X) \quad \quad (g_i=0/1)

L_c = -\sum_{i=1}^n log P_c (y_i|X)

总结

由于基于BERT的文本纠错方法中,BERT的错误检测能力不高,所以作者另外用了一个Bi-GRU模型进行检测,并将检测模型的预测结果融入到纠正模型的输入中,得到一个soft-masked embedding,使得可能错误的字的表征更接近[mask]的表征,正确的字的表征更接近自己的输入表征。

但该方法只适用于完全对齐的文本纠错,无法处理多字、少字的错误类型。

2. SpellGCN: Incorporating Phonological and Visual Similarities into Language Models for Chinese Spelling Check

论文: https://arxiv.org/pdf/2004.14166v2.pdf
代码: https://github.com/ACL2020SpellGCN/SpellGCN

摘要

现有的中文拼写检查(CSC)方法整合中文字符之间的相似信息,但这些相似信息一般都基于外部资源或是启发式的规则。这篇论文通过一个图卷积网络(SpellGCN)将拼音相似和字形相似信息融合到语言模型中,分别构建两个基于发音和字形的graph, 将graph作为模型的输入,给每个字符生成一个基于相似字符的向量表示,然后这些向量被构造成一个字符分类器,用来给从BERT抽取的表征做分类。
动机: 中文是一种没有单词分隔符的象形文字组成的语言,每个字的意思根据上下文的不同也会有所不同。因此,中文文本纠错需要识别语义和周围文本的信息进行修改。

相关工作

之前的工作非监督的语言模型,通过短语/句子的混淆度(perplexity)来检测和纠正错字,但是这种方法的纠错没有基于整个输入文本。后续也提出了一些基于序列标注,seq2seq模型和BERT的方法进行文本纠错。最近研究利用单词相似性的外部知识,比如构建相似字对的混淆集对错字的候选正确字进行选择,但这种方法没有建立相似单词之间的关系。基于此,论文结合了预训练语言模型BERT,并利用GCN来建立单词之间的相互依赖,捕捉拼音和字形的相似性。GCN还被用在关系抽取,给多标签任务建立标签之间的关系上,这些任务中graph的object都是语义相关的;但是,CSC中graph的相似单词都是语义不同的。

模型

SpellGCN的结构

SpellGCN需要两个分别基于发音和字形的相似graph A^p, A^s, 相似信息从一个开源混淆集中获得。每个相似图是一个大小为\mathbb{R}^{N\times N}的二元相邻矩阵,从混淆集中的N个字符构建。图的edge,i.e. 矩阵元素A_{i,j}\in \{0,1\}, 表示字符对(i,j)是否在混淆集中。SpellGCN的目标是学习一个映射函数,将第l层的输入node embedding H^l \in \mathbb{R}^{N\times D}映射到一个新的表示H^{l+1}. 这个映射函数包括一个graph convolution operation和一个attentive graph combination operation.

Graph Convolution Operation:
目的是吸收相邻字符的信息,每一层的计算公式为
f(A, H^l)=\hat{A}H^l W_g^l
其中,W_g^l\in \mathbb{R}^{D\times D}是可训练的矩阵, \hat{A}\in \mathbb{R}^{N\times N}是归一化后的相邻矩阵A.将BERT模型中的字向量作为第0层的特征H^0.由于BERT作为提取器有它自己学习到的语义空间,论文中去除了卷积后的非线性激活函数,保证卷积前后特征空间的一致。实验也表明,使用ReLU作为非线性激活函数,效果反而会变差。

Attentive Graph Combination Operation:
Graph convolution operation处理每一张图的相似性,并利用注意力机制将两张图结合起来。对每个字符i,
C_i^l=\sum_{k\in \{s,p\}} \alpha^l_{i,k}f_k(A^k,H_l)_i

其中, C^l\in \mathbb{R}^{N\times D}, f_k(A^k,H_l)_i是图ki行的卷积特征。\alpha^l_{i,k}表示图k对字符i的权重,计算公式为
\alpha^l_{i,k}=\frac{exp(w_a f_k (A^k,H^l)_i/\beta)}{\sum_{k'}exp(w_a f_{k'}(A^{k'},H^l)_i/\beta)}

其中,w_a\in \mathbb{R}^D是一个层间共享的可学习的向量,\beta是一个控制注意力权重平滑性的超参数,这个参数对注意力机制很关键。

Accumulated Output:
第l+1层的表征来自attentive表征和之前所有层的表征之和:
H^{l+1}=C^l+\sum_{i=0}^l H^i

通过这样的方式,SpellGCN可以集中于提取相似信息,而将语义信息的提取任务交给BERT。

SpellGCN for CSC

将BERT的最后一层输出作为每个字符的特征表示。

通过一个权重为W\in \mathbb{R}^{M\times D}的全连接层来输出最终的目标字符,M是BERT的词表大小,目标函数为
p(\hat{y}_i|X)=softmax(Wv_i)

v_i是字符x_i的向量表示。若x_i在混淆集中,则使用SpellGCN最后一层的输出表示进行分类,否则就用BERT的word embedding进行分类,
W_i=\begin{cases}H_{u_i}^l,\quad \text{if i-th character $\in$ confusion set}\\E_i,\quad \text{otherwise}\end{cases}

最终的目标函数为
L=\sum_{X,Y}\sum_i log p(\hat{y}_i=y_i|X)

论文中直接取概率最大的字符实现correction,并通过检查预测字符与目标字符y_i是否匹配来实现detection.

总结

论文利用GCN构建两个基于拼音相似和字形相似的图,并利用图得到的相似信息去优化BERT提取到的向量表示,从而得到从相似性上更合适的纠错候选。

参考
Soft-Masked BERT:文本纠错与BERT的最新结合
https://zhuanlan.zhihu.com/p/144995580?from_voters_page=true

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354

推荐阅读更多精彩内容