review: Word2vec: More details
How do we have usable meaning in a computer?
wordNet的问题:?
1. 词语跟词语之间存在一定的语境差别 2. 有些单词的新含义缺少 3. 需要主观调整 4. 无法计算单词相似度
word2vec
步骤:
1. 寻找大量的文本 2. 固定词汇表中的每个单词都有一个向量表示 3. 文本中的每一个位置t,均存在中心词c和上下词o 4. 使用c和o的词向量相似性来计算给定c和o的概率 5. 不断调整词向量来最大化这个概率
word2vec的一些参数:
1. U的每一行都是一个单词的词向量,点乘之后通过softmax可以得到概率分布,从而得到上下文分布。但是该分布和你在上下文哪个位置是无关的, 2. We want a model that gives a reasonably high probability estimate to all words that occur in the context (fairly often)----我们希望给出一个合理的高概率估计 3. 去除一些停用词
更细的细节
为什么每个单词都需要训练两个词向量
1. 更容易优化,最后都取平均值 2. 可以每个单词只个向量
两个模型变体
1. Skip-grams (SG)输中词并预测上下中的单词 2. Continuous Bag of Words (CBOW)输上下中的单词并预测中词
之前直使softmax(简单但代价很的训练法)
接下来使负采样法加快训练速率
The skip-gram model with negative sampling (HW2)
原始的论文中skip-gram模型是最大化的,这里给出:
课程中的公式:
我们希望中词与真实上下单词的向量点积更,中词与随机单词的点积更
k是我们负采样的样本数
这里的0.75次方是选择的比较好的,没有科学依据
But why not capture co-occurrence counts directly?共现矩阵
共现矩阵 X
1. 两个方法:windows vs. full document 2. Window :与word2vec类似,在每个单词周围都使⽤Window,包括语法(POS)和语义信息 3. Word-document 共现矩阵的基本假设是在同篇章中出现的单词更有可能相互关联。假设单词i出现在章 中j,则矩阵元素$X_{ij}$加,当我们处理完数据库中的所有章后,就得到了矩阵 X,其为 |V|*M,其中|V|为词汇量,而M为文章数,这构建单词章co-occurrencematrix的法也是经典的Latent Semantic Analysis所采的。{>>潜在语义分析<<}
利某个定窗中单词与单词同时出现的次数来产⽣window-based (word-word) co-occurrence matrix
let me to tell you a example: 句子
1. I like deep learning. 2. I like NLP. 3. I enjoy flying.
则我们可以得到如下的word-word co-occurrence matrix:
使共现次数衡量单词的相似性,但是会随着词汇量的增加增矩阵的,并且需要很多空间来存储这维矩阵,后续的分类模型也会由于矩阵的稀疏性存在稀疏性问题,使得效果不佳。我们需要
对这矩阵进降维,获得低维(25-1000)的稠密向量
how to reduce the dimensionality?
方法一: SVD分解
方法二: Ramped windows that count closer words more----将window倾斜向能统计更接近的单词中
方法三: 采用person相关系数
glove
两种方法:
1. 基于计数:使整个矩阵的全局统计数据来直接估计:
优点
缺点
2. 转换计数:定义概率分布并试图预测单词
优点
缺点
Encoding meaning in vector differences
采用共现矩阵的思想对meaning进行编码
为什么采用比值有用?这里摘抄至网上:
假如我们想区分ice(固体)和stream(蒸汽),它们之间的关系可通过与不同单词x的共线矩阵相似性比值来秒速,比如p(solid | ice)和p(solid | stream)相比,虽然它们之间的值都很小,不能透露有效消息,但是它们的比值却很大,所以相比之下,solid更常见的用来表示ice而不是stream
我们如何评判在线性表达下的共现矩阵相似度
1. log-bilinear 模型: 2. 向量差异:
公式推导部分来啦,非常非常重要的目标函数优化
基于对于以上概率比值的观察,我们假设模型的函数有如下形式:
其中,代表了context vector, 如上例中的solid, gas, water, fashion等。则是我们要比较的两个词汇, 如上例中的ice,steam。
F的可选的形式过多,我们希望有所限定。首先我们希望的是F能有效的在单词向量空间内表示概率比值,由于向显空问是线性率间,一个自然的假设是 F 是关于同显 的差的形式:或:
在此,作者又对其进行了对称性分析,即对于word-word co-occurrence,将向量划分为center word还是context word的选择是不重要的,即我们在交换与的时候该式仍然成立。如何保证这种对称性呢?
我们分两步来进行, 首先要求满足该方程的解为 F=exp (参考上面的评价方法)同时与相比较有
所以,
注意其中破坏了交换与时的对称性, 但是这一项并不依赖于 k 所以我们可以将其融合进关于的bias项第二部就是为了平衡对称性, 我们再加入关于的bias项我们就可以得到的形式。另一方面作者注宣到模型的一个缺点是对于所有的co-occurence的权重是一样的,即使是那些较少发 生的co-occurrence。作者认为这些可能是噪声声,所以他加入了前面的项来做weighted least squares regression模型,即为的形式。
其中权重项 f 需满足一下条件:
- f(0)=0,因为要求 是有限的。
- 较少发生的co-occurrence所占比重较小。
- 对于较多发生的co-occurrence, f(x) 也不能过大。
- 优点
- 训练快速
- 可以扩展到型语料库
- 即使是语料库和向量,性能也很好
How to evaluate word vectors?
- 与NLP的般评估相关:内在与外在
- 内在
- 对特定/中间⼦任务进⾏评估
- 计算速度快
- 有助于理解这个系统
- 不清楚是否真的有,除与实际任务建了相关性
- 对真实任务的评估
- 计算精确度可能需要很时间
- 不清楚系统是问题所在,是交互问题,还是其他系统
- 如果另个系统替换个系统可以提精确度
Intrinsic word vector evaluation
- 词向量类⽐a:b = c:?,类似于之前的男人对国王,求女人对?
英文解释: This metric has an intuitive interpretation. Ideally, we want xb−xa = xd −xc (For instance, queen – king = actress – actor). This implies that we want xb−xa + xc = xd. Thus we identify the vector xd which maximizes the normalized dot-product between the two word vectors (i.e. cosine similarity). - 一些结果举例子:
结论
1. 300是个很好的词向量维度 2. 不对称上下(只使单侧的单词)不是很好,但是这在下游任务重可能不同 3. window size 设为 8 对 Glove向量来说较好 4. window size设为2的时候实际上有效的,并且对于句法分析是更好的,因为句法效果常局部 5. 当词向量的维度不断变大的时候,词向量的效果不会一直变差,并且会保持平稳 6. glove的训练时间越长越好 7. 数据集越大越好,尽量使用百科类数据集合 8. 使用余弦相似度
Another intrinsic word vector evaluation
the problem:Most words have lots of meanings!(一词多义问题)• Especially common words • Especially words that have existed for a long time
method1: Improving Word Representations Via Global Context And Multiple Word Prototypes (Huang et al. 2012) -------将常词的所有上下进聚类,通过该词得到些清晰的簇,从将这个常词分解为多个单词,例如 bank_1, bank_2, bank_3
method2: Linear Algebraic Structure of Word Senses, with Applications to Polysemy (Arora, …, Ma, …, TACL 2018)
Different senses of a word reside in a linear superposition (weighted sum) in standard word embeddings like word2vec -----------采用加权和的形式进行处理
令人惊讶的是,这个加权均值的效果非常好
Training for extrinsic tasks
到目前我们学的为止,我们的目标是内在任务,强调开发一个特别优秀的word embedding。接下来我们讨论如何处理外部任务
Problem Formulation
Most NLP extrinsic tasks can be formulated as classification tasks. For instance, given a sentence, we can classify the sentence to have positive, negative or neutral sentiment. Similarly, in named-entity recognition (NER), given a context and a central word, we want to classify the central word to be one of many classes. ------许多nlp的task都可以归类为分类任务
for example:我们有一个句子: Jim bought 300 shares of Acme Corp. in 2006,我们的目标是得到一个结果:[Jim]Person bought 300 shares of [Acme Corp.]Organization in [2006]Time.
对于这类问题,我们通常从以下形式的训练集合开始:
其中是一个d维度的词向量,是一个C维度的one-hot向量,表示我们wished label(情感词语,其他词语,命名主体词语,买卖决策,等)
在机器学习里面,对于上面问题,我们通常固定输入和输出的形式,然后采用一些优化算法训练权重。但在nlp里面,我们需要在训练外部任务的时候,对输入的词向量进行再次训练
Retraining Word Vectors
我们预训练的词向量在外部评估中的表现仍然有提高的可能,然而,如果我们选择重新训练,我们会存在很大的风险------可能效果会比之前差得多
If we retrain word vectors using the extrinsic task, we need to ensure that the training set is large enough to cover most words from the vocabulary. -----因为word2vec和glove会产生一些语义接近的单词,并且这些单词位于同一个单词空间。如果我们在一个小的数据集上预训练,这些单词可能在向量空间中移动,这会导致我们的结果更差
举例子: 这两个例子可以清楚明白的看到,训练集合如果过于小,我们的分类结果非常差
结论: 如果训练数据集合太小,就不应该对单词向量进行再训练。如果培训集很大,再培训可以提高性能
Softmax Classification and Regularization
softmax的训练
1. 函数形式:
2. 上个式子,是我们计算x是j的概率,我们采用交叉熵损失函数:
3. 对上面损失函数优化,因为我们$y_j$为1,其他类别就是0,也就是说,对于单个词语我们的损失函数简化为:
4. 上式损失函数只是一个单词的,但是我们需要使用的训练集不止一个dancing,假设我们有N个单词,将损失函数扩展:
5. 为了防止过拟合,我们需要加入一个惩罚项:
为什么惩罚项的参数是?
我们需要同时训练模型的权值w和词向量x。对于权值来将,我们需要一个d维度向量的输入和一个C维度向量输出,所以是C*d;对于词向量来说,我们词汇表有v个词汇,每个词汇的维度是d维,所以是|v|*d
6. 如果我们调整好 λ 这个超参数的值,这会降低损失函数出现很大值的参数的可能性因为惩罚项的存在,同时,这个也能提高模型的泛化能力
Window Classification
我们通常的输入不是一个单词
更多的情况,我们模型的输入是一个单词序列(取决于你的问题的情况,确认窗口的大小),一般来讲,较窄的窗口会在句法测试中会存在更好的性能,而更宽的窗口在语义测试中表现更好
敲公式敲累了,偷个懒,这里就是在softmax里面我们扩展到你窗口大小就行