word2vec 词向量

学习stanford的cs224d–deep learning for natural language processing, 顺便记录一下学习word2vec重要的知识点. word2vec 最先出现在谷歌工程师Mikolov在2013年的NIPS会议发表的一篇文章. 相比与传统的自然语言处理, 其优点是利用向量空间使词的表达更加方便, 并且在惯用词组的表达上更加powerful.
摘要由CSDN通过智能技术生成

最近在学习stanford的cs224d–deep learning for natural language processing, 顺便记录一下学习word2vec重要的知识点. word2vec 最先出现在谷歌工程师Mikolov在2013年的NIPS会议发表的一篇文章. 相比与传统的自然语言处理, 其优点是利用向量空间使词的表达更加方便, 并且在惯用词组的表达上更加powerful.

词向量基础

首先看最简单的one-hot vector , 假设词库的容量是 V , 那么每一个词都是一个 R|V|×1 的向量. 显然这个维度很大, 而根据统计, 英语中有13 million的token, 这样表达十分消耗内存. 而且 w(a)Tw(b)=0 (每个向量都是正交的) , 也就是说词与词之间的相关性都是0, 这显然与常识相违背,比如father和mother, hotel和room之间肯定是存在一定的相关性的, 必须作出修正(降维…)来更好的进行词的表达.

首先考虑如何表达词, 采用矩阵的方法通常有两种, 一种是Word-Document Matrix, 另外一种是Window besed Co-occurrence Matrix, 我们只讨论第二种, 因为第一种的矩阵太大, 计算量太大.

  • Window based Co-occurrence Matrix
    首先, 这种方法是基于语料库中的每个句子进行操作的, 然后设定一个窗的长度, 在中心词的左边右边都加窗, 计算窗中的词伴随中心词出现的频数, 构造一个矩阵. 以一个例子为例:窗为1, 句子个数为3

    1. I enjoy flying
    2. I like NLP
    3. I like deep learning
      因此, 这个矩阵表达为

      可以发现, like 和 enjoy的相关性明显就高于I 和 like. 这样的矩阵还是太稀疏, 下面采用 SVD 的方法进行降维.
  • SVD(singular value decomposition)
    根据线性代数的理论, 一个方阵可以做如下分解:

    Amn=UmmSmnVTnn

    其中, Umm , Vnn 分别是 AAT ATA 的正交特征向量构成的正交矩阵, Smn 是一个对角元素是 U,V 矩阵的特征值平方根按从小到大排列的对标矩阵. 最终我们取U作为降维后的矩阵. 一个简单的可视化如图.
    这里写图片描述

当然,语料库太小,这张图还不是很能够说明问题.

目前为止, 基于SVD的方法有如下的缺点:
1. 新词加入的时候矩阵的维度要改变
2. 矩阵过于稀疏, 因为大多数词是不相关的
3. 矩阵维度过大 (106×106)
4. 训练时间过长, o(n2)
5. 需要一些技巧来解决词频的不均衡性

下面,采用基于迭代(Iteration besed)的方法来解决以上问题.

Iteration Based Methods

  • Language Models(Unigrams, Bigrams, etc.)
    首先, 构造一个模型来衡量一个序列(句子)出现的概率. 如The cat jumped over the puddle. 显然,这个句子语法语义都是正确的. 数学上来说, 一个由 n 个词组成的序列的概率是 P(w1,w2,...,wn) .
    1. 一元模型 Unigram model
      P(w1,w2,...,wn)=i=1nP(wi)

      显然, 它假设了所有词的出现概率都是彼此独立的,因此当我们把一些词频较高的词组合在一起构成一个愚蠢的句子的时候, 它出现的概率仍然很高.
    2. 二元模型 Bigram model
      P(w1,w2,...,wn)=i=1nP(wi|wi1)

      实际上, 词与词之间存在相关性, 下一时刻的词极有可能依赖于上一时刻的词.
    3. 词向量 word2vec
      二元模型只考虑了局部的相关性, 并且需要计算/存储一个大的数据库的全部信息. 于是word2vec出现了. word2vec的主要思想是不直接计算词与词之间的相关性, 而是通过计算每个词周围包围的词(surrounding words)来得到词向量.
      P(o|c)=exp(uTovc)Ww=1exp(uTwvc)

      其中, c是中心词, o 是输出词, u和v分别代表输出和输入向量.(注意:一个词作为中心词和非中心词表示的向量是不一样的.)
      通过极大似然估计的方法来训练得到词向量, 目标函数
      J(θ)=1Tt=1Tmjm,j0logP(o|c)
    4. Glove(#TODO: 待补充)
      J(θ)=12i,j=1Wf(Pij)(uTivjlogPij)2

下面讲两个word2vec的模型

  • Continuous Bag of Words Model(CBOW)
    简而言之,就是已知通过周围的词来预测中心词.主要元素是输入矩阵和输出矩阵.计算过程如下

    1. generate input context of size m: (xcm,...,xc1,xc+1,...,xc+m)
    2. get embedded word vectors: (vcm
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值