使用RNN模型实现文本自动生成

转载自http://mp.weixin.qq.com/s/0j7605kNtMgvGmAYGWBRWg

【嵌牛导读】:在自然语言处理中,另外一个重要的应用领域,就是文本的自动撰写。关键词、关键短语、自动摘要提取都属于这个领域中的一种应用。不过这些应用,都是由多到少的生成。这里我们介绍其另外一种应用:由少到多的生成,包括句子的复写,由关键词、主题生成文章或者段落等。

【嵌牛鼻子】:文本生成;RNN

【嵌牛提问】:什么是RNN呢?又如何使用 RNN 模型实现文本自动生成呢?

【嵌牛正文】:

1. 基于关键词的文本自动生成模型

基于关键词生成一段文本的一些处理技术。其主要是应用关键词提取、同义词识别等技术来实现的。下面就对实现过程进行说明和介绍。


使用RNN模型实现文本自动生成_第1张图片
图片发自App

2. 场景

在进行搜索引擎广告投放的时候,我们需要给广告撰写一句话描述。一般情况下模型的输入就是一些关键词。比如我们要投放的广告为鲜花广告,假设广告的关键词为:“鲜花”、“便宜”。对于这个输入我们希望产生一定数量的候选一句话广告描述。

对于这种场景,也可能输入的是一句话,比如之前人工撰写了一个例子:“这个周末,小白鲜花只要99元,并且还包邮哦,还包邮哦!”。需要根据这句话复写出一定数量在表达上不同,但是意思相近的语句。这里我们就介绍一种基于关键词的文本(一句话)自动生成模型。

3. 原理

模型处理流程如图1所示。


使用RNN模型实现文本自动生成_第2张图片
图片发自App

01首先根据输入的数据类型不同,进行不同的处理。如果输入的是关键词,则在语料库中选择和输入关键词相同的语句。如果输入的是一个句子,那么就在语料库中选择和输入语句相似度大于指定阈值的句子。


02对于语料库的中句子的关键词提取的算法,则使用之前章节介绍的方法进行。对于具体的算法选择可以根据自己的语料库的形式自由选择。


使用RNN模型实现文本自动生成_第3张图片
图片发自App

                                  图2

03 语句相似度计算,这里按照图2左边虚线框中的流程进行计算:

04 首先对待计算的两个语句进行分词处理,对于分词后的语句判断其是否满足模板变换,如果满足则直接将语句放入候选集,并且设置相似度为0。如果不满足则进入到c)步进行计算。

05 判断两个语句是否满足模板变换的流程图,如图2中右边虚线框所标记的流程所示:(1)首先判断分词后,两个句子的词是不是完全一样,而只是位置不同,如果是则满足模板变换的条件。(2)如果词不完全相同,就看看对不同的词之间是否可以进行同义词变换,如果能够进行同义词变换,并且变换后的语句两个句子去公共词的集合,该集合若为某一句话的全部词集合,则也满足模板变换条件。(3)如果上述两个步骤都不满足,则两个句子之间不满足模板变换。

06 对两个句子剩余的词分别两两计算其词距离。假如两个句子分别剩余的词为,句1:“鲜花”、“多少钱”、“包邮”。句2:“鲜花”、“便宜”、“免运费”。那么其距离矩阵如下表所示:


图片发自App

07 得到相似矩阵以后,就把两个句子中相似的词替换为一个,假设我们这里用“包邮”替换掉“免运费”。那么两个句子的词向量就变为:句1:<鲜花、多少钱、包邮>,句2:<鲜花、便宜、包邮>。

08 对于两个句子分别构建bi-gram统计向量,则有:(1)句1:< begin,鲜花>、<鲜花,多少钱>、<多少钱,包邮>、<包邮,end>。(2)句2:< begin,鲜花>、<鲜花,便宜>、<便宜,包邮>、<包邮,end>。

这两个句子的相似度由如下公式计算:

所以上面的例子的相似度为:1.0-2.0*2/8=0.5。

完成候选语句的提取之后,就要根据候选语句的数量来判断后续操作了。如果筛选的候选语句大于等于要求的数量,则按照句子相似度由低到高选取指定数量的句子。否则要进行句子的复写。这里采用同义词替换和根据指定模板进行改写的方案。

4. 拓展

本节处理的场景是:由文本到文本的生成。这个场景一般主要涉及:文本摘要、句子压缩、文本复写、句子融合等文本处理技术。其中本节涉及文本摘要和句子复写两个方面的技术。文本摘要如前所述主要涉及:关键词提取、短语提取、句子提取等。句子复写则根据实现手段的不同,大致可以分为如下几种。


使用RNN模型实现文本自动生成_第4张图片
图片发自App

基于同义词的改写方法。这也是本节使用的方式,这种方法是词汇级别的,能够在很大程度上保证替换后的文本与原文语义一致。缺点就是会造成句子的通顺度有所降低,当然可以结合隐马尔科夫模型对于句子搭配进行校正提升整体效果。

基于模板的改写方法。这也是本节使用的方式。该方法的基本思想是,从大量收集的语料中统计归纳出固定的模板,系统根据输入句子与模板的匹配情况,决定如何生成不同的表达形式。假设存在如下的模板。

rzv n, a a ——> a a, rzv n

那么对于(输入):

这/rzv, 鲜花/n, 真/a, 便宜/a

就可以转换为(输出):

真/a, 便宜/a, 这/rzv, 鲜花/n

该方法的特点是易于实现,而且处理速度快,但问题是模板的通用性难以把握,如果模板设计得过于死板,则难以处理复杂的句子结构,而且,能够处理的语言现象将受到一定的约束。如果模板设计得过于灵活,往往产生错误的匹配。

基于统计模型和语义分析生成模型的改写方法。这类方法就是根据语料库中的数据进行统计,获得大量的转换概率分布,然后对于输入的语料根据已知的先验知识进行替换。这类方法的句子是在分析结果的基础上进行生成的,从某种意义上说,生成是在分析的指导下实现的,因此,改写生成的句子有可能具有良好的句子结构。但是其所依赖的语料库是非常大的,这样就需要人工标注很多数据。对于这些问题,新的深度学习技术可以解决部分的问题。同时结合知识图谱的深度学习,能够更好地利用人的知识,最大限度地减少对训练样本的数据需求。





R

你可能感兴趣的:(使用RNN模型实现文本自动生成)