一、Word Representations
在2018年之前,我们使用的词向量表征技术主要有三个:Word2Vec、Glove、FastText。但是这三个方法都普遍存在在一些问题,就是无法解决一次多义的问题,即对于同一个词无论上下文的单词是否相同,训练出来的词向量都是一样的。
通常我们训练词向量的时候,首先会初始化所有的词向量,并且在训练过程中不断地改变这些向量的值,需要注意的是训练的目标是我们自己定义的任务,而词向量仅仅是副产物而已。
当我们手中的语料不足时训练出来的词向量效果不会很理想,这是用通常会使用他人已经训练好的词向量,并且以预训练的词向量来作为初始值,在训练过程中冻结或者微调。
我们训练好的词向量是不可能涵盖所有词的(这里主要有两个原因,一是训练语料中本来就不存在这些词,二是这些词在训练语料中出现次数过少),这就会存在一个未登录词的问题,遇到这个问题的时候我们怎么处理呢?
首先,最简单和最普遍的解决方法就是将所有未登录的词映射为,并且为它训练一个词向量。但是这种方法存在缺点,它把这些未登录词都视为相同,不能区分它们的区别。
为了解决上面的方法存在的问题,人们开始考虑训练字符集别的词向量。
除此之外还有一些其他的方法:
1.如果测试时的单词出现在未受监督的单词嵌入中,请使用测试时的向量。
2.对于其他单词,只需给它们分配一个随机向量,将它们添加到词汇表中即可。
3.将事物折叠成单词类(如未知数字、大写的事物等),并为每个类设置一个
二、ELMO
下面我们来看下这个神经网络:
在一个NLM中,我们快速地通过LSTM层获得单词向量(可能只在语料库上训练)。这些LSTM层被训练来预测下一个单词。但是这些语言模型在每个位置都产生了上下文特定的单词表示!
下面来介绍一些经典的模型:
1、Peters et al. (2017): TagLM – “Pre-ELMo”
论文地址:https://arxiv.org/pdf/1705.00108.pdf
核心思想:通过上下文中获取单词的含义,但只在task-labeled的小任务(例如,NER)上使用RNN来进行训练。
算法的核心步骤如下:
1.预训练词向量和语言模型
2.在输入序列中准备好单词嵌入和语言模型嵌入。
3.在序列标记模型中同时使用单词嵌入和语言模型嵌入。
该模型结构图如下: