一. 纠错技术概述
语言是复杂的. 每一门语言都经历了几百年, 甚至几千年的长期演变和发展, 形成了一套复杂的文法和句法规则. 这些文法和句法规则复杂多变, 例如一些词或者短语存在多音, 多意, 多用等现象, 对语言的使用者提出了较高的要求; 一旦语言使用者对语言掌握不够或者粗心大意时, 则很容易发生用词不当, 张冠李戴等错误. 虽然这些错误看起来微不足道, 但正所谓 "差之毫厘, 谬以千里", 特别是在某些场景(比如外交场合), 即使很小的语言错误也可能带来非常恶劣的影响.
自然语言处理常见的任务包括词法分析, 句法分析, 语义计算等, 这些任务要取得理想的结果, 输入数据的准确性是基本前提, 因此从 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 理解及对话效果. 因此研发优质的中文纠错技术, 便成为了必须.
▪ 技术目标
为了满足以上的需求, 百度中文纠错一方面需要支持多种类型的错误识别, 另一方面需要支持不同模态的输入数据, 同时还需要提供快速的场景迁移以及深度定制能力.
我们把中文常见错误总结分为三类:
用词错误, 由于输入法等原因导致的选词错误, 其主要表现为音近, 形近等;
文法 / 句法错误, 该类错误主要是由于对语言不熟悉导致的如多字, 少字, 乱序等错误, 其错误片段相对较大;
知识类错误, 该类错误可能由于对某些知识不熟悉导致的错误, 要解决该类问题, 通常得引入外部知识, 常识等.
▪ 整体架构
百度中文纠错的整体架构如下图所示. 整体上, 将纠错流程, 分解为错误检测, 候选召回, 纠错排序三个关键步骤. 通过引入语言知识, 上下文理解和知识计算的核心技术, 提升不同类型错误的解决能力. 最后, 支持 SMT based 和 NMT based 两套 Framework, 形成完整的系统架构. 下面分别进行详细介绍.
▪ 关键步骤(错误检测 -> 候选召回 -> 纠错排序)
错误检测的目标是识别输入句子可能存在的问题, 采用序列表示(Transformer/LSTM)+CRF 的序列预测模型, 这个模型的创新点主要包括:
词法 / 句法分析等语言先验知识的充分应用;
特征设计方面, 除了 DNN 相关这种泛化能力比较强的特征, 还结合了大量 hard 统计特征, 既充分利用 DNN 模型的泛化能力, 又对低频与 OOV(Out of Vocabulary)有一定的区分;
最后, 根据字粒度和词粒度各自的特点, 在模型中对其进行融合, 解决词对齐的问题.
候选召回指的是, 识别出具体的错误点之后, 需要进行错误纠正, 为了达到更好的效果以及性能, 需要结合历史错误行为, 以及音形等特征召回纠错候选. 主要可分为两部分工作: 离线的候选挖掘, 在线的候选预排序. 离线候选挖掘利用大规模多来源的错误对齐语料, 通过对其模型, 得到不同粒度的错误混淆矩阵. 在线候选预排序主要是针对当前的错误点, 对离线召回的大量纠错候选, 结合语言模型以及错误混淆矩阵的特征, 控制进入纠错排序阶段的候选集数量与质量.
纠错排序解决的是, 由于纠错的正确结果具有唯一性, 如何在召回的纠错候选中将正确的结果排在第一位. 百度中文纠错采用的是 Deep&Wide 的混合模型结构, Deep 部分学习当前错误点上下文表示, Wide 部分基于形音, 词法, 语义, 用户行为等特征学习原词与候选词的多维度距离表示, 另外通过 GBDT&LR 模型学习到更好的特征组合.
▪ 核心技术(语言知识 -> 上下文理解 -> 知识计算)
中文纠错需要在错误检测, 候选召回, 纠错排序的策略层面上取得较好效果, 最关键的因素仍然在于解决最基本的自然语言处理问题: 语言知识, 上下文理解, 知识计算. 语言知识完成对语言规则的学习, 对语言结构的理解, 具体包括词法分析, 句法分析以及语言模型; 上下文理解是指需要理解错误点上下文所表示的内容或语义, 百度中文纠错主要通过 Contextual-DNN 模型来学习, 并通过 AOA attention 机制解决长依赖问题, 帮助错误纠正. 知识计算方面, 从知识 (客观规律) 的维度考虑问题, 重点是做好文本理解与知识关联.
语言知识方面, 词 / 句法分析不详细展开, 主要介绍语言模型的训练和使用. 传统的语言模型, 主要是根据前面一串词预测下一个词的概率, 直接应用于纠错的主要问题在于忽略了原词的信息. 因此, 我们提出了一种受限词表的语言模型, 该受限词表基于原词生成, 通过基于受限词表的训练和预测, 能够对易错词进行更好的区分, 具体例子如下图所示.
关联知识方面, 看下图中的例子 "邓论因档期问题提出爸爸去哪儿", 可以通过原始错误标题在标准语料中基于检索 (IR) 或者上下文 context Memory 的方式, 补充到大量同原始标题相关的精准局部知识. 利用这些精准的局部知识来辅助纠错排序.
文本理解方面, 以用户与智能音箱的交互句子 "小度小度, 请帮我导航到深圳市学府路百度国籍大厦" 为例, 可能会出现低频的道路或 POI, 如果采用统计得到的语言模型来纠错而不去理解句子表达的内容, 显然是不恰当的. 需要从全局理解句子内容以及理解句子的每个成分, 解决低频领域知识的泛化问题. 具体做法是通过对文本进行语义分析得到语义特征, 应用到纠错排序模型中, 得到更好的纠错结果.
▪ 系统框架
中文纠错在策略层面涉及错误检测, 候选召回, 纠错排序, 核心技术层面涉及语言知识, 上下文理解, 知识计算, 那如何来构建一个完整的中文纠错系统呢? 百度的中文纠错系统支持两种纠错系统框架: ECNet 和 Restricted-V NEC.ECNet 系统把纠错任务分成很多步骤, 多个模型, 每个模型解决具体的特定问题, 然后通过 Pipeline 的方式串联, 得到最后结果; 这种方式的优点在于方便分析问题, 能够针对各个问题进行重点突破, 但是也存在两个明显问题:
错误逐级传递;
每个模型单独学习, 模型之间知识无法共享. Restricted-V NEC 系统则采用端到端的学习, 联合优化, 单个模型就能完成纠错任务.
三. 纠错应用
▪ 开放域纠错
开放域纠错没有场景限制, 支持多模态输入, 可以是文本或者语音, 不同的输入形式对应不同的混淆矩阵. 整个纠错过程包含错误检测, 候选召回, 纠错排序和序列解码, 支持多种类型的错误纠正. 开放域纠错的典型应用场景比如写作辅助和内容审核.
写作辅助: 在用户编辑文章的过程中, 纠错服务能够及时发现用户错误行为, 提升内容创作者的创作质量和效率.
内容审核: 对于完稿的文章, 纠错服务会对其标题和内容进行错误检测, 由专业人员进行二次审核, 保证文章质量, 提升用户的阅读体验.
▪ 场景纠错
场景纠错, 与开放域纠错的主要区别在于领域知识的使用, 场景纠错除了做好语言规则的刻画和上下文理解外, 还需要对场景中的领域知识有充分的学习. 场景纠错的重点是针对输入数据做文本的理解, 基于场景语料获取关联知识, 基于大规模语料学习语言规则. 场景纠错的应用点比如地图检索和语音对话.
在地图检索业务中, 通过充分利用 POI, 位置距离特征及文本理解进行场景纠错, 可以协助用户更好的找到目的地, 改善用户体验. 另一个场景纠错的应用场景是语音产品, 语音的内容应该与当前环境场景相吻合, 基于文本理解进行纠错.
▪ 纠错开放平台
百度中文纠错基于百度十几年在自然语言处理领域的技术积累, 并有效融合了丰富的各类知识库, 文本理解等特征, 通过互联网用户行为挖掘海量训练样本, 结合树模型和神经网络模型的优势, 保证了对海量数据的高效利用, 因此, 百度中文纠错具有算法识别精度高, 效果稳定性强的特点.
以上技术特色已通过百度 AI 中文纠错平台对外开放, 支持短文本, 长文本, 语音识别结果等多种文本内容, 在搜索引擎, 人机对话, 语音识别, 内容审核等方面有广泛的应用, 能显著提高这些场景下的语义准确性和用户体验, 欢迎了解和试用.
来源: http://www.tuicool.com/articles/eYNVbmV