NLP的工程化,不是一个个算法的累积,也不是一个个任务的独立优化,而应该是系统工程,综合考虑语言、计算、场景等多种因素,不断演进融合,寻求效果满意解的过程。根据赫伯特.西蒙(图灵奖和诺贝尔奖双料得主)的有限理性模型,受到所处环境的高度复杂性和有限的信息加工能力限制,因此NLP应用落地时,我们不可能遵循”最优化“的策略,而应该以获取当前可接受的“满意解"为目标。"最优解"可以作为实验室环境下的研究目标,而”满意解“是工程化的条件下我们唯一的选择。
我们提出了“语言、计算、场景”三角形满意解的NLP工程化技术路线,希望从工程化的角度,综合语义的符号化表示、传统语言学的知识表示、深度学习的算法模型等多种技术,在具体场景需求的约束下,寻找NLP工程应用的满意解。
最小化的语言特征是基础的语言资源
我们已经构建了中文、英文的基础语言特征集,其中包括80000多个常用词汇,覆盖了大部分常用词汇。据统计中文常用的5万个词可以覆盖人民日报新闻用词的99%。基础的语言特征集是分类的,比如针对情感计算的基础语言特征中包含了140多种情绪。
基础的语言特征集,必须通过人工方式构建。我们有30多人的语言学团队,经过长达10年的积累,已初步构建完善。
语言特征的泛化是必需的计算技术
语言的使用是动态的,特定场景下的新词、新用法会层出不穷的出现。比如“深度学习”原来不是一个词,但近几年被广泛使用,特指一类神经网络算法。这一类的特征表示,可以采用机器学习算法(包括深度学习),从真实语料中自动学习,对基础语言特征进行扩充和泛化。利用机器学习算法,也可以进行同义词的泛化,比如“查看、查查、查一查、查询一下、查寻一下”等是“查询”的同义词。同时,也可以开展词语关联的泛化,比如“马云-阿里巴巴”的关系和“马化腾-腾讯”的关系类似等。
机器学习得到的新词、新用法,可以通过相似度计算等算法,将学习结果与基础语言特征对齐,以获得新词对应的语言属性。比如“深度学习”是一个名词,是“算法”的下位,与“神经网络”同义等。对齐操作保证了泛化特征的一致性。
语言和算法的有效结合是关键
根据每一类语言结构的特点,有指导的选择算法。比如,对于汉语的流水句的处理,哪些语言特征是流水句的激活特征,流水句是否适合LSTM算法,哪些特征参与LSTM的运算等。而不是针对所有句法结构,采用一种LSTM模型来进行句法分析。
语言结构因为其动态性,不适合把结构本身作为机器学习的输入,而应该在输入侧,通过语料标注或规则设计,把结构进一步抽象成为一个更抽象的特征,输入给机器学习、深度学习算法。如在形容词谓语句的分析中,“形容词短语”作为一个抽象特征,输入给句子分析算法,而不用关心“形容词短语”是用什么算法得到的。相反,机器学习算法的输出,必须以语言特征或语言结构的形式,这样才能保证结果的可解释性。
我们认为,深度学习只是NLP算法库中的一部分,也许只在某一个具体的环节中效果最好,对机器学习(深度学习)算法的“有的放矢”的使用,是NLP工程化的关键。
应用场景是无法回避的约束条件
应用场景是NLP应用的需求和使用环境,不同的应用场景,其约束条件是不同的。有的场景是处理营销数据的,有的是处理客服数据的;有的场景可以提供大量的标注数据,有的只能提供有限的业务规则;有的场景是同步的,有的是异步的。NLP应用必须在满足场景约束的前提下,选择处理流程、计算算法、语料资源等内容的配置。比如,对同样一批数据,同样一个文本,营销场景和客服场景的输出要求完全不同,所用算法也可完全不同,客服场景可以用分类算法,但营销场景也许需要用抽取算法。
很多NLP应用场景下,客户都希望在很短的时间内、在没有训练语料的情况下,快速看到NLP应用的效果,实现“冷启动”。比如某电信企业,客服的动单分类有 2000 多项。电信自己整理了3个多月,每一个分类下的数据都很少,但电信也不可能在每一个细分小类,都帮助我们训练出那么大量的数据,提供给机器学习算法训练。
“冷启动”的关键是规则方法与机器学习方法的有效融合。第一步,采用规则方法,构建一批应用规则,对应用场景下的典型语料,进行规则分析,针对性的获取特征,并对典型语料进行标注。第二步,把典型语料的标注数据,作为机器学习算法的样本,利用各种机器学习(深度学习)算法去做扩充、泛化。对泛化的结果,采用抽样方法,进行人工校验,加入到典型语料中去。这样循环处理,形成一个良性循环,不断的逼近客户要求。
NLP工程化的目标
NLP系统的开发与应用,既需要尊重语言学知识,以语言学知识为指导,又需要充分利用机器学习(深度学习)技术的计算优势,以机器学习为工具,持续迭代发展,才能在工程应用中发挥NLP的能力,实现满意解。
NLP工程化期望达到以下目标:
(1)可解释性,NLP系统输出的结果,应该符合基本的语言学规律,可以用语言学的术语进行解释,而不是给出一堆杂乱无章的数据,让用户从沙海淘金。
(2)一致性,NLP系统的处理过程,应该是随着处理对象的层次和深度,而逐步叠加模块,下级模块使用上级模块的结果,方便进行优化。而不是针对每个任务,采用“一竿子插到底”的复杂算法,中间过程完全是黑盒子。
(3)即用性,NLP系统的应用,需要做到即插即用的“冷启动”,或者是在很小的数据集上进行规则表述和预训练。一切需要用户标注海量数据,才能启动的NLP系统,都是耍流氓。
(4)可迁移性,NLP系统,应该在不用大的改动前提下,即可迁移到类似场景。而不应该是千人千面,过分个性化。
(5)自知之明,NLP系统的终极目标是做到自知之明,系统对输出的结果应该有明确的置信度,哪些结果一定保证是对的,哪些一定是不对的,哪些是不确定,需要人工干预的。有了可靠的自知之明的能力,NLP系统才具备了达到人类理解水平的基本条件。
小编偷偷告诉你,近两年很多媒体报道,计算机在阅读理解、机器翻译等领域超过了人类水平,其实是媒体的一种夸大其辞的误导,计算机只是做了端到端的匹配,匹配结果与标准答案做了个百分比的统计。计算机对阅读理解的内容一无所知,对匹配结果的对错毫无概念,从自知之明的角度衡量的话,计算机的水平可能还达不到小学一年级学生的水平。
语言理解是人工智能皇冠上的明珠,要达到真正的理解能力,道阻且长;正确处理好语言、计算、场景的融合,NLP技术已经可以在非结构化转结构化等应用方向上大展宏图,取得巨大的商业价值。
自知之明的NLP终极目标,任重道远,我们将与您一路同行。