| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 【NLP】《Chinese Poetry Generation with Planning based Neural Network》的阅读笔记 -> 正文阅读 |
|
[人工智能]【NLP】《Chinese Poetry Generation with Planning based Neural Network》的阅读笔记 |
背景前段时间回顾和学习了基于RNN+Attention与基于CNN+Attention的seq2seq模型:【NLP】seq2seq 由浅入深——基于Rnn和Cnn的处理方式,于是现在想找一些案例练练手。 除了机器翻译,seq2seq还是有一些比较有意思的落地场景。比如说,我们打电话到海底捞预定,一般情况下接电话的女声,其实是一个机器人来帮你预定,听起来还是比较智能的。这里就用到了seq2seq,但是涉及到语音处理。另一个是华为团队,通过seq2seq为基础设计的模型实现了计算机对微博的自动回复,并通过模型间的对比得到了一系列有意思的结果。如下图,post为微博主发的文,其余四列为不同模型对该条微博做出的回复。 下面就到作为论文阅读笔记,或者是原文的翻译吧。又开始督促自己学英语啦,虽然是中国人写的英语,但是总比自己写的要好,值得学习,嘎嘎!!! 摘要中文的诗词生成在自然语言处理中是一个比较大的挑战。这篇论文提出了一个比较新奇的两段式生成诗的方法,第一步是根据书写人的书写意向生成几个子主题,第二步使用修改的基于RNN的encoder-decoder框架按照逐次生成对应行的诗句。这个基于计划性方法的提出可以保证生成的诗在意义上和书写着保持一致。人们综合的判断评价表明,这种方法优于最先进的诗歌生成方法,也就是达到sota的水平,而且诗歌质量在某种程度上可与人类诗人相媲美。 引言中国古典诗歌是中国文化中最重要的文化遗产。在两千年多年的历史上,数百万首美丽的诗被赞美英雄人物、美丽的风景、爱情、友谊等。中国古典诗歌有不同的种类,如唐代和宋诗。每一种类型的诗歌都必须遵循一些特定的结构、节奏和音调模式。下表展示了作为中国最受欢迎的诗歌流派之一的四行诗(五绝)的一个例子。 近年来,诗歌自动生成的研究受到了广泛的关注。大多数方法都使用规则或模板,遗传算法,总结的方法以及统计机器翻译的方法生成诗歌。最近,深度学习方法已经成为一门很有前途的学科,它认为诗歌生成是一个序列到序列的生成问题。这些方法通常是根据用户的写作意图(通常是一组关键字)从诗歌数据集中选择一行来生成第一行,其他三行是根据第一行和已生成的生成。用户的写作意图只能影响第一行,其余三行可能与诗的主题没有关联,这可能会导致生成诗时的语义不一致。此外,诗歌的主题通常用训练语料库中的诗歌来表示。但正如我们所知,在诗歌中使用的单词,特别是在古代写的诗歌,是不同于现代语言的。因此,如果用户想为一个现代术语(如巴拉克·奥巴马)写诗,现有的方法可能无法产生有意义的诗歌。 这篇论文提出了一种新颖的诗歌生成方法,它以两个阶段的过程生成诗歌:诗歌的内容(“该说什么”)首先被明确地计划好,然后进行表面实现(“如何说”)。给定用户的写作意图,它可以是一组关键字,一个句子,即使是用自然语言描述的文档,第一步也是使用诗歌规划模型来确定诗歌的子主题序列,每一行都由一个子主题表示。诗歌规划模型将用户的写作意图分解为一系列的子主题,每个子主题都与主主题相关,代表了写作意图的一个方面。然后逐行生成诗,使用基于递归神经网络的编码器-解码器模型(RNNenc-dec),逐行生成诗,并根据相应的子主题和前面生成的行生成每一行。文中修改了RNN的enc-dec框架,以支持对子主题和前面两行的编码。基于规划的机制相比于以往的方法有两个优点。首先,生成的诗的每一行都与用户的写作意图有更紧密的联系。其次,诗歌规划模型可以从诗歌数据之外,从额外的知识来源学习,如大规模网络数据或从百科全书中提取的知识。因此,它可以连接现代概念和古代诗歌所涵盖的文字集合。以“巴拉克·奥巴马”为例:利用百科全书的知识,诗歌规划模型可以将用户的查询巴拉克·奥巴马扩展到一系列子主题,如优秀、权力等,从而确保生成诗歌的语义一致性。 该文的贡献有两方面。首先,提出了一个基于规划的诗歌生成框架,它明确地规划了每一行的子主题。其次,使用一个修改的RNN编码解码器框架,它支持编码子主题和前面的行,一行一行地生成诗。 相关工作诗歌生成是NLP中的一项具有挑战性的任务。Oliveira等人提出了一种基于语义和语法模板的诗歌生成方法。Netzer等人采用了一种基于单词关联度量的方法。Tosa等人使用了一种短语搜索的方法来进行日本诗歌的生成。Greene等人应用统计学的方法来分析、生成和翻译有节奏的诗歌。Colton等人描述了一个基于语料库的诗歌生成系统,该系统使用模板根据给定的约束来构建诗歌。Yan等人认为诗歌生成是一个基于有几个约束的总结框架的优化问题。Manurung使用遗传算法来生成诗歌。基于统计机器翻译(SMT)是一种重要方法。Jiang 和 Zhou使用基于SMT的模型生成中文对句,可以看作是只有两行的简化调节诗句。第一行被认为是源语言,并被翻译成第二行。He等人扩展了这个方法,通过将前一行依次转换为下一行来生成四行诗。 近年来,深度学习方法在诗歌生成方面取得了巨大的成功。Zhang和Lapata提出了一种基于递归神经网络(RNN)的四行诗生成模型。该方法使用递归神经网络语言模型(RNNLM)从给定的关键字中生成第一行,然后,通过累积迄今为止已生成的行的状态,依次生成后续的行。Wang等人使用端到端神经机器翻译模型来生成宋词。宋词是通过将已成的行翻译为接下来的行。这个过程类似于SMT,但句子之间的语义相关性更好。Wang等人没有考虑到第一行的生成,因此,第一行是由用户提供的,必须是诗中写得很好的句子。Yi扩展这种方法生成中国四行诗。生成第一行的问题可以通过一个单独的神经机器翻译(NMT)模型来解决,该模型以一个关键字作为输入,并将其转换为第一行。Marjan 等人提出了一种诗歌生成算法,首先生成与给定关键字相关的押韵字,然后使用编码器-解码器模型根据押韵字生成整首诗。 文中的工作不同于以前的方法如下。首先,不限制用户的输入。它可以是一些关键词、短语、句子,甚至是文档。以前的方法只能支持一些关键字或必须提供第一行。其次,使用基于规划的方法,根据用户的输入来确定诗的主题,每一行都有一个特定的子主题,保证生成的诗连贯且组织良好,从而避免了前一种方法的问题,即保证只有第一行与用户的意图相关,而下一行由于相贯衰减问题可能与意图无关。第三,在节奏或音调中是由规则或额外的结构控制的,而文中模型可以自动从训练语料库中学习约束。最后,该诗歌生成模型的结构更简单。 方法1.总览受观察到诗人在写诗前应该先制定大纲的启发,文中提出了一种基于计划的诗歌生成方法(PPG),首先根据用户的写作意图生成大纲,然后生成诗。这个PPG系统以用户的写作意图作为输入,可以是一个单词、一个句子或一个文档,然后分两个阶段生成一首诗:诗歌规划和诗歌生成。PPG的两阶段程序的说明如下图: 2. 规划作诗2.1 关键词提取用户的输入写入意图可以用一系列单词来表示。在诗歌规划阶段有一个假设,从输入查询 Q Q Q中提取的关键字数量必须等于诗中的 N N N行数,这可以确保每一行只取一个关键字作为子主题。如果用户的输入查询 Q Q Q太长,我们需要提取最重要的 N N N个单词,并保持原始顺序作为关键字序列,以满足需求。 文中使用的是TextRank算法去评估重要的词语。这是一种基于PageRank的基于图的排名算法。每个候选词由图中的一个顶点表示,并根据两个词的共现性在它们之间添加边;边的权重是根据两个词的共现强度的总数来设置的。 S ( V i ) = ( 1 ? d ) + d ∑ V j ∈ E ( V i ) w j i ∑ V k ∈ E ( V j ) w j k S ( V j ) S\left(V_{i}\right)=(1-d)+d \sum_{V_{j} \in E\left(V_{i}\right)} \frac{w_{j i}}{\sum_{V_{k} \in E\left(V_{j}\right)} w_{j k}} S\left(V_{j}\right) S(Vi?)=(1?d)+dVj?∈E(Vi?)∑?∑Vk?∈E(Vj?)?wjk?wji??S(Vj?) 其中, w i j w_{ij} wij?是节点 V j V_j Vj?和 V i V_i Vi?之间的边的权重, E ( V i ) E(V_i) E(Vi?)是与 V i V_i Vi?连接的顶点集, d d d是一个阻尼因子,通常设置为0.85, S ( V i ) S(V_i) S(Vi?)的初始分数设置为1.0。 2.2 关键词扩充如果用户的输入查询 Q Q Q太短,无法提取出足够的关键字,我们需要扩展一些新的关键字,直到满足关键字号的要求。我们使用两种不同的方法来扩展关键字。 RNNLM-based method: 我们使用一个递归神经网络语言模型(RNNLM)根据前面的关键词顺序预测后续关键词: k i = arg ? max ? k P ( k ∣ k 1 : i ? 1 ) k_i= \arg \max_k P(k|k_{1:{i-1}}) ki?=argmaxk?P(k∣k1:i?1?), k i k_i ki?表示第 k k k个关键词, k 1 : i ? 1 k_{1:i-1} k1:i?1?是已经有的关键词序列。 RNNLM的训练需要一个由从诗歌中提取的关键字序列组成的训练集,其中一个关键字代表一行的子主题。我们从收集到的诗歌中自动生成训练语料库。具体来说,给定一首由 N N N行组成的诗,我们首先根据在诗语料库上计算出的TextRank分数对每行中的单词进行排序。然后选择文本排名得分最高的词语作为该行的关键词。这样,可以为每首诗提取一个关键字序列,并为基于RNNLM的关键字预测模型生成一个训练语料库。 Knowledge-based method: 上述基于RNNLM的方法仅适用于为所收集的诗歌所涵盖的内容生成子主题。当用户的查询包含域外关键字时,例如,训练语料库不覆盖的命名实体时,此方法就整不了了。 为了解决这个问题,我们提出了一种基于知识的方法,它使用额外的知识来源来生成子主题。额外的知识来源可以使用,包括百科全书、搜索引擎的建议、词汇数据库(如:WordNet)等。给定一个关键词 k i k_i ki?,该方法的关键思想是找到一些能够最好地描述或解释 k i k_i ki?的单词。在文中,使用百科全书的条目作为知识的来源,从 k i k_i ki?中扩展新的关键词。我们检索那些满足以下所有条件的条件作为候选关键字:
然后选择文本排名得分最高的候选词作为关键词。 3.诗的生成在诗歌生成阶段,诗是逐行生成的。每一行都是通过以诗歌规划模型指定的关键字和前面的所有文本作为输入来生成的。这个过程可以看成是一个序列到序列的映射问题,其输入由两种不同类型的序列组成:由诗歌规划模型指定的关键字和之前生成的诗歌文本。文中修改了一个基于注意力的RNN编码器-解码器(RNNRNN-dec)的框架以支持多个序列作为输入。 给定一个有
T
k
T_k
Tk?字符的关键字
k
k
k,例如:
k
=
{
a
1
,
a
2
,
?
?
,
a
T
k
}
k=\{ a_1, a_2, \cdots, a_{T_k}\}
k={a1?,a2?,?,aTk??},和前面的文本
x
\mathbf{x}
x,里面有
T
x
T_x
Tx?个字符,例如:
x
=
{
x
1
,
x
2
,
?
?
,
x
T
x
}
\mathbf{x}=\{x_1, x_2, \cdots,x_{T_x}\}
x={x1?,x2?,?,xTx??}。首先将
x
\mathbf{x}
x编码成一个隐藏状态的序列
[
r
1
:
r
T
k
]
[r_1:r_{T_k}]
[r1?:rTk??],
x
\mathbf{x}
x编码成
[
h
1
:
h
T
x
]
[h_1:h_{T_x}]
[h1?:hTx??], 两者都使用的是Bi-GRU模型。然后,通过连接
[
r
1
:
r
T
k
]
[r_1:r_{T_k}]
[r1?:rTk??]的最后一个前向传播状态和第一个前向传播状态,将
[
r
1
:
r
T
k
]
[r_1:r_{T_k}]
[r1?:rTk??]集成到一个向量
r
c
r_c
rc?中,如下: 然后将
h
0
=
r
c
h_0=r_c
h0?=rc?,然后这个序列的向量
h
=
[
h
0
:
h
T
x
]
\mathbf{h}=[h_0:h_{T_x}]
h=[h0?:hTx??]就可以表示
k
\mathbf{k}
k和
x
\mathbf{x}
x的语义,如下图: 对于解码器,我们使用另一个GRU,它维护一个内部状态向量 s t s_t st?,对于每个生成步骤 t t t,最可能的输出 y t y_t yt?是基于 s t s_t st?、上下文向量 c t c_t ct?和之前生成的输出 y t ? 1 y_{t?1} yt?1?生成的。可以使用如下公式表示: y t = arg ? max ? y P ( y ∣ s t , c t , y t ? 1 ) y_{t}=\arg \max _{y} P\left(y \mid s_{t}, c_{t}, y_{t-1}\right) yt?=argymax?P(y∣st?,ct?,yt?1?) 经过每一个预测,
s
t
s_t
st?会被如下公式更新: f ( ? ) f(\cdot) f(?)是GRU的一个激活函数,通过对已声明的模型在每一步重新计算 c t c_t ct?(这里就是attention的计算): c t = ∑ j = 0 T h ? 1 a t j h j c_{t}=\sum_{j=0}^{T_{h}-1} a_{t j} h_{j} ct?=j=0∑Th??1?atj?hj?
h
j
h_j
hj?是编码器输出中的第
j
j
j个隐藏状态。权重
a
t
j
a_{tj}
atj?是由如下公式计算出: 其中: e t j = v a T tanh ? ( W a s t ? 1 + U a h j ) e_{t j}=v_{a}^{T} \tanh \left(W_{a} s_{t-1}+U_{a} h_{j}\right) etj?=vaT?tanh(Wa?st?1?+Ua?hj?)
e
t
j
e_{tj}
etj?是在时间步长
t
t
t时在
h
j
h_j
hj?上的注意力得分。下一个单词
y
t
y_t
yt?的概率可以定义为: 其中 g ( ? ) g(\cdot) g(?) 是一个输出 y t y_t yt?的概率的非线性函数。 诗歌生成模型的参数被训练,以最大限度地提高训练语料库的对数似然: 实验1.数据集本文着重研究了四行、五或七个字符长度相同的中国四行诗。我们从互联网上收集了76,859个四行诗,随机选择2000首诗进行验证,2000首诗进行测试,其余的诗进行训练。 训练集中所有的诗歌首先使用基于CRF的单词分割系统被分割成词语。然后计算每个单词的文本排名分数。文本排名得分最高的词语被选择作为该行的关键字。这样,就可以为每个四行诗提取一个包含4个关键词的序列。从诗歌的训练语料库中,提取了72,859个关键字序列,用于训练RNN语言模型进行关键字扩展。对于基于知识的扩展,我们使用百度百科和维基百科作为额外的知识来源。 从四行诗中提取四个关键字后,我们为每首诗生成四个由其组成的三元组(关键字、前面的文本、当前行)如下图: 2.训练对于提出的基于注意力的RNN环境模型,我们选择了6000个最常用的字符作为源边和目标边的词汇表。单词嵌入维数为512,并由单词2vec初始化。解码器和两个编码器的循环隐藏层包含512个隐藏单元。模型的参数在均匀分布上随机初始化,范围在[-0.08,0.08]。该模型采用AdaDelta算法进行训练,其中minibatch被设置为128。根据验证集上的损失结果,选择最终的模型。 3.评估3.1 评估指标众所周知,准确评价文本生成系统是困难的,如诗歌生成和对话响应生成。给定一个特定的主题,有成千上万的方法可以生成一个适当的和相关的诗歌或对话框响应,有限的参考文献不可能涵盖所有正确的结果。Liu 最近表明,基于重叠的自动评估度量适应于对话响应,BLEU和METEOR与人类评价相关性不大。因此,我们进行了一个人类研究来评估诗歌生成模型。我们对人类评价者使用四种评价标准来评价诗歌:“诗意”、“流畅性”、“相关性”、“意义”。详细的说明可以如下表: 3.2 基线文中实现了几种诗歌生成方法作为基线,并对所有方法采用了相同的预处理方法。 3.3 结果给出了专家评价的结果如下: SMT生成的诗歌的诗性优于RNNLM,说明基于翻译的方法可以更好地捕捉两条相邻行之间的映射关系。ANMT是一个较强的基线,其表现优于SMT、RNNLM和RNNPG,但低于我们的方法。ANMT和PPG都使用基于注意力的endec框架。主要的区别是,我们的方法在生成诗之前为每一行定义了子主题。ANMT方法只是将前面的文本转换为下一行。如果没有子主题的指导,该系统往往会产生更一般但不那么有意义的结果。相比之下,我们的方法明确地考虑了关键词,对每一行的子主题都有更好的控制。从人工评价结果可以看出,与ANMT相比,该方法在诗意和流畅度方面取得了非常接近的性能,但相关性和含义得分要高得多,验证了子主题预测模型的有效性。 4.自动生成vs人类作的诗我们进行了一个有趣的评估,直接将我们的自动诗歌生成系统与人类诗人进行了比较,这类似于图灵测试。我们从测试集中随机抽取了20首由中国古代诗人写的诗。我们以这些诗的标题作为输入,并通过我们的自动生成系统生成了20首诗。因此,机器生成的诗歌与人类创作的诗歌属于同一主题。然后我们要求一些人类评估者来区分人类所写的诗歌和机器生成的诗歌。我们总共有40名评估者。他们都受过良好教育,拥有学士或更高学历。其中4人为中国文学专业人士,并被分配到专家组。其他36名评估者被分配到正常组。在盲测中,我们每次向评估者展示一对诗及其标题,评估者被要求从三个选项中选择:(1)诗A是人类写的;(2)诗B是人类写的;(3)不能区分哪首是人类写的。 评价结果显示如下图: 5.生成示例除了上表中的古代诗歌外,我们的方法还可以生成基于任何现代术语的诗歌。下表展示了一些示例左诗的标题是啤酒,我们的诗歌规划模型给出的关键词是啤酒,香醇,清爽和醉。右边的标题是一个著名的作家冰心的实体命名的,诗歌规划系统除了冰心之外,还产生了三个关键词:春水、繁星和往事,这些都与作者的作品有关。 结论与未来工作在本文中,我们提出了一种新的两阶段诗歌生成方法,它首先明确地将用户的写作意图分解为一系列子主题,然后使用改进的基于注意力的RNN编码器-解码器框架迭代生成一首诗歌。修改后的RNN enc-dec模型有两个编码器,可以同时编码子主题和前面的文本。人类专家的评估表明,我们的方法优于所有的基线模型,诗歌质量在某种程度上可以与人类诗人相媲美。我们还证明了使用百科全书作为额外的知识来源,我们的方法可以将用户的输入扩展到适当的子主题中,以便生成诗歌。在未来,我们将研究更多的主题规划方法,如PLSA、LDA或word2vec。我们也将把我们的方法应用于其他形式的文学类型,如诗歌、元曲等,或其他语言的诗歌。 我的总结总体来说,整个流程并不是很复杂,思路比较清晰,评价方式也比较特别,但是也能够接收。除此之外,不知道作者有没有尝试将诗词中的平仄特征加进去,加进去后读起来是不是更加流畅呢?后面有机会可以尝试复现一下。当然,这个需要自己去爬取语料,要去复现的话,要做的还不少嘞。其中涉及的一些算法如TextRank也是一个比较有意思的算法,嘎嘎,有时间也可以整一篇文章。fighting!!! |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/27 10:30:20- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |