NLP教程:教你如何自动生成对联

桃符早易朱红纸,杨柳轻摇翡翠群 ——FlyAI Couplets

体验对对联Demo: https://www.flyai.com/couplets
对上联进行词向量编码
对真实下联进行词袋编码

Seq2Seq + Attention 模型解读

公式中,Ci代表第i个位置的中间状态C,Lx代表输入序列的全部长度,hj是第j个位置的Encoder隐层输出,而aij为第i个C与第j个h之间的权重。通过这种方式,对于每个位置的源输入就产生了不同的C,也就是实现了对不同位置单词的‘注意力’。权重aij有很多的计算方式,本项目中使用使用小型神经 络进行映射的方式产生aij。

模型代码实现

Encoder

Encoder的结构非常简单,是一个简单的RNN单元,由于本项目中输入数据是已经编码好的词向量,因此不需要使用nn.Embedding() 对input进行编码。

Attentation机制

Attentation权重的计算方式主要有三种,本项目中使用concatenate的方式进行注意力权重的运算。代码实现如下:

Decoder

Decoder同样是一个RNN 络,它的输入有三个,分别是句子初始值,hidden tensor 和Encoder的output tensor。在本项目中句子的初始值为‘“’代表的数字1。由于初始值tensor使用的是词袋编码,需要将词袋索引也映射到词向量维度,这样才能与其他tensor合并。完整的Decoder代码如下所示:

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年1月26日
下一篇 2019年1月27日

相关推荐