文献阅读笔记-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

相关文章

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

SpringBoot整合Sa-Token实现RBAC权限模型的过程解析

《SpringBoot整合Sa-Token实现RBAC权限模型的过程解析》:本文主要介绍SpringBoot整合Sa-Token实现RBAC权限模型的过程解析,本文给大家介绍的非常详细,对大家的学... 目录前言一、基础概念1.1 RBAC模型核心概念1.2 Sa-Token核心功能1.3 环境准备二、表结

spring IOC的理解之原理和实现过程

《springIOC的理解之原理和实现过程》:本文主要介绍springIOC的理解之原理和实现过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、IoC 核心概念二、核心原理1. 容器架构2. 核心组件3. 工作流程三、关键实现机制1. Bean生命周期2.

深入理解Apache Kafka(分布式流处理平台)

《深入理解ApacheKafka(分布式流处理平台)》ApacheKafka作为现代分布式系统中的核心中间件,为构建高吞吐量、低延迟的数据管道提供了强大支持,本文将深入探讨Kafka的核心概念、架构... 目录引言一、Apache Kafka概述1.1 什么是Kafka?1.2 Kafka的核心概念二、Ka

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo

SpringBoot快速接入OpenAI大模型的方法(JDK8)

《SpringBoot快速接入OpenAI大模型的方法(JDK8)》本文介绍了如何使用AI4J快速接入OpenAI大模型,并展示了如何实现流式与非流式的输出,以及对函数调用的使用,AI4J支持JDK8... 目录使用AI4J快速接入OpenAI大模型介绍AI4J-github快速使用创建SpringBoot