自然语言处理的基本方法基于词向量的表达:
1.count-based 设置一个词窗口,然后根据这个词窗口生成共现矩阵,然后进行SVD分解
2.prediction-based
这种方法最后一步softmax的计算量太大,要对几十万维的向量进行点积,一般流行把softmax改为sigmoid函数,正确的例子,结果靠近1,负采样得到一些错误的例子,结果靠近0,一起参与训练
ELMO 一共4层
基于上下文的embedding,一个词对应的词向量根据它的上下文,它具体表达的意思,是会变的
全名 embeddings from language models,
双层双向LSTM预训练,也是prediction-based,输入层表示单词特征,第二层表示句法特征,第三层表示语义特征,这三个层的code可以一起作为下游任务的输入,具体的权重,在下游任务训练时获得
此模型可以获得某个单词的具体意思,同一个单词在2个句子中的意思是否相同,必须将两个句子全部输入模型,获得对应单词的code,再进行比较
NNLM 一共4层
1:输入层,多个输入
2:投影层,有多少个输入,就有多少个分布式词向量。输入层到投影层的矩阵是共享的
3:tanh
4:softmax输出层,输出预测的下一个词的one-hot encoder
CBOW 一共3层
1:输入层,多个输入
2:投影层,输入对应的词向量求和
3:softmax输出层,输出预测的下一个词的one-hot encoder
Skip-gram 一共3层
1:输入层,1个输入
2:投影层,1个词向量
3:softmax输出层,输出预测的周围N个词的one-hot encoder
上面的softmax由于需要跟所有的词向量进行点积,极其消耗时间,所以提出了以下2种解决方法:
1:层次softmax,建立一棵霍夫曼树,叶子节点对应一个个词,从根节点到叶子节点的一个个非叶节点代表一个个sigmoid函数,一次类别分叉。通过输入和输出建立一条从根节点到叶节点的链路,优化这条链路上的非叶节点的参数
2:负采样。将最后的softmax改为sigmoid,将一个正确的one-hot encoder和k个错误的one-hot
encoder都作为输入,输入正确的one-hot encoder,转化为词向量,结果趋向1,输入采样出来的错误的one-hot
encoder,转化为词向量,结果趋向于0