解决方案:如何使用 RNN 模型实现文本自动生成

优采云 发布时间: 2022-11-27 22:53

  解决方案:如何使用 RNN 模型实现文本自动生成

  在自然语言处理中,另一个重要的应用领域是文本的自动书写。关键词、关键短语、自动摘要提取都是该领域的应用示例。但是,这些应用程序是从多到少产生的。这里介绍另外一个应用:从less到more的生成,包括句子复制,从关键词、话题等生成文章或段落。

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

  本章第一节介绍了一些基于关键词生成一段文本的处理技巧。主要是应用关键词抽取、同义词识别等技术实现的。下面对实现过程进行描述和介绍。

  场景

  在投放搜索引擎广告时,我们需要为广告写一句话描述。通常,模型的输入是一些 关键词。比如我们要投放的广告是鲜花广告,假设广告的关键词是:“鲜花”,“便宜”。对于此输入,我们希望生成一定数量的候选单句广告描述。

  对于这种场景,也可以输入一个句子。比如之前手动写的一个例子:“这个周末,小白花只要99元,还包邮!”。需要根据这句话重写一定数量的表达不同但意思相近的句子。这里我们介绍一种基于关键词的文本(一句话)自动生成模型。

  原则

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

  图1 候选句提取完成后,需要根据候选句的个数判断后续操作。如果筛选出的候选句子大于或等于要求的个数,则按照句子相似度从低到高选择指定个数的句子。否则,复制句子。这里采用了根据指定模板进行同义词替换重写的方案。

  完成

  实现候选语句计算的代码如下:

  Map result = new HashMap();

if (type == 0) {//输入为关键词

result = getKeyWordsSentence(keyWordsList);

}else {

result = getWordSimSentence(sentence);

}

//得到候选集数量大于等于要求的数量则对结果进行裁剪

if (result.size() >= number) {

result = sub(result, number);

}else {

//得到候选集数量小于要求的数量则对结果进行添加

result = add(result, number);

}

  实现句子相似度过滤计算的代码如下。

  for (String sen : sentenceList) {

//对待识别语句进行分词处理

List wordsList1 = parse(sentence);

List wordsList2 = parse(sen);

//首先判断两个语句是不是满足目标变换

boolean isPatternSim = isPatternSimSentence(wordsList1, wordsList2);

if (!isPatternSim) {//不满足目标变换

//首先计算两个语句的bi-gram相似度

double tmp = getBigramSim(wordsList1, wordsList2);

//这里的筛选条件是相似度小于阈值,因为bi-gram的相似度越小,代表两者越相似

if (threshold > tmp) {

result.put(sen,tmp);

<p>

" />

}

}else {

result.put(sen,0.0);

}

}</p>

  扩张

  本节涉及的场景是:文本到文本的生成。该场景一般会涉及到文本摘要、句子压缩、文本复制、句子融合等文本处理技术。其中,该部分涉及文本摘要和句子复制两项技术。前文提到,文本摘要主要涉及:关键词抽取、词组抽取、句子抽取等。句子复制根据实现手段的不同大致可分为以下几种。

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

  6.1.2节介绍了一些基于短文本输入得到长文本的处理技术。这里主要使用了RNN网络,利用其处理序列数据的能力来实现文本序列数据的自动填充。下面对其实现细节进行说明和介绍。

  场景

  在做广告的过程中,我们可能会遇到这样的场景:一句话生成描述文字,文字长度在200到300个字符之间。对于某些主题,输入也可能是 关键词。

  这时候,我们就需要一种算法,根据少量的文本输入,生成大量的文本。这里有一个算法:RNN算法。我们在5.3节中介绍了这个算法,并利用这个算法实现了拼音到汉字的转换。其实这两种场景的模式是一样的,都是从给定的文本信息中生成其他的文本信息。不同的是前者是生成当前元素对应的汉字,这里是生成当前元素对应的下一个汉字。

  原则

  和 5.3 节一样,我们这里仍然使用 Simple RNN 模型。因此,整个计算流程图如图3所示。

  图 3

  编码

  实现特征训练计算的代码如下:

   public double train(List x, List y) {

alreadyTrain = true;

double minError = Double.MAX_VALUE;

for (int i = 0; i < totalTrain; i++) {

//定义更新数组

double[][] weightLayer0_update = new double[weightLayer0.length][weightLayer0[0].length];

double[][] weightLayer1_update = new double[weightLayer1.length][weightLayer1[0].length];

double[][] weightLayerh_update = new double[weightLayerh.length][weightLayerh[0].length];

List hiddenLayerInput = new ArrayList();

List outputLayerDelta = new ArrayList();

double[] hiddenLayerInitial = new double[hiddenLayers];

//对于初始的隐含层变量赋值为0

Arrays.fill(hiddenLayerInitial, 0.0);

hiddenLayerInput.add(hiddenLayerInitial);

double overallError = 0.0;

//前向网络计算预测误差

overallError = propagateNetWork(x, y, hiddenLayerInput,

outputLayerDelta, overallError);

if (overallError < minError) {

minError = overallError;

<p>

" />

}else {

continue;

}

first2HiddenLayer = Arrays.copyOf(hiddenLayerInput.get(hiddenLayerInput.size()-1), hiddenLayerInput.get(hiddenLayerInput.size()-1).length);

double[] hidden2InputDelta = new double[weightLayerh_update.length];

//后向网络调整权值矩阵

hidden2InputDelta = backwardNetWork(x, hiddenLayerInput,

outputLayerDelta, hidden2InputDelta,weightLayer0_update, weightLayer1_update, weightLayerh_update);

weightLayer0 = matrixAdd(weightLayer0, matrixPlus(weightLayer0_update, alpha));

weightLayer1 = matrixAdd(weightLayer1, matrixPlus(weightLayer1_update, alpha));

weightLayerh = matrixAdd(weightLayerh, matrixPlus(weightLayerh_update, alpha));

}

return -1.0;

}</p>

  实现预测计算的代码如下:

   public double[] predict(double[] x) {

if (!alreadyTrain) {

new IllegalAccessError("model has not been trained, so can not to be predicted!!!");

}

double[] x2FirstLayer = matrixDot(x, weightLayer0);

double[] firstLayer2Hidden = matrixDot(first2HiddenLayer, weightLayerh);

if (x2FirstLayer.length != firstLayer2Hidden.length) {

new IllegalArgumentException("the x2FirstLayer length is not equal with firstLayer2Hidden length!");

}

for (int i = 0; i < x2FirstLayer.length; i++) {

firstLayer2Hidden[i] += x2FirstLayer[i];

}

firstLayer2Hidden = sigmoid(firstLayer2Hidden);

double[] hiddenLayer2Out = matrixDot(firstLayer2Hidden, weightLayer1);

hiddenLayer2Out = sigmoid(hiddenLayer2Out);

return hiddenLayer2Out;

}

  扩张

  文本的生成根据输入法的不同可以分为以下几种:

  文本到文本生成。也就是说,输入是文本,输出也是文本。图片到文字。也就是说,输入是图像,输出是文本。数据到文本。也就是说,输入是数据,输出是文本。其他。即输入的形​​式不是上面三种,但输出的也是文本。因为这类输入很难泛化,所以归类为other。

  其中,第二类和第三类最近发展非常快,尤其是随着深度学习、知识图谱等前沿技术的发展。基于图像生成文字描述的实验结果不断被刷新。基于GAN(反神经网络)的图像文本生成技术实现了非常大的地图,不仅可以根据图片生成非常好的描述,还可以根据文本输入生成相应的图片。

  从数据生成文本目前主要应用于新闻写作领域。中文和英文都有很大的进步。英文的以美联社为代表,中文的以腾讯为代表。当然,这两者都不是纯粹基于数据的,而是结合了以上四种情况的新闻写作。

  从技术上讲,目前主流的实现方式有两种:一种是基于符号,以知识图谱为代表,这类方式更多地利用了人类的先验知识,对文本的处理收录

了更多的语义元素。另一种是基于统计(connection),即根据大量文本学习不同文本之间的组合规则,然后根据输入作为输出推断出可能的组合方式。随着深度学习与知识图谱的结合,两者之间存在明显的融合现象,这应该是实现未来技术突破的重要节点。

  解决方案:网文自动*敏*感*词*特点

  详细介绍

  自动网页文章*敏*感*词*是一款可以自动生成文章的实用工具。在这里,文章自动*敏*感*词*体积小,用户可以免费使用!用户可以轻松写文章、小说等,喜欢就下载网页文字自动*敏*感*词*试试吧!!!

  自动网页文本*敏*感*词*的特点

  1、写小说、日记、散文,一切皆有可能。

  2.支持撤销、重做、快捷标点、自动排版、夜间模式、常用词、字数统计等常用功能。

  3.支持小黑屋,强制码字,不打扰。

  4.支持回收站,不用担心误删。

  5.支持调整随意调整章节顺序。

  

" />

  6.更*敏*感*词*等你发现,快下载体验吧!

  网页文字自动生成功能

  1.所有生成文章均支持手机复制粘贴,直接复制即可随时分享!

  2.非常有趣的软件,很多不同类型的文章可以帮你解决所有问题!

  3.帮你快速解决自己的写作问题,轻松搞定各类文章!

  自动网页文本*敏*感*词*的优点

  1.支持快速生成各类文章

  2、页面布局清晰,方便用户查看

  

" />

  3.设计精美,不用担心手机内存丢失

  自动网页文本*敏*感*词*的亮点

  1、文章*敏*感*词*可以生成各类原创文章,应用于不同领域,为不同领域的用户带来收益或利益最大化。不用担心重复或相似,它适用于自定义原创文章*敏*感*词*,您可以随意使用。

  2、一款通过你输入的话题和附加内容,一键生成废话文章和营销号文章的APP。软件整合了废话文章和各大营销号的常用套路文章。操作简单,内容有趣,非常适合发布空间和观看平台。

  3、文章*敏*感*词*还包括文章自动处理(混排和随机插入)、在线词库、在线作文素材库、在线词典、长尾词合集、文章合集、短网址转换、文件编码转换、随机字符串插入和其他增强功能。

  对自动网络文章*敏*感*词*的评论

  网页文字自动*敏*感*词*是一款免费自动生成小说的软件,用户可以在这里免费使用!喜欢的朋友赶紧下载试试吧!!!

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线