自然语言生成概述
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自然语言生成概述相关的知识,希望对你有一定的参考价值。
参考技术A 近些时间以来,工作内容总围绕着自然语言生成(NLG)方向展开。近些时间,在NLP(自然语言处理)大热的当下,NLG这个方向也渐渐受到关注与发展。其实,自然语言生成(NLG)和自然语言理解(NLU)都是自然语言处理的分支,我们通常所说的自然语言处理主要是关注自然语言理解这块儿,从表面看NLG和NLU是一对逆过程,NLU主要关注点在于以人类语言(自然语言)作为输入,处理后输出机器可读的语义表示;而NLG则是将语义信息以人类可读的自然语言形式进行表达,选择并执行一定的语法和语义规则生成自然语言文本。但实际上,二者的侧重点不同,NLU实际上是使文本的结构和语义逐步清晰的过程,而NLG的研究重点是确定哪些内容是满足用户需要必须生成的,哪些内容是冗余的。【1】虽然侧重点不同,但是二者在NLP这一领域内存在着诸多共同点:1、二者均以语言模型研究为基础;2、二者需要使用语法规则;3、二者都需要解决指代、省略等语用问题等。二者在实际使用中,很多时候相互依赖、相互依存,存在于同一系统的不同阶段,发挥着不同的作用。就像我们研究NLU(我们期望机器能够理解我们人类的语言)一样,我们也期望机器能像人类一样,能够生成高质量的人类可读的文本(语音)信息,NLG是实现这一目的的关键技术。根据文本的长短,NLG可分为句子生成和篇章生成。比如,在聊天机器人、Image caption中,我们多根据上下文生成句子;而写稿机器人、文案创作等场景中,我们就以篇幅形式的段落文本生成为主要形式。
根据输入信息的不同,NLG又可分为:数据到文本的生成、文本到文本的生成、意义到文本的生成、图像到文本的生成等。如果了解encoder-decoder框架,其实这里也可以这样理解,我们把不同形式的输入编码成某种意义,这样就把不同的输入的编码过程作为上游任务,或者称为语义信息的提取;而后续就作为下游任务,统一为意义到文本的生成。在实际应用中,诸如翻译、摘要等都属于文本到文本的生成,而这一方面的研究又最为突出;图像到文本的生成主要应用于图片描述;数据到文本的生成应用也颇广,比如新闻生成、文案生成等等。每项技术都极具应用价值并充满挑战,近些年在NLP以及AI领域均有相当多的前沿研究,而且部分研究已经应用到工业应用之中。
NLG技术在系统的研究及使用中积累了诸多经验,经验证及总结,下面对其架构及方法作一概括。
NLG 系统的主要架构可分为流线型(pipeline)和一体化型(integrated)两种,流线型的NLG系统由几个不同的模块组成,各个模块之间不透明、相互独立,交互仅限于输入输出;而一体化的NLG系统各模块之间是相互作用、共同工作的,更符合人脑的思维过程,但是实现较为困难。所以,在实际应用中较为常用的是流线型NLG系统。
如上图所示,典型的三阶段式的NLG系统被划分为文本规划、句子规划、句法实现3个模块。其中,文本规划决定文本要说什么(what);句法实现决定怎么说(how);句子规划则负责让句子更加连贯。
虽然NLG已应用于许多实践当中,但目前对NLG的研究进展远不如NLU。所以,在NLG技术发展的历史过程中,主要包括基于模板的NLG和基于深度学习的NLG方法。
1、基于模板的NLG
NLG模板由句子模板和词汇模板组成。句子模板包括若干个含有变量的句子,词汇模板则是句子模板中变量对应的所有可能的值。为方便理解,下面引用文献【1】中的一个例子:
<center>询问天气场景中的句子模板</center>
<center>询问天气场景中的词汇模板</center>
实际工作中,基于模板的NLG技术在项目初期使用较多,由于其可控性,对于语言较为严谨的很多领域中使用极为普遍。
2、基于深度学习的NLG
伴随深度学习的热潮,以及机器翻译相关研究的快速发展,基于深度学习的NLG技术也有了较为突出的进展。尤其是encoder-decoder框架的流行,使得该框架下的seq2seq技术也得到了快速发展,尤其是18年末Bert的提出,将NLP研究推上了一个新的高度。基于深度学习的NLG任务也是使用seq2seq体系结构,我们这里主要聊一下data2text这种生成任务,根据输入信息的区别,其过程分为训练阶段和生成阶段。
(1) Training阶段。在训练阶段,encoder和decoder都需要输入信息。encoder端的输入为结构化或者半结构化的数据信息,decoder端的输入为encoder端输入信息所对应的文本信息,也可简单的理解为序列标签信息,直观地可以看出,training阶段是有监督的学习。encoder负责将输入编码成一条语义向量C,然后语义向量C作为decoder的初始状态参与decoder进行解码预估。
(2)Generation阶段。在生成阶段,decoder端不再需要外部输入信息,其网络结构需稍作改造,后一位的输入为前一时间步的输出,也就是构建RNNLM(RNN语言模型)。
基于上述的描述,这里对基于深度学习的data2text生成做一个简要的总结。
了解了上一部分的NLG体系结构,下面对NLG相关任务进行探讨。通常,通过将输入数据分解成若干个子问题来解决将输入数据转换成输出文本的NLG问题。通过对多数NLG系统总结,我们可以大致把NLG的任务分为:
(1)确定内容:决定即将构建的文本中应该包含哪些信息;作为生成过程的第一步,NLG系统需要决定哪些信息应该包含在正在构建的文本中,哪些不应该包含在其中。该部分最大的进步应该算是对齐机制的提出,解决了如何自动学习数据和文本之间的对齐关系的问题。
(2)文本结构:确定文本中呈现信息的顺序;在确定了要传递什么消息之后,NLG系统需要决定它们向读者呈现的顺序。
(3)句子聚合:决定在单个句子中呈现哪些信息;并非文本计划中的每一信息都需要用一个单独的句子来表达;通过将多条消息组合成一个句子,使得生成的文本变得更流畅、更具可读性。尽管也有一些情况认为应避免聚合,总的来说,聚合很难定义,也很难实现,我们可以用各种方式解释,比如从冗余消除到语言结构组合。这里对上述语言进行“聚合”一下,就是如何用言简意赅的话语准确表达想要表达的语言信息。
(4)词汇化:找到正确单词或短语来表达信息;即用什么词或短语来表达消息的构建块。通常情况下,上下文约束在这里也扮演着重要的角色,所以这一点在中文NLG任务中尤为突出。
(5)引用表达式生成:选择单词和短语以标识域对象;这种特征表明与词汇化有着密切的相似性,但本质上的区别在于,引用表达式生成是一项“识别任务,系统需要传递足够的信息来区分一个域实体和其他域实体”。这一个task好抽象,白话解释一下,词汇化阶段主要是选用合适的词或短语表达上下文相关的语义信息,而引用表达式生成阶段的任务首先是识别要表达的对象,然后用合适的词或短语表示它。
(6)语言实现:将所有单词和短语组合成格式良好的句子。这项任务涉及到对句子的成分进行排序,以及生成正确的形态形式,通常还需要插入功能词(如助动词和介词)和标点符号等。上部分提到的NLG方法准确的说应该就是这里的语言实现方法。再来个模板表达的例子,
下面引用一段话来总结一下上述几个任务之间的逻辑关系。这些任务可以从“早期”决策过程(向读者传达哪些信息?)到“后期”(在特定句子中使用哪些单词,以及如何将它们按正确的顺序排列?)的决策过程的角度来考虑。在这里,我们通过区分更倾向于数据的选择(例如说什么)和具有越来越语言性的选择(例如,词汇化或实现)来指代“早期”和“后期”任务【3】。
对于最终生成结果的评价细分为线下评价和线上评价。
线下评价是为了对文本本身的质量作出量化。如何对生成的文本进行评价也是文本生成研究中重要的一环。Gkatzia[5]总结2005年到2014年间的常用的针对文本生成的评价方法,将其分为内在评价和外在评价方法。其中内在评价关注文本的正确性、流畅度和易理解性。常见的内在评价方法又可分为两类:第一种是借鉴翻译、摘要中基于数据的方式,采用BLEU、NIST和ROUGE等方法从数据角度进行自动化评价,通过计算生成文本和训练文本间的相似度来衡量生成质量;第二中是专家模式。通过人工评价,从有用性等对文本进行打分。外在评价则关注生成文本在实际应用中的可用性,这方面我们主要是在前面内在评价方式中设定相应阈值,以获取较好效果的文本,必要时再做人工review。
线上评价则是业务导向,我们的直接指标便是点击率或者APP进入率,根据对这些指标判断是否达到预期点击率的提升或者实际的营销效果。
本文对自然语言生成作了概要性的描述,由于该领域在实际应用中并不成熟,相关研究及实现与自然语言理解方向相差甚远,但是近些时候随着NLP整体发展的进步,以及诸多工业界的现实需求,NLG的相关研究及工程实现也受到了诸多关注。
由于理解及知识的偏差,文中或多或少存在不当之处,欢迎批评指正,也希望能与更多在此方向研究或有实践经验的牛人共同探讨学习。
【1】自然语言处理实践:聊天机器人技术原理与应用
【2】Survey of the state of the art in nature language generation——core tasks, applications and evaluation
【3】Learning Neural Templates for Text Generation,Wiseman, Shieber, Rush; EMNLP 2018
【4】万小军,冯岩松,孙薇薇. 文本自动生成研究进展与趋势. CCF 中文信息技术专业委员会
【5】 Gkatzia D, Mahamood S. A Snapshot of NLG Evaluation Practices 2005-2014[C]//Proceedings of ENLG. 2015.
【6】 Reiter E. An architecture for data-to-text systems[C]//Proceedings of the Eleventh European Workshop on Natural Language Generation. Association for Computational Linguistics, 2007: 97-104.
编译原理概述
1.编译程序与翻译程序、汇编程序的联系与区别。
解释程序, 是一句一句翻译的, 最终不形成目标文件
汇编程序一般指编译生成与之等价的 机器语言
2.编译过程包括哪几个主要阶段及每个阶段的主要功能。
第一阶段:词法分析
词法分析的任务是:输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个的单词(亦称单词符号或简称符号),如基本字(begin、end、if、for、while),标识符、常数、运算符和界符(标点符号、左右括号)。
单词符号是语言的基本组成成分,是人们理解和编写程序的基本要素。识别和理解这些要素无疑也是翻译的基础。如同将英文翻译成中文的情形一样,如果你对英语单词不理解,那就谈不上进行正确的翻译。在词法分析阶段的工作中所依循的是语言的词法规则(或称构词规则)。描述词法规则的有效工具是正规式和有效自动机。
第二阶段:语法分析
语法分析的任务是:在词法分析的基础上,根据语言的语法规则,把单词符号串分解成各类语法单位(语法范畴),如“短语”、“句子”、“程序段”和“程序”等。通过语法分析,确定整个输入串是否构成语法上正确的“程序”。语法分析所依循的是语言的语法规则。语法规则通常用上下文无关文法描述。词法分析是一种线性分析,而语法分析是一种层次结构分析。
第三阶段:词义分析与中间代码产生
这一阶段的任务是:对语法分析所识别出的各类语法范畴,分析其含义,并进行初步翻译(产生中间代码)。这一阶段通常包含两个方面的工作。首先,对每种语法范畴进行语义i安插,例如,变量是否定义、类型是否正确等等。如果语义正确,则进行另一方面工作,即进行中间代码的解释。这一阶段所依循的是语言的语义规则。通常使用属性文法描述语义规则。
第四阶段:优化
优化的任务在于对前段产生的中间代码进行加工变换,以期在最后阶段能产生出更为高效(省时间和空间)的目标代码。优化的主要方面有:公关子表达式的提取、循环优化、删除无用代码等等。有时,为了便于“并行运算”,还可以对代码进行并行化处理。优化所依循的原则是程序的等价变换规则。
第五阶段:目标代码生成
这一阶段的任务是:把中间代码(或经优化处理之后)变换成特定机器上的低级语言代码。这阶段实现了最后的翻译,它的工作有赖于硬件系统结构和机器指令含义。这阶段工作非常复杂,设计到硬件系统功能部件的运用,机器指令的选择,各种数据类型变量的存储空间分配,以及寄存器和后援寄存器的调度,等等
3.解释程序与编译程序的区别。
编译程序是整体编译完了,再一次性执行。
而解释程序是一边解释,一边执行。 解释一句后就提交计算机执行一句,并不形成目标程序。就像外语翻译中的“口译”一样,说一句翻一句,不产生全文的翻译文本。
以上是关于自然语言生成概述的主要内容,如果未能解决你的问题,请参考以下文章