预训练
相似的任务A和任务B,任务A已经通过大数据预训练好A模型,A模型就可以经过调整(微调、冻结)适用于小数据量的任务B
如果AB任务不相似,就通过BERT来解决(后面再提)
语言模型
想计算一句话的下一个词出现的概率,需要涉及这句话所有词
统计语言模型(n元语言模型
如果使用n元语言模型,只考虑下一个词的前n个词即可,可以大大减少计算量
如果训练数据里没有想要预测的结果,可以通过平滑策略生成一个概率极小的值,而不是0(具体请搜索平滑策略的内容
词向量
onehot编码获取词向量
- 最开始是通过onehot编码得到词向量,但是onehot编码占用的空间太大了
NNLM神经网络语言模型获取词向量
- 后面NNLM模型原本是用来预测下一个词的,但是可以训练出一个Q矩阵得到词向量,比onehot编码占用空间更小,十个向量可以表示一百个词。
word2vec模型获取词向量
- 再然后专门发明了word2vec(CBOW、skip-gram)得到Q矩阵做词向量。但是word2vec没法解决多义词的问题,比如吃的苹果和苹果手机的词向量一样,于是发明ELMO解决多义词问题
ELMO模型获取词向量
发明ELMO解决多义词问题——不仅训练Q矩阵,还要把词的上下文信息融入Q矩阵中
下游任务改造
给出一句话,先使用独热编码,再使用Word2Vec 预训练好的Q矩阵直接得到词向量,然后进行接下来的任务
- 冻结:可以不改变Q矩阵
- 微调:随着任务的改变,改变Q矩阵
Attention(QKV)
计算查询对象Q(正在看图的我) 和被查询对象V(被看的图)的相似度,相似度越近,说明V对于Q更重要
通过点乘计算Q和K(K是从哪来的?原来的V?)里的每一事物(k1、k2、kn) 的相似度,然后softmax计算出概率,然后乘V,得到新的V’,里面包含了新的信息(哪些更重要、哪些不重要)
Self-Attention
QK相乘求相似度,