阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

百度中文纠错技术

  • 2019-04-23
  • 本文字数:4098 字

    阅读完需:约 13 分钟

百度中文纠错技术

一. 纠错技术概述

语言是复杂的。每一门语言都经历了几百年,甚至几千年的长期演变和发展,形成了一套复杂的文法和句法规则。这些文法和句法规则复杂多变,例如一些词或者短语存在多音、多意、多用等现象,对语言的使用者提出了较高的要求;一旦语言使用者对语言掌握不够或者粗心大意时,则很容易发生用词不当、张冠李戴等错误。虽然这些错误看起来微不足道,但正所谓“差之毫厘,谬以千里”,特别是在某些场景(比如外交场合),即使很小的语言错误也可能带来非常恶劣的影响。


自然语言处理常见的任务包括词法分析,句法分析,语义计算等,这些任务要取得理想的结果,输入数据的准确性是基本前提,因此从 NLP 的整体技术角度来说,文本纠错起着保驾护航的作用。



纠错技术相对于词法分析,句法分析等受到的关注一直较小,一方面是因为文本出错的比例比较小,在一些重要场合,也有专门人员进行校验;另一方面本身问题也相对较难,其要求计算机对语言规则以及文本语义有深刻的理解。在 2000 年以前,业界主要依靠长期积累的纠错规则和纠错词典来进行纠错,比如微软的文档编辑产品 WORD 即采用这种方法。随着机器学习技术的发展,纠错问题受到了学术界和工业界越来越多的关注,其中有两大主流方法:一种解决思路是将语言错误归类,然后采用 Maxent、SVM 等分类方法对这些类别进行重点识别;另外一种思路是借鉴统计机器翻译(SMT)的思想,将语言纠错等价为机器翻译的过程,即错误文本翻译为正确文本,并随之出现了一系列的优化方法。最近几年,随着神经机器翻译(NMT)技术的快速发展,人们逐步将 SMT 与 NMT 技术结合起来解决纠错问题。最近几年中文纠错的研究也得到较多的关注和发展,并陆续举办了几届中文纠错评测,例如 CGED 与 NLPCC 等。



目前,基于机器翻译的方法已经成为文本纠错的主流技术,主要思想是把纠错看成同种语言中错误句子翻译为正确句子的过程,如上图中的公式所示,其核心由语言模型和翻译模型组成。语言模型学习语言规则、语言知识;翻译模型从平行语料中学习用户的纠错行为。SMT 纠错一般的典型做法:首先基于平行语料训练对齐模型,得到多粒度(字、词、音、形、短语)的混淆矩阵(Phrase Table);针对具体的纠错实例,基于句子中的错误点从 Phrase Table 中召回可能的正确候选,然后基于句子语义理解,对这些纠错候选进行排序,从而得到正确的结果。


而 NMT 方法主要依赖于大规模的监督语料,忽略掉中间的各种步骤,直接实现端到端的学习。NMT 方法相对于 SMT 方法的优势在于避免了 SMT 每一步过程中导致的错误传递,同时具有更强大的学习能力。

二. 百度中文纠错

▪ 技术背景


近年来,随着新媒体行业的快速发展,中国自媒体从业人数逐年增长,至 2017 年有近 260 万。但是相对于传统媒体,其缺少人工校稿环节,编辑好的文章即刻发表,导致文章的错误比例较高。比如一些新媒体平台的正文错误率在 2%以上,标题错误率在 1%左右。同时,语音智能硬件产品的兴起,也暴露出语音识别技术的错误率高企问题,在某些场景语音识别中,错误率可能达到 8%-10%,影响了后续的 query 理解及对话效果。因此研发优质的中文纠错技术,便成为了必须。


▪ 技术目标


为了满足以上的需求,百度中文纠错一方面需要支持多种类型的错误识别,另一方面需要支持不同模态的输入数据,同时还需要提供快速的场景迁移以及深度定制能力。



我们把中文常见错误总结分为三类:


  1. 用词错误,由于输入法等原因导致的选词错误,其主要表现为音近,形近等;

  2. 文法/句法错误,该类错误主要是由于对语言不熟悉导致的如多字、少字、乱序等错误,其错误片段相对较大;

  3. 知识类错误,该类错误可能由于对某些知识不熟悉导致的错误,要解决该类问题,通常得引入外部知识、常识等。



▪ 整体架构


百度中文纠错的整体架构如下图所示。整体上,将纠错流程,分解为错误检测、候选召回、纠错排序三个关键步骤。通过引入语言知识、上下文理解和知识计算的核心技术,提升不同类型错误的解决能力。最后,支持 SMT based 和 NMT based 两套 Framework,形成完整的系统架构。下面分别进行详细介绍。



▪ 关键步骤(错误检测->候选召回->纠错排序)


错误检测的目标是识别输入句子可能存在的问题,采用序列表示(Transformer/LSTM)+CRF 的序列预测模型,这个模型的创新点主要包括:


  1. 词法/句法分析等语言先验知识的充分应用;

  2. 特征设计方面,除了 DNN 相关这种泛化能力比较强的特征,还结合了大量 hard 统计特征,既充分利用 DNN 模型的泛化能力,又对低频与 OOV(Out of Vocabulary)有一定的区分;

  3. 最后,根据字粒度和词粒度各自的特点,在模型中对其进行融合,解决词对齐的问题。



候选召回指的是,识别出具体的错误点之后,需要进行错误纠正,为了达到更好的效果以及性能,需要结合历史错误行为,以及音形等特征召回纠错候选。主要可分为两部分工作:离线的候选挖掘,在线的候选预排序。离线候选挖掘利用大规模多来源的错误对齐语料,通过对其模型,得到不同粒度的错误混淆矩阵。在线候选预排序主要是针对当前的错误点,对离线召回的大量纠错候选,结合语言模型以及错误混淆矩阵的特征,控制进入纠错排序阶段的候选集数量与质量。



纠错排序解决的是,由于纠错的正确结果具有唯一性,如何在召回的纠错候选中将正确的结果排在第一位。百度中文纠错采用的是 Deep&Wide 的混合模型结构,Deep 部分学习当前错误点上下文表示,Wide 部分基于形音、词法、语义、用户行为等特征学习原词与候选词的多维度距离表示,另外通过 GBDT&LR 模型学习到更好的特征组合。



▪ 核心技术(语言知识->上下文理解->知识计算)


中文纠错需要在错误检测、候选召回、纠错排序的策略层面上取得较好效果,最关键的因素仍然在于解决最基本的自然语言处理问题:语言知识、上下文理解、知识计算。语言知识完成对语言规则的学习,对语言结构的理解,具体包括词法分析、句法分析以及语言模型;上下文理解是指需要理解错误点上下文所表示的内容或语义,百度中文纠错主要通过 Contextual-DNN 模型来学习,并通过 AOA attention 机制解决长依赖问题,帮助错误纠正。知识计算方面,从知识(客观规律)的维度考虑问题,重点是做好文本理解与知识关联。



语言知识方面,词/句法分析不详细展开,主要介绍语言模型的训练和使用。传统的语言模型,主要是根据前面一串词预测下一个词的概率,直接应用于纠错的主要问题在于忽略了原词的信息。因此,我们提出了一种受限词表的语言模型,该受限词表基于原词生成,通过基于受限词表的训练和预测,能够对易错词进行更好的区分,具体例子如下图所示。



关联知识方面,看下图中的例子“邓论因档期问题提出爸爸去哪儿”,可以通过原始错误标题在标准语料中基于检索(IR)或者上下文 context Memory 的方式,补充到大量同原始标题相关的精准局部知识。利用这些精准的局部知识来辅助纠错排序。



文本理解方面,以用户与智能音箱的交互句子“小度小度,请帮我导航到深圳市学府路百度国籍大厦”为例,可能会出现低频的道路或 POI,如果采用统计得到的语言模型来纠错而不去理解句子表达的内容,显然是不恰当的。需要从全局理解句子内容以及理解句子的每个成分,解决低频领域知识的泛化问题。具体做法是通过对文本进行语义分析得到语义特征,应用到纠错排序模型中,得到更好的纠错结果。



▪ 系统框架


中文纠错在策略层面涉及错误检测、候选召回、纠错排序,核心技术层面涉及语言知识、上下文理解、知识计算,那如何来构建一个完整的中文纠错系统呢?百度的中文纠错系统支持两种纠错系统框架:ECNet 和 Restricted-V NEC。ECNet 系统把纠错任务分成很多步骤、多个模型,每个模型解决具体的特定问题,然后通过 Pipeline 的方式串联,得到最后结果;这种方式的优点在于方便分析问题,能够针对各个问题进行重点突破,但是也存在两个明显问题:


  1. 错误逐级传递;

  2. 每个模型单独学习,模型之间知识无法共享。Restricted-V NEC 系统则采用端到端的学习、联合优化,单个模型就能完成纠错任务。



三. 纠错应用

▪ 开放域纠错


开放域纠错没有场景限制,支持多模态输入,可以是文本或者语音,不同的输入形式对应不同的混淆矩阵。整个纠错过程包含错误检测、候选召回、纠错排序和序列解码,支持多种类型的错误纠正。开放域纠错的典型应用场景比如写作辅助和内容审核。


写作辅助:在用户编辑文章的过程中,纠错服务能够及时发现用户错误行为,提升内容创作者的创作质量和效率。


内容审核:对于完稿的文章,纠错服务会对其标题和内容进行错误检测,由专业人员进行二次审核,保证文章质量,提升用户的阅读体验。



▪ 场景纠错


场景纠错,与开放域纠错的主要区别在于领域知识的使用,场景纠错除了做好语言规则的刻画和上下文理解外,还需要对场景中的领域知识有充分的学习。场景纠错的重点是针对输入数据做文本的理解、基于场景语料获取关联知识、基于大规模语料学习语言规则。场景纠错的应用点比如地图检索和语音对话。


在地图检索业务中,通过充分利用 POI、位置距离特征及文本理解进行场景纠错,可以协助用户更好的找到目的地,改善用户体验。另一个场景纠错的应用场景是语音产品,语音的内容应该与当前环境场景相吻合,基于文本理解进行纠错。



▪ 纠错开放平台


百度中文纠错基于百度十几年在自然语言处理领域的技术积累,并有效融合了丰富的各类知识库、文本理解等特征,通过互联网用户行为挖掘海量训练样本,结合树模型和神经网络模型的优势,保证了对海量数据的高效利用,因此,百度中文纠错具有算法识别精度高、效果稳定性强的特点。


以上技术特色已通过百度 AI 中文纠错平台对外开放,支持短文本、长文本、语音识别结果等多种文本内容,在搜索引擎、人机对话、语音识别、内容审核等方面有广泛的应用,能显著提高这些场景下的语义准确性和用户体验,欢迎了解和试用。


作者介绍:


付志宏,百度资深研发工程师。硕士毕业于浙江大学,百度自然语言处理部资深研发工程师,从事 NLP 相关工作多年,具有丰富的 NLP 实践经验和扎实的理论基础。目前主要负责 NLP 基础技术以及文本质量等相关技术研究,其中重点包括分词,改写,纠错,以及文本质量计算等。


本文来自 付志宏 在 DataFun 社区的演讲,由 DataFun 编辑整理。


公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2019-04-23 08:007785

评论

发布
暂无评论
发现更多内容

云服务是什么意思?有什么用?

行云管家

云计算 云服务

分布式政企应用如何快速实现云原生的微服务架构改造

IT科技苏辞

2023最新整理上千道Java面试攻略,近500页PDF文档

会踢球的程序源

Java 面试 找工作 java面试 应届生

实战分享丨 MySQL 与 Django 版本匹配相关经验

Java你猿哥

Java MySQL SSM框架 实战 Diango

PostgreSQL技术内幕(七)索引扫描

酷克数据HashData

数据库 postgresql

分布式文件系统FastDFS

会踢球的程序源

Java fastdfs 分布系统

运维审计录像的作用是什么?用什么软件好?

行云管家

堡垒机 运维审计 审计录像

搭建数据驱动的技术底座,助力企业数智化变革

用友BIP

技术大会 用友iuap 用友技术大会 升级企业数智化底座

【经验分享】硬件工程师需要知道的DFM可制造性设计

华秋PCB

工具 电路 PCB PCB设计 可制造性

SOA/ESB架构升级之路:从微服务到ServiceMesh,再到Sermant

IT科技苏辞

解析单存储库:定义、优势与挑战

龙智—DevSecOps解决方案

谷歌 Monorepo Monolith 单储存库

互联网工程师Java面试八股文及答案整理(2023最新版)

Java你猿哥

Spring Cloud springboot java面试 面经 JVM面试

缓存一致性设计思路

我爱娃哈哈😍

redis 缓存 缓存一致性

关于自托管环境,您了解多少?

龙智—DevSecOps解决方案

Atlassian Data Center

华为云智能编程助手助力哈尔滨工业大学(深圳)学子,引领软件研发新趋势

爱尚科技

ElasticSearch 高级检索,按照顺序进行搜索

alexgaoyh

elasticsearch dsl 顺序搜索 高级检索 与或关系

某程序员哀叹:写几年代码,回头一看80%都没用,没法写上简历!

Java你猿哥

Java 程序员 面试 简历

涅槃重生!字节大牛力荐大型分布式手册,凤凰架构让你浴火成神

Java你猿哥

架构 分布式架构 凤凰架构

解决流水线瓶颈、提升编码效率的五个方法(上篇)

龙智—DevSecOps解决方案

ci cicd 持续集成 流水线

华为云智能编程助手赋能高校,揭示行业发展新动向

爱尚科技

2023 寻找企业出海“新势力”

Jessie

企业出海 出海

OneCode 开源集成开发工具ESD功能介绍

codebee

开源 低代码平台

爆肝一月!527页文档详解SpringCloud微服务和分布式系统实践

Java你猿哥

数据库 分布式 SSM框架 微服务设计

技术分享 | 如何迅速将分布式政企应用转型为云原生微服务架构

IT科技苏辞

600+ 道 Java面试题及答案整理(建议收藏)

会踢球的程序源

Java 面试 java面试 应届生 Java八股文

ReentrantLock和Synchronized使用与区别,多线程安全问题

共饮一杯无

synchronized ReentrantLock 三周年连更

打造安全无忧软件应用的十大最佳实践

龙智—DevSecOps解决方案

软件开发 软件开发安全

研究思考丨关于软件复杂度的困局

阿里巴巴云原生

阿里云 云原生 复杂度

第二届“鼎新杯”数字化转型应用大赛申报通道正式开启

信通院IOMM数字化转型团队

数字化转型 鼎新杯

华为云智能编程助手助力哈尔滨工业大学(深圳)培养新时代软件研发人才

爱尚科技

【Linux】系统中安装Go环境

A-刘晨阳

Go Linux 三周年连更

百度中文纠错技术_语言 & 开发_DataFunTalk_InfoQ精选文章