N3LDG:一种轻量级自然语言处理深度学习库
2019-01-29王潜升余南张梅山韩子嘉付国宏
王潜升 余南 张梅山 韩子嘉 付国宏
黑龙江大学计算机科学技术学院, 哈尔滨 150080; † 通信作者, E-mail: ghfu@hotmail.com
近年来, 深度学习方法在自然语言处理领域很多任务中的性能超越了传统的统计机器学习方法,得到广泛的应用[1]。在训练阶段, 深度学习模型的执行步骤包括前向传播、反向传播和更新参数等,深度学习库能方便地执行这些步骤。Theano[2]、CNTK[3]、Caffe[4]、TensorFlow[5]和PyTorch[6]等已得到广泛的应用[7-10]。
Theano[2]、CNTK[3]、Caffe[4]和TensorFlow[5]在训练前静态地定义计算图, 在训练时对所有实例执行同一个计算图。然而, 在自然语言处理任务中,构建适应所有实例的计算图存在额外的困难, 体现在以下两方面。
1)各实例的长度不一致。补零可使各实例长度一致, 然而补零操作可能影响计算结果。为了避免这个影响, 需对计算结果做裁剪。
2)实例含有结构化信息, 如句法结构。有时我们希望基于这些结构化信息动态地构建计算图, 比如在基于句法的递归神经网络中, 不同的句子实例有着不同的句法结构, 也就对应不同的计算图。
PyTorch等深度学习库则根据不同的实例, 动态地构建不同的计算图。为了利用多核CPU或GPU加速计算, PyTorch要求使用者将可以批量化计算的数据手动合并为张量。比如在计算机视觉任务中,使用者须将多个图像实例合并为一个张量后作为模型的输入。
然而, 在自然语言处理任务中, 手动批量化合并数据存在以下额外的困难: 1)各句子实例须在补零后才能合并为张量; 2)在树结构模型(如递归神经网络)中, 须分析计算图执行步骤后, 将同一执行步骤中处于不同实例上的计算过程批量化。……