wordNet词向量和词义

描述

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. 基于计数:使⽤整个矩阵的全局统计数据来直接估计:

优点

1. 训练快速             2. 统计数据⾼效利⽤

缺点

1. 主要⽤于捕捉单词相似性             2. 对⼤量数据给予⽐例失调的重视       2. 转换计数:定义概率分布并试图预测单词

优点

1. 提⾼其他任务的性能             2. 能捕获除了单词相似性以外的复杂的模式

缺点

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里面我们扩展到你窗口大小就行    

本文推荐阅读论文:

Improving Distributional Similarity with Lessons Learned from Word Embeddings

Evaluation methods for unsupervised word embeddings 

责任编辑:xj

原文标题:【CS224N笔记】词向量和词义

文章出处:【微信公众号:深度学习自然语言处理】欢迎添加关注!文章转载请注明出处。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分