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

本文主要是介绍文献阅读笔记-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,这才是大势所趋。

这篇关于文献阅读笔记-CSC-Chunk-based Chinese Spelling Check with Global Optimization-翻译+模型理解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/419908

相关文章

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

Spring AI Alibaba接入大模型时的依赖问题小结

《SpringAIAlibaba接入大模型时的依赖问题小结》文章介绍了如何在pom.xml文件中配置SpringAIAlibaba依赖,并提供了一个示例pom.xml文件,同时,建议将Maven仓... 目录(一)pom.XML文件:(二)application.yml配置文件(一)pom.xml文件:首

如何在本地部署 DeepSeek Janus Pro 文生图大模型

《如何在本地部署DeepSeekJanusPro文生图大模型》DeepSeekJanusPro模型在本地成功部署,支持图片理解和文生图功能,通过Gradio界面进行交互,展示了其强大的多模态处... 目录什么是 Janus Pro1. 安装 conda2. 创建 python 虚拟环境3. 克隆 janus

本地私有化部署DeepSeek模型的详细教程

《本地私有化部署DeepSeek模型的详细教程》DeepSeek模型是一种强大的语言模型,本地私有化部署可以让用户在自己的环境中安全、高效地使用该模型,避免数据传输到外部带来的安全风险,同时也能根据自... 目录一、引言二、环境准备(一)硬件要求(二)软件要求(三)创建虚拟环境三、安装依赖库四、获取 Dee

深入理解Apache Airflow 调度器(最新推荐)

《深入理解ApacheAirflow调度器(最新推荐)》ApacheAirflow调度器是数据管道管理系统的关键组件,负责编排dag中任务的执行,通过理解调度器的角色和工作方式,正确配置调度器,并... 目录什么是Airflow 调度器?Airflow 调度器工作机制配置Airflow调度器调优及优化建议最

DeepSeek模型本地部署的详细教程

《DeepSeek模型本地部署的详细教程》DeepSeek作为一款开源且性能强大的大语言模型,提供了灵活的本地部署方案,让用户能够在本地环境中高效运行模型,同时保护数据隐私,在本地成功部署DeepSe... 目录一、环境准备(一)硬件需求(二)软件依赖二、安装Ollama三、下载并部署DeepSeek模型选

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

一文带你理解Python中import机制与importlib的妙用

《一文带你理解Python中import机制与importlib的妙用》在Python编程的世界里,import语句是开发者最常用的工具之一,它就像一把钥匙,打开了通往各种功能和库的大门,下面就跟随小... 目录一、python import机制概述1.1 import语句的基本用法1.2 模块缓存机制1.

深入理解C语言的void*

《深入理解C语言的void*》本文主要介绍了C语言的void*,包括它的任意性、编译器对void*的类型检查以及需要显式类型转换的规则,具有一定的参考价值,感兴趣的可以了解一下... 目录一、void* 的类型任意性二、编译器对 void* 的类型检查三、需要显式类型转换占用的字节四、总结一、void* 的