ELMO预训练模型解析(附代码)EBET易博

  新闻资讯     |      2023-10-06 12:53

  EBET易博官网NLP领域中词向量的表示是一个很重要的环节,把词表示成相应维度的向量并包含足够多且正确的词信息,是词向量表示的主要目标;

  早期都是使用静态词向量,比如基于局部上下文预测的word2vec,基于全局共现信息的GloVe回归,都是将一个词在整个语料库中的所有信息聚合到一个词向量中,因此是静态的;

  问题在于对那些多义词,例如apple既可以是公司名称,也可以是苹果的意思,取决于具体的上下文,这就要求一个词不能只有一个向量表示,在进行下游任务(分类、标注等)之前需要根据上下文信息选择合适的含义表示,ELMo的提出就是为了解决这个问题,主要内容就是预训练动态词向量。

  这里给出的是用LSTM做语言模型的ELMo,和原论文一样,这里的语言模型也可以使用transformer等;

  先不细究模型,首先我们需要知道工作的大致流程,因为是要预训练,模型的输入是大量的句子,我们的目标是根据当前词预测下一个词,依次来自训练得到参数,后面会提到双向语言模型,以前向来看,其target就是input句子所有词后移一位,比如说输入是句子bos I love cake eos,对应的target就是I love cake eos pad。

  首先需要根据数据构建词表vocab_w和字符表vocab_c,需要统计出现过的词和字符,根据自己设定的出现频率下限构建这两个表,同时要在句子开始和结尾添加BOS、EOS标志、词的开头和结果添加BOW、EOW标志;

  在输入表示层,主要的操作都是对字符进行的,也就是说,最后得到的输出是每个词独立的表示,这个表示之和组成词的字符相关,并没有句子的上下文信息;

  每一层卷积后进行池化,这样一个卷积核对一个词只得到一个数字的表示,卷积核的个数就是这一层最终词向量的维度,这一步的目的就是聚合组成单词的字符信息,来得到单词的表示,这个结果是上下文无关的,而单词一般不会很长,使用卷积效果不会受到长距离依赖的影响,同时,卷积核大小也可以设置多种,以得到丰富的信息;

  接下来是两层Highway神经网络,这部分把输入通过Linear层转换成维度

  这一步的目的就是在输入和输出之间直接简历连接,输出层可以直接将梯度回传到输入层,避免梯度爆炸或弥散

  使用双向语言模型的目的是得到词上下文的信息,这里使用3层LSTM,每一层包含两个LSTM(单向),一个对输入进行前向计算,另一个进行反向计算,分别获取双向的信息,不同层可以获取到不同层面的信息,低层包含较多语法信息,高层则有更多语义信息,这些信息都包含在每层的隐藏状态中,最后对隐藏状态进行组合就可以得到最终的词向量,这时候已经加入的动态的上下文信息了。

  除了输入表示层和双向语言模型,最后用一个线性层映射到词表维度,以便训练时计算交叉熵损失