论文部分内容阅读
在自然语言处理领域,常常需要从大量语料库中提取规则和训练模型,很多算法需要不断迭代逼近最优解,往往具有复杂的逻辑和计算,因此该领域的应用常常面临着一个海量数据、高计算量的训练过程,高性能计算成为了自然语言处理领域的迫切需求。由于物理和设计上面的限制,多核并行计算已经遇到瓶颈,异构加速平台成为了高性能计算领域的一个主要手段。GPU作为一种高度并行的可编程部件,拥有极强的计算能力,已经普遍用于通用计算中。 词向量是自然语言处理的核心内容。分布式词向量能反映词与词的语义相似性,是目前主流的词表示方法。获得分布式词向量最主要的方法是word2vec,它具有较快的训练速度和较好的词向量质量。SPPMI算法是以word2vec为基础,拥有完善的理论证明,在某些情况下获得的词向量会更好。本文中主要以GPU为加速平台,利用CUDA编程框架,研究了word2vec和SPPMI算法的并行优化。 Word2vec得到的词向量具有很好的语义相似性。Word2vec模型包含了CBOW和Skip_gram两种模型,每种模型中分别包含了层次Softmax和Negative Sampling两种算法。本文在GPU上实现了它的四种算法,并取得不错的加速性能。在对层次化Softmax算法并行化时,在输出层用满二叉树结构代替了哈夫曼树结构,使得在这种模型在GPU上更容易并行实现。本文设计了一种在GPU上自适应的学习速率设置方法,使得算法更有效率。在Nvidia Tesla C2050的平台上,获得了14-28倍的加速效果。 Word2vec中缺少充分的理论证明,SPPMI算法以word2vec的Skip-gram模型中的Negative Sampling算法为基础,证明了模型中所有观测词和其上下文的点积可以构成一个实数矩阵,该矩阵中每个元素是对应词和上下文的点互信息。一般用SVD方法去求解SPPMI算法,但SVD方法在GPU上实现很困难。本文中提出用SGD方法去估计SPPMI算法中模型的参数,很方便在GPU上实现。观测词与上下文点互信息的矩阵是一个高维稀疏矩阵,本文使用了一种简单的稀疏存储格式,解决了这个矩阵带来的访存不均衡问题。本文中还针对SPPMI算法提出了一种数据重排的方法,减少在GPU上计算时的数据冲突。在Nvidia Tesla C2050的平台上,本文实现获得了超过1000倍的加速比。