【NLP】《Chinese Poetry Generation with Planning based Neural Network》的阅读笔记
作者:互联网
背景
前段时间回顾和学习了基于RNN+Attention与基于CNN+Attention的seq2seq模型:【NLP】seq2seq 由浅入深——基于Rnn和Cnn的处理方式,于是现在想找一些案例练练手。
seq2seq最常见的实践就是翻译,看看网上大多是什么英语到法语,到德语的一些案例。说实话,能不能整点能看懂的呢?或许大家都没有公开的语料吧,坦白讲我也没有,哈哈。那就去github上找找。
除了机器翻译,seq2seq还是有一些比较有意思的落地场景。比如说,我们打电话到海底捞预定,一般情况下接电话的女声,其实是一个机器人来帮你预定,听起来还是比较智能的。这里就用到了seq2seq,但是涉及到语音处理。另一个是华为团队,通过seq2seq为基础设计的模型实现了计算机对微博的自动回复,并通过模型间的对比得到了一系列有意思的结果。如下图,post为微博主发的文,其余四列为不同模型对该条微博做出的回复。
在网上搜到了一群中科院的小哥写的文章:Chinese Poetry Generation with Planning based Neural Network。初步看了一下还是蛮有意思的,虽然是2016年发的文章,但是是结合中文的一些任务,从我自身来讲我还是希望多看到一些研究是针对中文,不要总是想着发论文拿一些英文语料去做一些研究,这样我们中文信息处理总是会比英文晚一步。原文下载地址:Chinese Poetry Generation with Planning based Neural Network。
下面就到作为论文阅读笔记,或者是原文的翻译吧。又开始督促自己学英语啦,虽然是中国人写的英语,但是总比自己写的要好,值得学习,嘎嘎!!!
摘要
中文的诗词生成在自然语言处理中是一个比较大的挑战。这篇论文提出了一个比较新奇的两段式生成诗的方法,第一步是根据书写人的书写意向生成几个子主题,第二步使用修改的基于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的两阶段程序的说明如下图:
假设正在写一首由
N
N
N行组成,
l
i
l_i
li表示诗的第
i
i
i行。在诗歌规划阶段,输入查询被转换为
N
N
N个关键字(
k
1
,
k
2
,
⋯
,
k
N
k_1,k_2,\cdots,k_N
k1,k2,⋯,kN),
k
i
k_i
ki代表第
i
i
i行诗的子主题。在诗歌生成阶段,
l
i
l_i
li的生成是通过
k
i
k_i
ki和
l
1
l_1
l1到
l
i
−
1
l_{i-1}
li−1行诗作为输入的,
l
1
l_1
l1到
l
i
−
1
l_{i-1}
li−1行诗连接起来构成一个序列。然后诗可以依次生成,每一行都根据一个子主题和前面的所有主题生成。
2. 规划作诗
2.1 关键词提取
用户的输入写入意图可以用一系列单词来表示。在诗歌规划阶段有一个假设,从输入查询 Q Q Q中提取的关键字数量必须等于诗中的 N N N行数,这可以确保每一行只取一个关键字作为子主题。如果用户的输入查询 Q Q Q太长,我们需要提取最重要的 N N N个单词,并保持原始顺序作为关键字序列,以满足需求。
文中使用的是TextRank算法去评估重要的词语。这是一种基于PageRank的基于图的排名算法。每个候选词由图中的一个顶点表示,并根据两个词的共现性在它们之间添加边;边的权重是根据两个词的共现强度的总数来设置的。
TextRank分数
S
(
V
i
)
S(V_i)
S(Vi)被初始化为默认值(例如1.0),并根据以下公式进行迭代计算,直到收敛:
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)wjkwjiS(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=argmaxkP(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中扩展新的关键词。我们检索那些满足以下所有条件的条件作为候选关键字:
- 这个词在 k i k_i ki周围 [ − 5 , 5 ] [-5,5] [−5,5]的窗口里
- 这个单词的词性是形容词或名词;
- 这个词被诗歌语料库的词汇所覆盖
然后选择文本排名得分最高的候选词作为关键词。
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中,如下:
r
c
=
[
r
T
k
→
r
1
←
]
r_{c}=\left[\begin{array}{c} \overrightarrow{r_{T_{k}}} \\ \overleftarrow{r_{1}} \end{array}\right]
rc=[rTk
r1
]
然后将
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的语义,如下图:
注意,当我们生成第一行时,前面的文本的长度为零,即
T
x
=
0
T_x=0
Tx=0,那么向量序列
h
\mathbf{h}
h只包含一个向量,即
h
=
[
h
0
]
h=[h_0]
h=[h0],因此,第一行实际上是由第一个关键字生成的。
对于解码器,我们使用另一个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=argymaxP(y∣st,ct,yt−1)
经过每一个预测,
s
t
s_t
st会被如下公式更新:
s
t
=
f
(
s
t
−
1
,
c
t
−
1
,
y
t
−
1
)
s_{t}=f\left(s_{t-1}, c_{t-1}, y_{t-1}\right)
st=f(st−1,ct−1,yt−1)
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−1atjhj
h
j
h_j
hj是编码器输出中的第
j
j
j个隐藏状态。权重
a
t
j
a_{tj}
atj是由如下公式计算出:
a
t
j
=
exp
(
e
t
j
)
∑
k
=
0
T
h
−
1
exp
(
e
t
k
)
a_{t j}=\frac{\exp \left(e_{t j}\right)}{\sum_{k=0}^{T_{h}-1} \exp \left(e_{t k}\right)}
atj=∑k=0Th−1exp(etk)exp(etj)
其中:
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=vaTtanh(Wast−1+Uahj)
e
t
j
e_{tj}
etj是在时间步长
t
t
t时在
h
j
h_j
hj上的注意力得分。下一个单词
y
t
y_t
yt的概率可以定义为:
P
(
y
t
∣
y
1
,
…
,
y
t
−
1
,
x
,
k
)
=
g
(
s
t
,
y
t
−
1
,
c
t
)
P\left(y_{t} \mid y_{1}, \ldots, y_{t-1}, \mathbf{x}, \mathbf{k}\right)=g\left(s_{t}, y_{t-1}, c_{t}\right)
P(yt∣y1,…,yt−1,x,k)=g(st,yt−1,ct)
其中 g ( ⋅ ) g(\cdot) g(⋅) 是一个输出 y t y_t yt的概率的非线性函数。
诗歌生成模型的参数被训练,以最大限度地提高训练语料库的对数似然:
arg
max
∑
n
=
1
N
log
P
(
y
n
∣
x
n
,
k
n
)
\arg \max \sum_{n=1}^{N} \log P\left(\mathbf{y}_{\mathbf{n}} \mid \mathbf{x}_{\mathbf{n}}, \mathbf{k}_{\mathbf{n}}\right)
argmaxn=1∑NlogP(yn∣xn,kn)
实验
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与人类评价相关性不大。因此,我们进行了一个人类研究来评估诗歌生成模型。我们对人类评价者使用四种评价标准来评价诗歌:“诗意”、“流畅性”、“相关性”、“意义”。详细的说明可以如下表:
各方面的得分从1到5分,得分越高越好。每个系统产生20个5字的四行诗和20个7字的四行诗。所有生成的诗歌都由5位专家进行评估,并平均评分分数作为最终分数。
3.2 基线
文中实现了几种诗歌生成方法作为基线,并对所有方法采用了相同的预处理方法。
SMT.: 一种基于统计机器翻译的中国诗歌生成方法。一首诗是通过“翻译”到下一行迭代生成的。
RNNLM:一种生成文本序列的方法。一首诗的几行被作为一个角色序列连接在一起,用于训练RNNLM。
RNNPG:在基于RNN的诗歌生成器的方法中,第一行由标准RNNLM生成,然后根据前一行编码的上下文向量迭代生成所有其他行。
ANMT:基于注意力的神经机器翻译方法。它将该问题视为一个机器翻译任务,这类似于传统的SMT方法。主要区别是在ANMT中,机器翻译系统是一个标准的基于注意力的RNN enc-dec框架.
3.3 结果
给出了专家评价的结果如下:
我们可以看到,我们提出的方法,基于规划的诗歌生成(PPG),在平均分上优于所有的基线模型。结果与5个字和7个字诗的设置一致。
SMT生成的诗歌的诗性优于RNNLM,说明基于翻译的方法可以更好地捕捉两条相邻行之间的映射关系。ANMT是一个较强的基线,其表现优于SMT、RNNLM和RNNPG,但低于我们的方法。ANMT和PPG都使用基于注意力的endec框架。主要的区别是,我们的方法在生成诗之前为每一行定义了子主题。ANMT方法只是将前面的文本转换为下一行。如果没有子主题的指导,该系统往往会产生更一般但不那么有意义的结果。相比之下,我们的方法明确地考虑了关键词,对每一行的子主题都有更好的控制。从人工评价结果可以看出,与ANMT相比,该方法在诗意和流畅度方面取得了非常接近的性能,但相关性和含义得分要高得多,验证了子主题预测模型的有效性。
4.自动生成vs人类作的诗
我们进行了一个有趣的评估,直接将我们的自动诗歌生成系统与人类诗人进行了比较,这类似于图灵测试。我们从测试集中随机抽取了20首由中国古代诗人写的诗。我们以这些诗的标题作为输入,并通过我们的自动生成系统生成了20首诗。因此,机器生成的诗歌与人类创作的诗歌属于同一主题。然后我们要求一些人类评估者来区分人类所写的诗歌和机器生成的诗歌。我们总共有40名评估者。他们都受过良好教育,拥有学士或更高学历。其中4人为中国文学专业人士,并被分配到专家组。其他36名评估者被分配到正常组。在盲测中,我们每次向评估者展示一对诗及其标题,评估者被要求从三个选项中选择:(1)诗A是人类写的;(2)诗B是人类写的;(3)不能区分哪首是人类写的。
评价结果显示如下图:
我们可以看到,49.9%的机器生成的诗歌被错误地识别为人类所写的诗歌,或者不能被正常的评估者所区分。我们可以看到,49.9%的机器生成的诗歌被错误地识别为人类所写的诗歌,或者不能被正常的评估者所区分。我们可以从结果中得出两个结论:(1)在正常用户的标准下,我们的机器生成诗歌的质量非常接近人类诗人;(2)但从专业专家的角度来看,机器生成的诗歌与人类写的诗歌相比仍然有一些明显的不足。下图举了一个从盲测中选择的两首诗的例子。
5.生成示例
除了上表中的古代诗歌外,我们的方法还可以生成基于任何现代术语的诗歌。下表展示了一些示例左诗的标题是啤酒,我们的诗歌规划模型给出的关键词是啤酒,香醇,清爽和醉。右边的标题是一个著名的作家冰心的实体命名的,诗歌规划系统除了冰心之外,还产生了三个关键词:春水、繁星和往事,这些都与作者的作品有关。
结论与未来工作
在本文中,我们提出了一种新的两阶段诗歌生成方法,它首先明确地将用户的写作意图分解为一系列子主题,然后使用改进的基于注意力的RNN编码器-解码器框架迭代生成一首诗歌。修改后的RNN enc-dec模型有两个编码器,可以同时编码子主题和前面的文本。人类专家的评估表明,我们的方法优于所有的基线模型,诗歌质量在某种程度上可以与人类诗人相媲美。我们还证明了使用百科全书作为额外的知识来源,我们的方法可以将用户的输入扩展到适当的子主题中,以便生成诗歌。在未来,我们将研究更多的主题规划方法,如PLSA、LDA或word2vec。我们也将把我们的方法应用于其他形式的文学类型,如诗歌、元曲等,或其他语言的诗歌。
我的总结
总体来说,整个流程并不是很复杂,思路比较清晰,评价方式也比较特别,但是也能够接收。除此之外,不知道作者有没有尝试将诗词中的平仄特征加进去,加进去后读起来是不是更加流畅呢?后面有机会可以尝试复现一下。当然,这个需要自己去爬取语料,要去复现的话,要做的还不少嘞。其中涉及的一些算法如TextRank也是一个比较有意思的算法,嘎嘎,有时间也可以整一篇文章。fighting!!!
标签:NLP,基于,based,Network,模型,诗歌,生成,关键字,方法 来源: https://blog.csdn.net/meiqi0538/article/details/120594080