之前介绍了数据集,接下来将数据集生成batch的训练数据,并增加一些符号以及转换成数字。
整体介绍
对于输入的中文,想要在模型中体现,必然不可能以汉字的形式呈现,而是使用embedding将这个字对应到一个n维的向量中去,而为了能够较快的完成这个对应任务,需要首先把汉字转换成一个序号,由于使用了别人训练好的embedding,因此也要使用别人的字符序号。
将一句话转换成序号后,还需要做一些“加减法“
- 对于同一个batch的数据,根据最长的句子长度做padding。
- target句子中要有特殊符号eos表示句子结束
- 对于不认识的字(别人的训练集中没有的字)要使用unk符号代替
上图展示了将诗句转化成序号列表的样式(最终输出的没有中文,那一栏是长度,这里是改了程序做示范),比如“妙吟难得”就变为[1264, 988, 320, 60, 0, 0, 0],这是因为这个batch中最大的句子是7个字,因此得到的长度也是7,而它不够长就要pad。而输出句子如’云屏一倍清寒’变成了[19, 1402, 22, 1648, 141, 211, 3]],可以发现长度多了一位,这是由于是target句子,多了一个终止符,终止符的id定义成3。
代码
直接看代码
import pandas as pd
import random
import pickle
def padding_seq(seq):
results = []
max_len = 0
for s in seq:
if max_len < len(s):
max_len = len(s)
for i in range(0, len(seq)):
l = max_len - len(seq[i])
results.append(seq[i] + [0 for j in range(l)])
return results
class reader():</