Task1
word2vec Objective function
1.likelihood
对于每个位置t=1,…T,在大小为m的固定窗口内预测上下文单词,给定中心词wj (thrta 为所有需要优化的变量)
2.损失函数
在likelihood基础上进行两个改动:
加log - 将连乘转化为加和;
-1/T - 将极大似然率转化为极小损失率
如何计算概率P(中心词c出现的情况下,上下文词o出现的概率) - 使得经常上下文出现的词语有相似的向量:
每个词有两个向量,u表示该词作为上下文词的向量,v表示该词作为中心词的向量,如uw和vw分别表示w这个单词做上下文词和中心词的向量
公式中,两个向量点乘,向量越相似,点乘结果越大,归一后转化为概率值,也越大。模型训练使得具有相似上下文的单词具有相似的向量;
该分布与上下文所在的具体位置无关,所以(上下文单词)在每个位置预测都是一样的
Task2
奇异值分解原理:
https://zhuanlan.zhihu.com/p/32600280
word2vec:
该模型参数是词向量,通过目标函数使得模型学习到词向量
word2vec是一个软件包,实际上包含:
- 两种算法:
skim-grams:输入中心词并预测上下文单词
Continuous bag of words (CBOW):输入上下文单词并预测中心词向量 - 两个训练方法:negative sampling (抽取负样本) 和 hierarchical softmax(通过有效树结构计算所有词概率,从而定义目标)
CBOW:
Skip-Gram
skip-gram模型对每个上下文单词一视同仁:该模型计算每个单词在上下文出现的概率,与它到中心单词的距离无关。hierarchical softmax对低频词表现更好,负采样对高频词和较低维度向量表现更好
task 3
subword:取一个介于字符和单词之间成分为基本单元建立的模型
Byte Pair Encoding(BPE):寻找经常出现在一起的Byte对,合并成一个新的Byte加入词汇库中。即若给定了文本库,若我们的初始词汇库包含所有的单个字符,则我们会不断的将出现频率最高的n-gram的pair作为新的n-gram加入词汇库中,直到达到我们的要求。
可见此时出现频率最高的n-gram pair是“e,s”,出现了9次,因此我们将“es”作为新词加入到词汇库中同时更新文本库。这时词汇库中出现频率最高的n-gram pair是“es,t”,出现了9次,因此我们将“est”加入词汇库中同时更新文本库。依次类推,可以逐渐的通过增加新的n-gram的方式达到我们的目标。对于现实生活中有很多词汇量非常大的task,这种通过BPE逐步建立词汇库的方式就显得非常有用了。
Google 的NMT模型也是从BPE演化而来,一个叫wordpiece model,一个叫sentencepiece model。其中wordpiece model每次不是选取出现频率最高的n-gram, 而是每次选取能使得其所使用的语言模型的复杂度减少最多的n-gram。而sentencepiece model则是将词与词之间的空白也作为一种单词,这样整个sentence就可以直接进行处理而不需要预处理成单词后再embedding。
Task 4
word vectors 问题:每个单词不具有多个属性
ELMO:可解决一词多义问题,第一使用了多层LSTM,第二增加了后向语言模型(backward LM)
lower layer学到的是lower-level syntax, 比如part-of-speech tagging, syntactic dependencies, NER; 而higher layer学到的是higher-level semantics, 比如sentiment, semantic role labeling, question answering, SNLI
BERT(Bidirectional Encoder Representations from Transformers):和GPT相似, 不过是双向的. 主要思想如下
一、15%的词语被mask住(希望把这个词填回来), 然后mask这个词汇生成的embedding放到一个Linear Multi-class Classifier里面去预测这个词. 也就是说如果两个词有类似的语义, 他们就会有类似的embedding.
![在这里插入图
- 二、句子分隔符, CLS是一个特殊的token, 这个位置输出的embedding会被当做输入放在Linear Binary Classifier中输出这个分类. 这个CLS的位置是没有关系的, 因为BERT的内部就是self-attention.