文本生成方法梳理

nlp领域个人还是非常喜欢文本生成这个方向,现在大致梳理一下文本生成的相关问题。

1. 文本生成方案

 目前业界的文本生成方案主要有三种:

(1)规则模板。典型的技术就是AIML语言。这种回复实际上需要人为设定规则模板,对用户输入进行回复。

  • 优点:1、实现简单,无需大量标注数据;2、回复效果可控、稳定。
  • 不足:1、如果需要回复大量问题,则需要人工设定大量模板,人力工作量大;2、使用规则模板生成的回复较为单一,多样性低。

(2)生成模型。主要用encoder-decoder结构生成回复。典型技术是Seq2Seq

transformer

  • 优点:无需规则,能自动从已有对话文本中学习如何生成文本。
  • 不足:1、生成效果不可控,训练好的模型更像是一个“黑盒”,也无法干预模型的生成效果;2、倾向生成万能回复,如“好的”、“哈哈”等,所以多样性与相关性低。

(3)检索模型。利用文本检索与排序技术从问答库中挑选合适的回复。

  • 优点:由于数据来源于已经生成好的回复,或是从已抓取的数据得到的回复,所以语句通顺性高,万能回复少;
  • 不足:1.不能生成新的回复文本,只能从问答库中得到文本进行回复;2.当检索或排序时,可能只停留在表面的语义相关性,难以捕捉真实含义。

 从业界应用广度来说,应该是1,3更广,2的范围较为狭窄。不过对于该领域的爱好者而言,明显是2更具备吸引力,因为2可深挖的点远远多于其他两者,所以本文也只关注2这个方向。

2. 生成模型相关方向

2.1 Seq2Seq

 对于AIer来说,这肯定是个如雷贯耳,手到擒来的名字了,该模型不多做介绍,只说一下单纯的Seq2Seq用于文本生成存在的问题:

  • 负面情感的回复

  • 疑问句式的回复

  • 回复的多样性较低

  • 回复一致性低:比如用户说“我喜欢旅游”,bot回复“我不喜欢,我喜欢”,这就存在问题。

  • 上下文逻辑冲突;背景有关的一些信息,比如年龄其实不可控;

  • 安全回复居多,对话过程显得很无聊。

    • 训练时用到的数据都是人类的对话语料,往往充斥着已知和未知的背景信息,使得对话成为一个”一对多”的问题,比如问年龄和聊天气,回答包括不同的人针对同样的问题产生的不同的回复。

    • 但是神经网络无论多复杂,它始终是一个一一映射的函数。

    • 最大似然只能学到所有语料的共通点,所有背景,独特语境都可能被模型认为是噪音,这样会让模型去学习那些最简单出现频率高的句子

      ,比如”是的”之类的回复,我们称之为安全回复

  • 对话语料的局限性

    • 对话语料只是冰山的一角,实际上对话语料中潜藏着很多个人属性、生活常识、知识背景、价值观/态度、对话场景、情绪装填、意图等信息,这些潜藏的信息没有出现在语料,建模它们是十分困难的。

 除此之外,Seq2Seq在多轮对话方面建模也不是很友好,目前已有的一些研究虽然基于多轮对话做了尝试,不过模型层面还是比较复杂的,训练的话鲁棒性也不是那么好。

改进策略

2.1.1 融合关键输入信息

1. copy机制,从输入中拷贝结果到输出,可以有效缓解OOV问题

 代表paper:Get To The Point: Summarization with Pointer-Generator Networks

 模型结构:

 此结构思路相对简单,只要熟悉Bahdanau attention机制基本可以很轻松的看懂论文的内容:

Bahdanau attention机制:
e i t = v T t a n h ( W h h i + W s s t + b a t t n ) e_i^t = v^T tanh(W_{h}h_i + W_{s}s_t + b_{attn}) eit=vTtanh(Whhi+Wsst+battn)

a t = s o f t m a x ( e t ) a^t = softmax(e^t) at=softmax(et)

h t ∗ = ∑ i a i t h i 上 下 文 向 量 h_{t}^{*} = \sum_{i}{a_i^t h_i} \quad 上下文向量 ht=iaithi

P v o c a b = s o f t m a x ( V ′ ( V [ s t , h t ∗ ] + b ) + b ′ )   词 表 概 率 分 布 , [ s t , h t ∗ ] 代 表 c o n c a t P_{vocab} = softmax(V'(V[s_t, h_t^*] + b) + b')\ 词表概率分布,[s_t,h_t^*]代表concat Pvocab=softmax(V(V[st,ht]+b)+b) [st,ht]concat

P ( w ) = P v o c a b ( w ) P(w) = P_{vocab}(w) P(w)=Pvocab(w)

l o s s t = − l o g P ( w t ∗ ) t 时 刻 生 成 目 标 词 w t ∗ loss_{t} = -logP(w_t^*)\quad t时刻生成目标词w_{t}^{*} losst=logP(wt)twt

l o s s = 1 T ∑ t = 0 T l o s s t loss = \frac{1}{T} \sum_{t=0}^{T}loss_t loss=<

  • 3
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值