seq2seq问答摘要与推理<总结>

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了seq2seq问答摘要与推理<总结>相关的知识,希望对你有一定的参考价值。

参考技术A 使用汽车大师提供的11万条技师与用户的多轮对话与诊断建议报告数据建立模型,基于对话文本、用户问题、车型与车系,输出包含摘要与推断的报告文本,考验模型的归纳总结与推断能力。

step_1:数据预处理

数据集含五个字段[QID,Brand,Model,Question,Dialogue,Report],训练集的自变量train_x只包含Question,Dialogue,QID,Brand,Model比较短且意义不大;训练集的因变量train_y为Report。

确定好train_x、train_y后,进行分词,停用词含special_character、少数高频率低意义的单词、去重的Brand。

step_2:生成词向量

用train_x、train_y生成所有中文词典,并且按频率由高到低排序,共计12万词。

用train_x、train_y合成后的文件,由Word2Vec方法训练词向量。

从中文词典中取出排名前2万单词,get其词向量,同时把单词索引换成评率排序的数字索引,从而生成以int为索引的词向量。之后,再向词向量中加入[PAD]、[UNK]、[START]、[STOP]。

step_3:建立模型

采用Neural Language Generation方法,搭建encoder-decoder模型,并且采用attention机制,解码单词时能够使模型能够探测上下文单词的重要程度。在encoder中采用双向GRU算法,目的一是GRU具有长短期记忆的处理能力,二是GRU相对于LSTM更快,三是双向更能够使GRU理解上下文之间的关系。在decoder中,使用单向的GRU,然后经历全连接层输出结果。

step_4:生成训练数据

将train_x、train_y转化成在词典中对应的id,按照batch_size可迭代的数据格式,同时对每一条样本做pad、截断。

step_5:训练模型

构建loss_function,调用模型,根据损失函数结果反向传播,打印损失函数的下降过程

step_6:测试数据

定义贪心算法,预测每一步概率最大的值,并id转化成中文单词,去除单词间的空格,最后形成dataframe格式输出

很多次尝试,并未每次都记录,突破性结果如下:

8000数据,循环了15个epochs,loss降到1.87;

10000数据,循环了24个epochs,loss降到1.84;   

1、重复性词语偏多,两种形式:

"你好,根据你的描述, 没有问题没有问题没有问题没有问题 ......"

"这是因为发动机 未充分 燃烧 未充分 导致的"

导致的原因:

前者是loss函数未完全收敛,还有下降的空间,需要再调整参数;后者是存word_repetition,也就是decoder过程中,注意力总集中在某个词身上,导致它生成的概率偏大。

2、有比较多的[UNK]词

12万的词典,介于计算压力,只采取了2万词向量,很多词并未含盖导致不少[UNK]出现。

1、采用coverage方法,在attention计算中加入pre_coverage,并且在损失函数中加入coverage_loss,达到对已经decoder生成过的词加以惩罚,从而减少在此出现的概率。

2、采用PGN方法,每一个batch都生成一个oov词典,使每一步decoder出的概率分布都包含oov词,在保证词典维度不太扩张的情况下,从而减少[UNK]出现。

10000数据,循环了13个epochs,loss降到1.73,然后出现loss为nan;

在减小学习率后:

10000数据,循环了20个epochs,loss降到1.38;

增大训练集后:

80000数据,循环了17个epochs,loss降到2.20左右;

重复问题显著改善,但还是有少量存在;[UNK]显著减少,score能拿到30分出头

尝试:不做模型,根据训练数据的对话结构和规律,做一些规则清洗。从原对话提取比较重要的信息作为摘要,score也能达到27分左右,但这样缺乏推理。

心得:在此案例中,用encoder-decoder模型来生成摘要,结果还是不够理想,分数不够高,体现在语句不通畅,不够贴近自然语言。基于规则清洗的原文本也能接近模型所得分数!还可以尝试用抽取式或者更高级的模型尝试。

<学习一段时间的bert模型来尝试改进>

思路:用分类的方式来判断对话中的句子是否该成为摘要,如果是就分类为1,否则为0.

步骤:(1)制定训练数据集,因为原始的文本不是分好类的,所以通过对Report文本分词,来计算Dialogue中的句子所占Report词语的频率,选出频率高的作为摘要原始句子

(2)将文本转换成bert所需的数据格式:tokens\segment_id\mask_id

(3)download bert预训练模型,加载到我的模型中

(4)在bert模型后面,加一个简单的全连接层,进行预测输出

训练过程:由于GPU资源有限,就在本地训练了不到1000多条数据,还不到一个epoch就stop了,损失函数下降正常

测试结果:bert的效果确实好很多,在几乎不用怎么训练的情况下,分数都能够提升6分左右,如果能到服务器上面再跑跑,应该提升近10分

心得:用bert做多轮对话的摘要,虽然效果提升了很多,还是有点的缺陷。一是基于分类来做的,缺乏推理的能力;二是对话的文本很随意,在拆分成句子的时候拆的太短太长都不好,很难把控。但是如果在正规的长篇 文章中,bert表现应该更好。

Textual Entailment(自然语言推理-文本蕴含) - AllenNLP

自然语言推理是NLP高级别的任务之一,不过自然语言推理包含的内容比较多,机器阅读,问答系统和对话等本质上都属于自然语言推理。最近在看AllenNLP包的时候,里面有个模块:文本蕴含任务(text entailment),它的任务形式是:

给定一个前提文本(premise),根据这个前提去推断假说文本(hypothesis)与premise的关系,一般分为蕴含关系(entailment)和矛盾关系(contradiction),蕴含关系(entailment)表示从premise中可以推断出hypothesis;矛盾关系(contradiction)即hypothesis与premise矛盾。文本蕴含的结果就是这几个概率值。

 

Textual Entailment
Textual Entailment (TE) models take a pair of sentences and predict whether the facts in the first necessarily imply the facts in the second one. The AllenNLP TE model is a re-implementation of the decomposable attention model (Parikh et al, 2017), a widely used TE baseline that was state-of-the-art onthe SNLI dataset in late 2016. The AllenNLP TE model achieves an accuracy of 86.4% on the SNLI 1.0 test dataset, a 2% improvement on most publicly available implementations and a similar score as the original paper. Rather than pre-trained Glove vectors, this model uses ELMo embeddings, which are completely character based and account for the 2% improvement.

 

AllenNLP集成了EMNLP2016中谷歌作者们撰写的一篇文章:A Decomposable Attention Model for Natural Language Inference

技术图片

 

 

 技术图片

 

 技术图片

 

 技术图片

 

 

论文实践

(1)测试例子一:

前提:Two women are wandering along the shore drinking iced tea.

假设:Two women are sitting on a blanket near some rocks talking about politics.

其测试结果如下:

 技术图片

 

 

可视化呈现结果如下:

 技术图片

 

 

测试例子二:

前提:If you help the needy, God will reward you.

假设:Giving money to the poor has good consequences.

测试结果如下:

技术图片

 

以上是关于seq2seq问答摘要与推理<总结>的主要内容,如果未能解决你的问题,请参考以下文章

了解 Seq2Seq 模型

seq2seq 模型中的训练和推理解码器之间共享啥?

深度学习之seq2seq模型以及Attention机制

NLP一文理解Seq2Seq

NLP一文理解Seq2Seq

DL4NLP —— seq2seq+attention机制的应用:文档自动摘要(Automatic Text Summarization)