文本生成总结

文本生成

一、文本生成概述

1、文本生成概述:https://www.jiqizhixin.com/articles/2017-05-22

任务包括:对话生成、摘要生成、机器翻译。

2、NLP综述:自然语言生成-NLG:https://zhuanlan.zhihu.com/p/85363175

3、清华NLP组年度巨献:机器翻译30年最重要论文阅读清单:https://blog.csdn.net/qq_27009517/article/details/86566987

二、评价指标:

1、文本生成13:万字长文梳理文本生成评价指标:https://zhuanlan.zhihu.com/p/144182853

2、阅读者的角度:生成句子是否符合正常语句表达

(1)没有语法问题

(2)符合正常的表达方式和逻辑

三、文本生成框架:seq2seq

1、介绍:seq2seq 是一个 Encoder–Decoder 结构的网络,它的输入是一个序列,输出也是一个序列,Encoder 中将一个可变长度的信号序列变为固定长度的向量表达,

Decoder 将这个固定长度的向量变成可变长度的目标的信号序列。

encoder的过程相似于人听到一段声音,然后在脑海中形成一个理解就【类似信息压缩的过程】,decoder就是然后再用自己的语言把它表达出来。

2、基于RNN、CONV、transformer的seq2seq模型的对比:https://my.oschina.net/u/4303180/blog/3473051

四、文本生成模型分类

1、基于RNN的语言生成模型:重点

2、基于CNN的语言生成模型:重点

3、基于transformer的语言生成模型 :超重点

(1)transformerABS

(2)gpt系列——> gpt1、2、3 【文本生成领域使用预训练模型的尝试】

(3)bert系列 ——> BertSumABS

(4)结合gpt和bert——> bart、T5

4、基于GAN的语言生成模型【强化学习和GAN网络引入到文本生成】:了解

5、基于GCN的语言生成模型:了解

(一)基于RNN的文本生成模型

1、生成模型的组成部分:RNN系列模型

1-1、单层RNN:语言生成的主流模型

(1)RNN:

特点:rnn的记忆能力,每个隐状态取决于当前的隐状态和当前的输入。

论文地址:https://arxiv.org/pdf/1409.2329.pdf

(2)LSTM :

特点:通过门结构使模型能够自由选择信息的传递。将循环函数从简单的全连接改为三个控制门的记忆单元

提高:进一步增加RNN的记忆能力,并减轻梯度爆炸和消失的问题。

论文 :https://arxiv.org/abs/1506.04214

代码 : https://github.com/loliverhennigh/Convolutional-LSTM-in-Tensorflow

代码torch : https://github.com/loliverhennigh/Convolutional-LSTM-in-Tensorflow

(3)GRU:

特点:对LSTM的循环函数进行简化,三个门变为两个门

提高:解决LSTM的循环函数比较复杂的问题,在保证效果和LSTM相似的情况下,,提高学习和推理效率。

论文:https://link.zhihu.com/?target=https%3A//arxiv.org/pdf/1406.1078.pdf

(4)LSTM和GRU的比较:

Empirical evaluation of gated recurrent Neural Networks on Sequence Modeling

An Empirical Exploration of Recurrent Network Architectures

(5)四个具有代表性的RNN扩展:

http://distill.pub/2016/augmented-rnns/#citation

1-2、双向RNN 和 多层RNN

解决问题:输入的时间序列很长的时候,就是输入长句子,单层RNN结构,前向传播很难有效记忆历史信息,反向传播也无法很好的梯度回传。

(1)多层RNN有更深的网络参数和更深的结构,能够提高对长句子的记忆能力。

(2)双向对输入的时间序列进行从左到右的编码,考虑当前词的前后文信息能够得到更好的序列表示,但生成任务中,一般只知道前文要模型输出下文,所以双向的模型一般只使用于NLU任务。例如bi-lstm、bi-gru常用于命名实体识别

2、基于RNN的seq2seq文本生成模型

2.1、seq2seq 原始版本

(1)两篇论文

  • 论文:Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation

    时间:2014年

    作者:Google Brain团队和Yoshua Bengio带领的团队提出

    面向:机器翻译领域

    亮点:较早提出seq2seq

    使用:RNN

  • 论文:Sequence to Sequence Learning with Neural Networks。

    时间:2014

    论文翻译:https://helloai.blog.csdn.net/article/details/112359175

    作者:Google的Ilya Sutskever博士(现在OpenAI)

    面向:机器翻译领域

    亮点:用Beam Search改善预测结果,逆序输入句子对效果的提升。Beam Search方法其实本质就是在解码各阶段保留多个候选句子,最后在选择概率最大的序列。如果该方法的保留个数为1,其实就是贪心的思想,每一次解码都选取概率最大的那个值。该论文给出的结论是当size为2的时候,模型的表现最好。

    使用:LSTM

(2)组成

Encoder [特征抽取器]、Decoder、以及连接两者的中间状态向量 C,

总结:两个RNN(encoder RNN + decoder RNN)拼接成的seq2seq

编码解码流程:https://blog.csdn.net/weixin_41640583/article/details/112250230

Encoder通过学习输入,将其编码成一个固定大小的状态向量 C(也称为语义编码),继而将 C 传给Decoder,Decoder再通过对状态向量 C 的学习来进行输出对应的序列。Encoder和decoder里面包含多个RNN 单元,通常是 LSTM 或者 GRU 。

(2)弊端

  • 首先 Encoder 将输入编码为固定大小状态向量(hidden state)的过程实际上是一个“信息有损压缩”的过程。如果信息量越大,那么这个转化向量的过程对信息造成的损失就越大。

  • 同时,随着 sequence length的增加,意味着时间维度上的序列很长,RNN 模型也会出现梯度弥散。更具体的说解码器和编码器常用 LSTM、GRU等等,如果需要翻译的文本很长,神经模型传递信息所需的距离就越长,因此丢失信息的可能性就越大。

  • 最后,基础的模型连接 Encoder 和 Decoder 模块的组件仅仅是一个固定大小的状态向量,这使得Decoder无法直接去关注到输入信息的更多细节。为了解决这些弊端,就加入了attention模型

2.2、seq2seq + attention

(1)相关论文:

论文:Neural Machine Translation by Jointly Learning to Align and Translate

作者: Yoshua Bengio.

发表会议:ICLR2015

论文链接:https://arxiv.org/pdf/1409.0473.pdf

github 传送门 : https://github.com/lisa-groundhog/GroundHog

亮点:最早提出attention思想,这篇文章在神经网络 采用编码-解码RNN 做端到端的机器翻译的基础上,使得模型可以在预测下一个词的时候,自动地选择原句子相关的部分作为解码的输入。【解决句子变长的问题】

使用:LSTM

(2)改进点:

Attention在decoder过程中的每一步,都会给出每个encoder输出的特定权重,然后根据得到权重加权求和,从而得到一个上下文向量,这个上下文向量参与到decoder的输出中,这样大大减少了上文信息的损失,能够取得更好的表现。Attention机制是一种注意力(资源)分配机制,在某个特定时刻,总是重点关注跟它相关的内容,其他内容则进行选择性忽视。就像下图,在翻译“Knowledge”时,只会关注“知识”.这样的对齐能让文本翻译或者摘要生成更具针对性。

(3)弊端

摘要生成的时候:SeqSeq模型在时经常出现的重复词现象。【PGN网络解决】

机器翻译的时候:生成的词一般只能包含上下文已有的词。很多未登录词(OOV)【 oov(out of vocabulary) 集外词,又称未登录词】和罕见词(Rare Words)无法解码。原因:如果我们使用预训练的词向量,而同时在实际数据中出现了未登陆词,未登录词不在词典里面,我们只能不得不用一个<UNK>标记去指代这个词,。未登录词用UNK表示,解码阶段为UNK则无法解码,这样的词一旦很多,就必然会严重影响模型的结果。【PGN网络解决】

2.3、seq2seq + attention + PointerNetwork —— PT-Gen [PGN]

(1)相关论文

论文:《Get To The Point: Summarization with Pointer-Generator Networks》

发表机构:ACL 2017

源码地址:https://github.com/abisee/pointer-generator

面向:摘要生成

论文地址:https://link.zhihu.com/?target=https%3A//arxiv.org/abs/1704.04368

(2)组成:

先用编码器将原文本编码成一个中间层的隐藏状态,然后用解码器来将该隐藏状态解码成为另一个文本,encoder是一个双向的LSTM,这个双向的LSTM可以捕捉原文本的长距离依赖关系以及位置信息。decoder是一个单向的LSTM

(3)改进点

解读:https://zhuanlan.zhihu.com/p/71695633

coverage mechanism【机器翻译中用于解决“过翻译”和“漏翻译”的机制】来解决了seq2seq的通病--repitition,这个机制可以避免在同一位置重复,也因此避免重复生成文本。用先前的注意力权重决策来影响当前注意力权重的决策,这样就避免在同一位置重复,从而避免重复生成文本。具体理解(邮递员小王:《Modeling Coverage for Neural Machine Translation》阅读笔记)。加入一种copy机制,用pointer从原文中Copy那些OOV词来保证信息正确的重复。原文中引入了一个权重 [公式],来衡量词是生成的还是复制的。核心同样是想办法让最终预测的概率向量涵盖输入文本中出现的OOV。

(4)弊端:

网络训练速和摘要生成速度慢:类RNN的序列模型LSTM\GRU:每个词是按顺序输入网络的,所以会记录文章的序列信息。因此,大部分的NLP任务,都是采用的RNN架构。但是这也限制了网络训练及摘要生成的速度,因为RNN必须一个个输入,一个个生成,无法并行计算【网络模型改用CNN解决】

(二)基于CONV的seq2seq

1、seq2seq + CNN

(1)相关论文

(2)创新点:

  • seq2seq架构中放弃RNN,完全用CNN + Gated linear units + Residual connections + Attention,convolution只能表达固定长度的文本,但是堆积多层可以使得可表达的文本长度变大,通过这种方式可以精确地控制目标依赖的源文本长度。

  • CNN网络的计算不像RNN会依赖于前一时刻的状态,所以可以允许在序列中的每一元素上并行。

  • Multi-layer CNN获取长时/长距离依赖时,所提供的path比RNN提供的更短,因为RNN是链式的。

(3)效果:

在编码器端使用卷积神经网络(CNN)代替主流的递归神经网络(RNN),在效果相当的前提下速度提升近2倍。

(三)基于transformer的seq2seq

1、transformer = seq2seq + attention

(1)论文:Attention is all you need,

论文地址: https://arxiv.org/pdf/1706.03762.pdf

代码:https://github.com/huggingface/transformers

简述:而Transformer模型则是在seq2seq+Attention模型的基础上把循环神经网络的部分给去掉了,取而代之的也是attention结构。这些seq2seq模型最初是使用RNN,但因为基于Transformer encoder-decoder的各种模型在处理长序列中的依赖关系表现更好,所以逐渐更受青睐。

(2)解读:

(3)基于transformer的文本生成模型:

2、GPT :单向transformer

2.1、GPT1

(1)论文

标题:GPT 2018.06 Improving Language Understanding by Generative Pre-Training

论文地址:https://s3-us-west-2.amazonaws.com/openai-assets/research-covers/language-unsupervised/language_understanding_paper.pdf

简述:模型的目标是学习一个通用的表示,能够在大量任务上进行应用。这篇论文的亮点主要在于,他们利用了Transformer网络代替了LSTM作为语言模型来更好的捕获长距离语言结构。然后在进行具体任务有监督微调时使用了语言模型作为附属任务训练目标。最后在12个NLP数据集上进行了实验,9个任务获得了SOTA。GPT预训练任务使用的是autoregressive的思想,使用已经解码出的信息来预测下一个位置。该种模式对于生成任务更为有效,而对于那些可以使用全局输入来得到输出的下游任务则比较差劲。

论文解读链接:https://blog.csdn.net/Magical_Bubble/article/details/89497002

(2)结构解读

结构解读:https://zhuanlan.zhihu.com/p/125139937

修改点:像Transformer一样。这样,GPT只能从左到右,或者从右到左扫描输入数据,因此被称为“单向模型”。gpt对transformer的修改”指的是,把decoder输出的多头注意力砍掉;,再配合特定的下游模型“,例如“线性变换+分类”之类的简单结构。

2.2、GPT2:统一NLU和NLG 【重点】

(1)论文:

论文标题: Language Models are Unsupervised Multitask Learners:

论文地址:

https://d4mucfpksywv.cloudfront.net/better-language-models/language_models_are_unsupervised_multitask_learners.pdf

GPT1&2比较:

https://blog.csdn.net/stdcoutzyx/article/details/108859693?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-0&spm=1001.2101.3001.4242

简述:

GPT-2 在 GPT 的基础上采用单向语言模型,并舍去 Fine-tuning 阶段,利用高量多样的大文本数据训练得到一个巨型模型。

(2)相关项目:

GPT-2生成式多轮对话入门-----深入理解“用于中文闲聊的GPT2模型”项目

https://blog.csdn.net/g534441921/article/details/104312983

GPT2-中文摘要生成

https://zhuanlan.zhihu.com/p/113869509

用于中文闲聊的GPT2模型:GPT2-chitchat

https://zhuanlan.zhihu.com/p/96755231

GPT2-Chinese

https://github.com/Morizeyao/GPT2-Chinese

GPT2-chitchat

https://github.com/yangjianxin1/GPT2-chitchat

GPT2-Summary

https://github.com/qingkongzhiqian/GPT2-Summary

CDial-GPT

https://github.com/thu-coai/CDial-GPT

相关GPT2资料补充:

https://github.com/KuangDD/papernote/blob/master/kuangdd/NLP-Pre-trained-Model/GPT2-learning.md

基于GPT-2的中文新闻文本生成

https://blog.csdn.net/zp563987805/article/details/104707331

基于GPT的传统中国诗词生成-论文笔记

https://blog.csdn.net/qq_29695701/article/details/94740719?utm_medium=distribute.pc_relevant.none-task-blog-searchFromBaidu-9.control&dist_request_id=&depth_1-utm_source=distribute.pc_relevant.none-task-blog-searchFromBaidu-9.control

基于GPT2实现考公申论文章生成

https://blog.csdn.net/qq_39086406/article/details/103425337

GPT2自动写作实战

https://www.it610.com/article/1290415310964334592.htm

2.3、SC-GPT :对比GPT2,专注对话生成

论文标题:Few-shot Natural Language Generation for Task-Oriented Dialog

论文链接:https://arxiv.org/abs/2002.12328

项目链接:https://aka.ms/scgpt

面向:自动回复

论文解读:https://zhuanlan.zhihu.com/p/110164562

code/data/demo:http://scgpt.westus2.azurecontainer.io/

简述:本文提出了一种简单有效的“预训练-预训练-微调”模型,用于提高任务导向型对话的生成流畅度与准确度。首先在无标注文本上预训练,然后在标注数据上预训练,最后在特定领域的数据上微调,极大地提高所生成回复的质量。

参考论文《Few-shot Natural Language Generation for Task-Oriented Dialog》对gpt2模型在微调阶段进行改造。通过对数据集以及模型的改造,让模型在计算下一个“字”该生成谁时,对手机和维度进行attention计算,然后再蹦出“字”来,那么这样做就可以解决指定内容的生成了。

2.4、GPT3

(1)论文:

标题:Language Models are Few-Shot Learners

论文地址:https://arxiv.org/abs/2005.14165

(2)相关解读:

中文版GPT-3来了?智源研究院发布清源 CPM —— 以中文为核心的大规模预训练模型

https://www.aminer.cn/research_report/5fb220cbe8a87f775ad21e1d

地表最强的GPT-3,是在推理,还是胡言乱语?

https://zhuanlan.zhihu.com/p/334340996

从Transformer、BERT到GPT2和XLNet:高端玩家如何用论文互怼

https://blog.csdn.net/larry233/article/details/98357725

3、Bert:双向transformer

(1)论文

论文标题:BERT 2018.10 BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

论文地址:https://arxiv.org/abs/1810.04805

(2)相关解读

从Word Embedding到Bert模型—自然语言处理中的预训练技术发展史

https://zhuanlan.zhihu.com/p/49271699

关于Transformer你需要知道的都在这里------从论文到代码深入理解BERT类模型基石

https://blog.csdn.net/g534441921/article/details/104427905

(3)基于bert的文本生成论文:

4、BART

(1)相关论文:

论文:BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension

机构:Facebook AI

论文地址:https://www.aminer.cn/pub/5dbab2523a55acea3c05b02b?conf=acl2020

收录会议:ACL 2020

代码:https://github.com/pytorch/fairseq/tree/master/examples/bart

简述:合了双向transformer【bert类】和自回归transformer【GPT类】 ,可用于文本生成和理解。

(2)论文解读:

(2)开源项目

用BART搭建摘要生成服务 :https://blog.csdn.net/muyao987/article/details/105399325?utm_medium=distribute.pc_relevant.none-task-blog-searchFromBaidu-6.control&dist_request_id=1328741.16873.16168599898262119&depth_1-utm_source=distribute.pc_relevant.none-task-blog-searchFromBaidu-6.control

5、T5:统一NLU和NLG

(1)论文:Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer

论文地址:https://arxiv.org/pdf/1910.1068

(2)简述:和GPT2一样,T5希望用同样的模型,同样的损失函数,同样的训练过程,同样的解码过程来完成所有 NLP 任务。Bart和T5在预训练时都将文本span用掩码替换, 然后让模型学着去重建原始文档。T5使用replace corrupted spans任务, 没有进行mask操作,而是选择了随机token进行替换。

T5模型解读:https://blog.csdn.net/hecongqing/article/details/103404315

6、PEGASUS

以摘要提取任务定制的GSG作为预训练目标的seq2seq模型

(1)论文:《PEGASUS: Pre-training with Extracted Gap-sentences for Abstractive Summarization》

论文地址:https://arxiv.org/abs/1912.08777

代码:https://github.com/google-research/pegasus

简述:Pegasus模型:基于Transformer,5.68亿参数,论文提出了一种新的自监督预训练目标:GSG(Gap Sentences Generation),以适配Transformer-based的encoder-decoder模型在海量文本语料上预训练

论文解读:Google天马(PEGASUS)模型: https://blog.csdn.net/Airstudy/article/details/107599128

7、T5 【基本架构】+ PEGASUS【预训练方式】

(1)项目:T5 PEGASUS:开源一个中文生成式预训练模型:

https://kexue.fm/archives/8209

8、UniLM

(1)论文:Unified Language Model Pre-training for Natural Language Understanding and Generation

论文地址:https://arxiv.org/pdf/1905.03197.pdf

简述:是一种“ Prefix-LM”,具有与Bart和T5相似的masking策略

论文解读:UniLM:一种既能阅读又能自动生成的预训练模型

http://www.360doc.com/content/20/0104/06/46368139_884031609.shtml

四、基于GCN的文本生成

论文:Heterogeneous Graph Neural Networks for Extractive Document Summarization

论文地址:https://www.aclweb.org/anthology/2020.acl-main.553.pdf

面向:抽取式摘要

作者:复旦大学

会议:ACL2020

video:https://www.bilibili.com/video/av200402243/

五、基于GAN的文本生成

论文:SeqGAN: Sequence Generative Adversarial Nets with Policy Gradient

论文地址:https://arxiv.org/pdf/1609.05473.pdf

时间:2017年

简述:没有为了解决什么问题而构造,只是为了尝试,Gan在NLP中效果不好,原因还是连续数据到离散数据的传导问题,(文本中词与词之间的表示是离散的

  • 8
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值