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所采⽤的。{>>潜在语义分析<<}
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倾斜向能统计更接近的单词中
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 -----------采用加权和的形式进行处理
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