文献阅读笔记-CSC-Chunk-based Chinese Spelling Check with Global Optimization-翻译+模型理解

Chunk-based Chinese Spelling Check with Global Optimization

作者:阿里巴巴小组
时间:2020年
会议:EMNLP-finding
论文地址Arxivhttps://www.aclweb.org/anthology/2020.findings-emnlp.184.pdf

摘要:

CSC是一个有挑战性的任务,因为中文有许多独特的特点,比如:很大的字符集(比英文26字母多),没有词语边界(不能显式的看出词语-中文分词),很短的词语长度(相比于英文,很短但是意义却可能丰富)。

一方面:(correction)之前的工作只是考虑了相似的字符发音或者形状。不能够纠正视觉和发音上不相关的错别句。(之前大多数工作的确如此,这也是从 中文常见错 的来的motivation)

另一方面:各种pipeline-style 结构被广泛运用,这是十分难以优化的。(大家,通常给出各种pipeline,这个过程中,趋向于变得更加复杂,这自然带来一个问题,global的 优化是很难做好的,且我们确实不希望看到太多“修枝”一样的工作)

为了解决这个问题,这篇论文提出了,
1.用语义候选来扩充之前的混淆集合。视觉发音+语义
2.提出一个基于块的结构去统一的纠正,单个字和多个字。
3.用一个全局最优策略,去帮助 整个句子 correction 的决策
(word:中文中的词,char:中文中的一个字)

Intro:

中文比英文难,三个方面:

  • 英文有有限少量的拉丁字母组成,而中文有三千多个常用字。导致有很大的搜索空间。
  • 英文的基本单位是单词。中文是连续书写没有边界。且词语的定义在不同的语言学理论中是不都一样的。
  • 中文的意群的字很少,所以,稍微的改变都会很大的影响原意。

对于第一个挑战,之前的工作表明,CSC大多数来自于相似的发音、形状或者含义。
这次通过一个masked的语言模型,我们决定加入语义的文本信息来扩充这个混淆集。
然而,因为masked的语言模型缺乏人类错误知识,所以,对于发音和形状相似,我们结合这两个方面来一起解这个问题。

对于,第二个挑战,早期的工作依赖于分词结果。而分词系统是需要在clean的语料库进行训练的,这样,拼写错误就会导致不正确的分词结果。这不断积累的错误,就会让这个问题变得更加困难。
因此,我们提出字符级别的直接纠正方法,这个方法对分词的错误不敏感,更稳健。但是,字符级别的纠正不能够有效的利用词语级别的语义信息,这样纠正就变得更加困难,
为了解决这个问题,我们提出字符级别的纠错和分词后纠错的结合方法。但这个复杂的结构会让这个模型去表现的全局最优。

对于第三个挑战,过去的工作,主要依赖于local 的context。随着统计特征,被限制在一个固定的窗口,这很难去捕获更深层次的文本背景信息。

在这篇文章,我们提出了一个结合多功能的统一框架。
用了相似发音、形状和语义的的混淆集。

  • 一个基于块的全局优化解码工具,针对单个字符和多字符词语。
  • 形状、发音、语义混淆集处理不同的拼写错误。
  • 实验达到好的结果。

Approch

整体理解

输入一句话,然后对不同长度区间的词,去生成很多个候选的词。然后再选出一个全局看起来最正确的,作为纠正。

在这里插入图片描述

基于块的解码

基于块的解码器把单字词、多字词、短语和俗语同等的看待为一个块。他提供了一个统一的模块,这里我们可以轻松地扩充这个候选的方法。这个框架也让全局最优变为可能。

给定一个句子, s = [ c 1 , c 2 , ⋯   , c n ] s=\left[c_{1}, c_{2}, \cdots, c_{n}\right] s=[c1,c2,,cn],这个基于块的解码器同时不断地分块和纠正输入句子。他尝试去找到最佳的块候选的结合。并且重写这个输入的句子,然后纠正。

s c = arg ⁡ max ⁡ s ^ ∈ L ( s ) f ( s ^ , s ) s_{c}=\underset{\hat{s} \in L(s)}{\arg \max } f(\hat{s}, s) sc=s^L(s)argmaxf(s^,s)
这里的 f f f是得分函数, s 是 输 入 句 子 s是输入句子 s L ( s ) 是 所 有 可 能 的 快 的 结 合 。 L(s)是所有可能的快的结合。 L(s)

这个解码过程运用了beam search 算法:
在这里插入图片描述
初始化一个空的correction。
在循环中,我们使用动态生成的块候选扩展beam中的每个部分解码的校正。
一个得分模型被用来给每一个纠正一个confidence score(细节随后介绍。)
每一次循环结束后,我们会对beam 进行分类,并且把confidence score值高的去掉。
在不断的纠正后,我们得到了最正确的纠正作为最终的结果。

本质上,解码阶段联合搜索所有可能的分段及其校正。
从另一个角度看,解码逐渐消除歧义并重写句子

候选生成

这里的module 认定任何跨度的词在句子里都可能是错误的。
对于三种错误类型,发音,形状,和语义,我们分别给出三个方面,去做。

发音:

从一个句子 s s s中给一个字符块状 chunk ⁡ i j = [ c i , ⋯   , c j ] \operatorname{chunk}_{i j}=\left[c_{i}, \cdots, c_{j}\right] chunkij=[ci,,cj],我们把他的字转化为拼音,并且在词汇表 V V V中检索所有的相似的发音的候选。

形状:

我们把所有视觉相似的进行代替。世界上,为了平衡速度和质量,我们要只把相差不大(1edit distance)的进行了替换

语义:

语言模型,masked不同的位置后,用top k的 预测作为语义的混淆集合。

!句子级别的纠正选择-全局最优!

过去的work 如何 formulate 这个 correction task的
s c = arg ⁡ max ⁡ s ^ p ( s ^ ∣ s ) s_{c}=\underset{\hat{s}}{\arg \max } p(\hat{s} \mid s) sc=s^argmaxp(s^s)

简单的贝叶斯重写
s c = arg ⁡ max ⁡ s ^ p ( s ∣ s ^ ) ⋅ p ( s ^ ) p ( s ) s_{c}=\arg \max _{\hat{s}} \frac{p(s \mid \hat{s}) \cdot p(\hat{s})}{p(s)} sc=argmaxs^p(s)p(ss^)p(s^)

p ( s ) p(s) p(s)为常量,改写为下式:
s c = arg ⁡ max ⁡ s ^ ( log ⁡ p ( s ∣ s ^ ) + log ⁡ p ( s ^ ) ) s_{c}=\underset{\hat{s}}{\arg \max }(\log p(s \mid \hat{s})+\log p(\hat{s})) sc=s^argmax(logp(ss^)+logp(s^))

作者给出一系列的 features
在这里插入图片描述
下面这里注意:对应于上面的式子,运用在chunk-level
[ c i , ⋯   , c j ] \left[c_{i}, \cdots, c_{j}\right] [ci,,cj]
[ c ^ i , ⋯   , c ^ j ] \left[\hat{c}_{i}, \cdots, \hat{c}_{j}\right] [c^i,,c^j]
chunk-level的文本,根据上述特征进行计算:得到
c e m = ∑ k = i j ( log ⁡ p ( c ^ k ∣ c k , s ) − log ⁡ p ( c k ∣ c k , s ) ) c e m=\sum_{k=i}^{j}\left(\log p\left(\hat{c}_{k} \mid c_{k}, s\right)-\log p\left(c_{k} \mid c_{k}, s\right)\right) cem=k=ij(logp(c^kck,s)logp(ckck,s))
通俗来说就是基于chunk-level的小部分的correction 来计算一个 差。
最后要把所有的feature 汇集在一个,用一个简单的线性函数来实现:
score = ∑ i w i ⋅ =\sum_{i} w_{i} \cdot =iwi feat i _{i} i
就得到了最后的式子。
最后用MERT框架进行优化(初始化weight为零,然后通过Z-MERT对权重参数进行优化)

作者也提出,end-to-end 的改进想法,就是不再自己提feature,这才是大势所趋。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值