目录
一、词向量Word2vector
- 语言的表达形式有两种:一种是离散的符号,一种是基于上下文的。eg.我 爱 你
我 100 爱 010 你 001 上面的例子是离散的表示,基于one-hot编码,每个单词之间不存在上下文联系和语义之间的联系。而基于上下文的,比如我爱你,和我喜欢你,通过学习就会发现爱和喜欢这两个词比较解近.
- word2vec是一种方法来评估词间的关系,比如一个词“欢迎”,对应一个多维的词向量,这就可以通过word2vec实现。这个需要有一些前提来实现。
- >大的词表库
- >词表中的每个词都可以通过向量表征
- >有一个中心词c和一个输出词o
- >通过相似度计算来计算c和o同时出现的概率
- >调整词向量获得最大概率
- 损失函数:就是最大似然,基于中心词,预测周围词的概率的连乘,然后取对数求平均再取负号,就变成求最小问题
- 两种模型:skip-gram模型和cbow模型。
- >skip-gram模型,通过中心词求周围词的词向量。
- >cbow模型,与skip-gram相反,通过周围词求中心词的词向量;但是cbow需要注意的是因为多个输入到一个hidden layer 需要词向量求平均,所以会受影响,可能无法很好的表示词和词之间的关系
- 优化方法:hierarchical softmax 和 negative sampling
- >分层的softmax用树结构去存取单词,不使用softmax会使的运算速度变为log级别
- >负采样,就是只用几个词来训练,这样不需要softmax对整个数据集指数求和,自然快了很多;负采样的负样本有一定的采词依据,依据数学公式(归一化,分子是3/4次方)。
- 词向量的局限性:一词多义问题,因为词向量是静态的。
二、Transformer
- 组成:由多个encoder和decoder组成,encoder中包含self-attention(敲黑板,这是重点,自注意力主要表示词间的关系)和feed-forward
- self-attention:自注意力是transformer的核心。其中含有三个权重矩阵分别是WQ,WK,WV;输入的单词,通过embedding,嵌入到一个向量空间中,然后和这三个矩阵相乘,会生成对应的q,k,v向量,其中q代表query,k代表key,v代表value。然后通过,q*k得到整数型的score,这里要注意,比如针对thinking单词自己的q1,它需要去乘自己的k1得到一个score,也需要去乘其他单词的k,去得到另外的score,这个score就代表thinking和这些单词的相关性。然后需要对score进行除以维度开根号,一般是64维,所以除以8.然后softmax即可。对score除的原因在于,防止在softmax中,数值太大,导致数据偏离梯度比较好的范围,可能会弱化词间的关系。别急,这还没完,然后乘以自己的v向量,即可得到一个对应的自己的向量。
- self-attention的输入:需要embedding和positional encoding相结合,这里positional encoding使用的是正余弦的周期函数
- rnn与cnn比较:在语义特征提取能力、任务综合特征抽取能力,两者都ok;但是在长距离特征捕获能力,rnn更好
三、Bert
- 预训练模型+微调
- Bert的结构就是输入+双向的transformer+输出
- Bert的输入的Embedding是三部分:单词的embedding+句子类型(一个句子一个类型)的Embedding+位置的embedding(这里的位置,就是比较普通的位置比如1,2,3,4这样子来表示)
- Bert的预训练的任务主要由两个:MLM(Mask language model)也就是做完形填空的和NSP(Next sentence predict)下个句子预测的
- 目前的预训练模型:
• XLNet• RoBERTa• ALBERT• GPT2• ERNIE• DistilBERT• VideoBERT• FastBERT
作者也是开始逐步了解,和大家分享自己的心得,有不对的地方,欢迎读者指正,一起讨论。感谢。