【笔记3-2】CS224N课程笔记+作业参考代码 - 词向量表示 word2vec

【笔记3-1】CS224N课程笔记 - 深度自然语言处理
【笔记3-3】CS224N课程笔记 - 高级词向量表示
【笔记3-4】CS224N课程笔记 - 分类与神经网络
【笔记3-5】CS224N课程笔记 - 依存分析
【笔记3-6】CS224N课程笔记 - RNN和语言模型
【笔记3-7】CS224N课程笔记 - 神经机器翻译seq2seq注意力机制
【笔记3-8】CS224N课程笔记 - 卷积神经网络

CS224n:深度学习的自然语言处理(2017年冬季)1080p https://www.bilibili.com/video/av28030942/

涉及到的论文:

Efficient Estimation of Word Representations in Vector Space (2013,Tomas Mikolov, Kai Chen, Greg Corrado, Jeffrey Dean)
https://arxiv.org/pdf/1301.3781.pdf

Distributed Representations of Words and Phrases and their Compositionality (2013, Tomas Mikolov, Ilya Sutskever, Kai Chen, Greg Corrado, Jeffrey Dean)
https://arxiv.org/pdf/1310.4546.pdf
关键词:词向量,SVD,skip-gram,CBOW,负采样,word2vec,hierarchical softmax

如何表示字的含义

meaning=denotation:
signifier (symbol) ⇔ \Leftrightarrow signified (idea or thing)
Usable meaning in computer:
以往会使用WordNet来查找同义词以及重名词

WorldNet的缺点:

  1. 缺乏字词之间的细微差别
  2. 丢失字词的新含义
  3. 带有主观色彩
  4. 需要大量的人力劳动进行标注
  5. 难以准确计算字词之间的相似性

出发点:字典里面有许多不同的单词,如果要对字典里的N个单词进行表示,需要将其映射到一个N维的空间,但是,实际上很多单词之间存在关联,由此出发,必定存在一个K维的空间,K<<N,能够用来表示每一个单词,节约空间的同时,对单词之间的相似性进行了表示。(相似单词在某些维度上权值相似)

字词的离散型符号表示:
独热码向量表示: 向量的维度 = 字典当中单词的个数。
根据字典中单词的个数N构造一个N维的向量,对于第i个单词,在第i维对该单词赋值为1,其余值为零。由于只有一个数字为1,称为独热码,即one-hot vector。

缺点: 所有向量之间都是正交的,无法获取词语之间的相似性。
解决方法: 自动学习向量之间的相似性表示,用更低维度的向量来表示每一个单词。

用上下文来表示单词:
由于单词的意思可以通过上下文来得到反映,因此可以使用单词周边的上下文来对中心词的词表示进行构建。

构建词向量的方法: (word embedding/representation)
对每一个单词构建一个密集向量,使得会出现在相同的上下文当中的具有相同含义的词语具有相似的向量表示。

基于SVD的方法

对于SVD构造的词向量,先对整个数据集进行遍历,并统计所有单词的共现现象,来生成一个矩阵X。然后对这个矩阵进行奇异值分解,即 X = U S V T X = USV^T X=USVT,然后取矩阵U的行向量作为整个字典中单词的词向量表示。

矩阵X的构造方法:

  1. 构造单词-文档矩阵
    这个矩阵构造方法基于一个假设,即认为相似的单词总是会经常在一个文档当中同时出现,所以在构造的时候会遍历所有的M个文档,看字典中的V个单词是否在文档中出现过,对于每个单词i在文档j中出现一次,就对Xij加一。但是这样构造出来的矩阵会十分庞大 X ∈ R V ∗ M X \in \mathbb{R}^{V*M} XRVM因此需要采用一个更好的X矩阵的构造方式。
  2. 基于窗口的共现矩阵
    这个方法的思想和前面所述的方法类似,但是不再是对所有文档进行遍历,而是对单词窗口内的共现单词进行统计。步骤如下:
    (1)构造一个维度V x V的共现矩阵X
    (2)对X进行SVD,得到 X = U S V T X = USV^T X=USVT
    (3)选择矩阵U的前K列作为K维的单词向量表示
    (4)得到K维的向量表示之后, ∑ i = 1 k σ i ∑ i = 1 ∣ V ∣ σ i \frac{\sum_{i=1}^{k}\sigma_i}{\sum_{i=1}^{|V|}\sigma_i} i=1Vσii=1kσi代表该K维向量表示所包含的字典整体的方差比例。

上述方法能够给我们提供单词的语义和词性信息,但是这个方法依旧存在一定的问题

  1. X矩阵的经常需要根据新单词的加入而不断改变
  2. 由于很多词语是不经常一起出现的,因此构造出来的X矩阵会十分稀疏
  3. 构造出来的矩阵往往维度很高
  4. 对矩阵X进行SVD分解时,计算量较大
  5. 需要处理X构造时某些词语经常出现的问题,如the, a等

因此提出基于迭代的方法-word2vec来解决上述问题。

基于迭代的方法 - Word2vec

与上述需要遍历整个文档库的SVD方法不同,word2vec的方法每次迭代都会对单词基于上下文的概率进行更新。

大致思想:设计一个模型,用模型的参数来作为单词的向量表示,然后对模型进行训练,在每次迭代中根据loss对参数进行更新,最终得到的更新过后的参数就是单词的向量表示。

word2vec当中包含两种算法:CBOW(根据上下文词汇的词向量来预测中心词)skip-gram(根据中心词来预测上下文单词的概率分布)
还包含两种训练方法:负采样(通过采集负样本来构造新的目标函数)分层softmax(使用不对称的树结构来高效地计算每个词出现的概率)

CBOW (continuous bag of words)

CBOW是根据上下文预测或生成中心词的方法。

  1. 对于输入的上下文单词(窗口大小为m)生成其对应的独热码 ( x ( c − m ) , . . . . . . , x ( c − 1 ) , x ( c + 1 ) , . . . . . . , x ( c + m ) ) ∈ R ∣ V ∣ (x^{(c-m)},......,x^{(c-1)},x^{(c+1)},......,x^{(c+m)})\in \mathbb{R}^{|V|} (x(cm),......,x(c1),x(c+1),......,x(c+m))RV
  2. 构建两个矩阵, V ∈ R n ∗ ∣ V ∣ , U ∈ R ∣ V ∣ ∗ n V\in\mathbb{R}^{n*|V|},U\in\mathbb{R}^{|V|*n} VRnV,URVn,其中,n为构造的词嵌入空间的维度,V为输入单词矩阵,其中第i列为单词 w i w_i wi作为模型输入时的n维词嵌入向量 v i v_i vi,U为输出单词矩阵,第j行为单词 w i w_i wi作为模型输出时的n维词嵌入向量 u i u_i ui,因此每个单词作为输入和输出时分别有两个向量。据此得到上下文的词嵌入向量 ( v c − m = V x ( c − m ) , v c − m + 1 = V x ( c − m + 1 ) , . . . . . . , v c + m = V x ( c + m ) ∈ R n ) (v_{c-m}=Vx^{(c-m)},v_{c-m+1}=Vx^{(c-m+1)},......,v_{c+m}=Vx^{(c+m)}\in \mathbb{R}^n) (vcm=Vx(cm),vcm+1=Vx(cm+1),......,vc+m=Vx(c+m)Rn)
  3. 对上下文向量进行平均 v ^ = v c − m + v c − m + 1 + . . . + v c + m 2 m ∈ R n \hat{v}=\frac{v_{c-m}+v_{c-m+1}+...+v_{c+m}}{2m}\in\mathbb{R}^n v^=2mvcm+vcm+1+...+vc+mRn
  4. 生成一个分值向量
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值