在 Keras 的 seq2seq 模型中规避独热(one-hot)编码输入和输出数据

许多常见的序列生成模型都采用独热法(one-hot)来编码数据栗子。 但是对于中文这种常见字就几千个,常见词组更是动辄上百万的语言来说,独热法所需要建立的向量未免太过于占用内存空间,甚至很小的训练集就会挤爆内存,所以我们需要一种可以用单个数字就编码单个字/词的方式。

输入的一段,可以用一个嵌入层查找来解决从数字到向量的映射 (keras.layers.embeddings.Embedding)。而输出段就没有这么直接的方式,毕竟 seq2seq 类模型的输出是一个词汇表的概率分布而不是单个词,不做额外处理的话就无法匹配上维度。

方法还是有的,那就是对 keras 的损失函数 categorical_crossentropy 做一个简单的打包,在处理输出之前临时做一个独热的转换。

Talk is cheap, here's the code: