Word Embedding (word2vector)

引言

 通过上一个看得吃力的视频,现在word embedding给我的印象就是cv中的auto-encoder,只不过网络不一样。目测不难,接下来看个究竟。

word represent(word2vec)

  • 1-of-N Encoding
     cv中的one-hot。如果1w个单词,vector的维度也是1w。每个vector只有一个维是1,其余是0。
     vector之间没有任何联系,生活中猫和狗属于动物;没有充分利用vector的空间,网络无法训练这么长的vector。
  • Word Embedding
     专业说法:把每一个word映射到高维空间,高维空间由一定长度的vector表示,但远比one-hot的vector要短。
    每一维代表了不同的语义特征,如:第一维决定动物还是植物。这个我们无从得知,全靠网络training。
    在这里插入图片描述
此图只是作解释,科根据情况可以使用降维工具来验证embedding后的vector是否有语义信息

如何Embedding

 目的:machine learn the meaning of words from reading a lot of documents without supervision。无监督学习
 训练数据:a lot of text
无法用auto-encoder来解决,因为输入是什么?所以引言打脸了
  思想:
在这里插入图片描述

  方法:

  • Count based
    w i w_i wi w j w_j wj表示两个词汇,word vector分别用 V ( w i ) V(w_i) V(wi) V ( w j ) V(w_j) V(wj)来表示。如果两个词汇常常在同一篇文章中同时出现(co-occur), V ( w i ) V(w_i) V(wi) V ( w j ) V(w_j) V(wj)会比较接近。
    N i , j N_{i,j} Ni,j w i w_i wi w j w_j wj这两个词汇在相同文章里同时出现的次数,我们希望它与 V ( w i ) ⋅ V ( w j ) V(w_i)\cdot V(w_j) V(wi)V(wj)的内积越接近越好。
  • Prediction based
    在这里插入图片描述
     1. 类似auto-encode,但是网络输入为 w i − 1 w_{i-1} wi1需要预测 w i w_i wi。假设使用1-of-N encoding表示word,输出的维度与输入一样,只不过每一维都是小数,表示每个词的概率。
     2. 把第一个hidden layer的input z 1 , z 2 , . . . z_1,z_2,... z1,z2,...拿出来,它们所组成的 Z Z Z就是word的另一种表示方式。第一层hidden layer的维数可以自由决定,而input唯一确定了一个word,因此提取出第一层hidden layer的input,实际上就得到了一组可以自定义维数的Word Embedding的表示向量。
    问题:直接auto-encode不行,预测下一个word又work呢
     回答:(1)预测下一个词目的:根据词汇的上下文来了解该词汇的含义
        (2)存在两个语义近似的词,为了使这两个不同的input通过NN能得到相同的output,就必须在进入hidden layer之前,就通过weight的转换将这两个input vector投影到位置相近的低维空间上。
  • Prediction based改进sharing Parameters
    问题:一个词并不能决定下一个词
     回答:使用10个及以上的词汇去预测下一个词汇,可以帮助得到较好的结果
    在这里插入图片描述
     step1:
      这多个vector拼接成一个更长的vector作为input。但我们更希望看到这些vector独立,即 w i − 2 w_{i-2} wi2 w i − 1 w_{i-1} wi1的相同dimension对应到第一层hidden layer相同neuron之间的连线拥有相同的weight。
      否则把同一个word放在 w i − 2 w_{i-2} wi2的位置和放在 w i − 1 w_{i-1} wi1的位置,得到的Embedding结果是会不一样的。
      这么做还可以通过共享参数的方式有效地减少参数量,不会由于input的word数量增加而导致参数量剧增。

 step2:
  保证 W 1 W_1 W1 W 2 W_2 W2一样。好像没见过一个权值给两个输入,因为每个layer类,如conv2,都有自己的权值。
  首先要给它们一样的初始值,然后分别计算loss function C C C w i w_i wi w j w_j wj的偏微分,并对其进行更新 w i = w i − η ∂ C ∂ w i   w j = w j − η ∂ C ∂ w j w_i=w_i-\eta \frac{\partial C}{\partial w_i}\ w_j=w_j-\eta \frac{\partial C}{\partial w_j} wi=wiηwiC wj=wjηwjC 这个时候=, C C C w i w_i wi w j w_j wj的偏微分是不一样的,这意味着即使给了 w i w_i wi w j w_j wj相同的初始值,更新过一次之后它们的值也会变得不一样,因此我们必须保证两者的更新过程是一致的,即: w i = w i − η ∂ C ∂ w i − η ∂ C ∂ w j   w j = w j − η ∂ C ∂ w j − η ∂ C ∂ w i w_i=w_i-\eta \frac{\partial C}{\partial w_i}-\eta \frac{\partial C}{\partial w_j}\ w_j=w_j-\eta \frac{\partial C}{\partial w_j}-\eta \frac{\partial C}{\partial w_i} wi=wiηwiCηwjC wj=wjηwjCηwiC这样就保证了 w i w_i wi w j w_j wj始终相等。使用one-hot类型,使用如cv那样minimize它们之间的cross entropy

 step3:
  word-to-vector现在流行神经网络,但这个network只有一个linear的hidden layer。
  把1-of-N编码输入给神经网络,经过weight的转换得到Word Embedding,再通过第一层hidden layer就可以直接得到输出。即不需要deep network。

Prediction-based多种变形

  • CBOW(Continuous bag of word model):拿前后的词汇去预测中间的词汇
  • Skip-gram:拿中间的词汇去预测前后的词汇

科普区

 性质:把word vector两两相减,再投影到下图中的二维平面上,如果某两个word之间有类似包含于的相同关系,它们就会被投影到同一块区域。(鸡-公鸡,狗-警犬)在这里插入图片描述
 则 鸡-公鸡≈狗-警犬 那我们可以已知3个,求剩下一个的vector。

应用:

  1. 建立起不同语言之间的联系,分别训练一个英文的语料库(corpus)和中文的语料库,你会发现两者的word vector之间是没有任何关系的,因为Word Embedding只体现了上下文的关系。
     但是,如果你知道某些中文词汇和英文词汇的对应关系,你可以先分别获取它们的word vector,然后再去训练一个模型,把具有相同含义的中英文词汇投影到新空间上的同一个点。属于监督学习吧
     接下来遇到未知的新词汇,无论是中文还是英文,你都可以采用同样的方式将其投影到新空间,就可以自动做到类似翻译的效果。
  2. 假设你已经得到horse、cat和dog这些词汇的vector在空间上的分布情况,你就可以去训练一个模型,把一些已知的horse、cat和dog图片去投影到和对应词汇相同的空间区维度相同)域上。
     对模型输入一张图像,使之输出一个跟word vector具有相同维数的vector,如使dog图像的映射向量就散布在dog词汇向量的周围。
     图像分类大部分情况下都是事先定好要分为哪几个具体的类别,因为输出维度要固定。由于我们无法在训练的时候穷尽所有类别的图像;或者需要识别的类的数据集太少,只能舍弃该类别。
     而使用image+word Embedding的方法,就算输入的图像类别在训练时没有被遇到过,比如上图中的cat,但如果这张图像能够投影到cat的word vector的附近,根据词汇向量与图像向量的对应关系,你自然就可以知道这张图像叫做cat。属于0样本学习吧,可惜不弄cv了

结束

 最后给出关于word2vec,可以参考博客:http://blog.csdn.net/itplus/article/details/37969519
这个不急着看,急的是看看RNN究竟怎么运用,代码如何写。
40分钟…

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于实现词嵌入(Word Embedding)的代码,有多种方法可以选择。以下是一个简单的示例,演示了如何使用Python和gensim库来训练和使用Word2Vec模型: 首先,确保已经安装了gensim库。可以使用以下命令进行安装: ``` pip install gensim ``` 接下来,我们可以使用以下代码来实现Word Embedding: ```python from gensim.models import Word2Vec # 训练数据 sentences = [["I", "like", "apples"], ["I", "like", "bananas"], ["I", "like", "oranges"]] # 训练Word2Vec模型 model = Word2Vec(sentences, min_count=1) # 获取单词的词向量 word_vector = model.wv['apples'] print(word_vector) # 找到与指定单词最相似的单词 similar_words = model.wv.most_similar('apples') print(similar_words) ``` 在上述代码中,我们首先定义了训练数据(sentences),它是一个包含多个句子的列表,每个句子都是一个包含多个单词的列表。然后,我们使用这些句子来训练Word2Vec模型。 在训练完成后,我们可以使用`model.wv[word]`来获取指定单词的词向量。词向量是一个表示单词语义特征的向量。 此外,我们还可以使用`model.wv.most_similar(word)`来找到与指定单词最相似的单词列表。 请注意,这只是Word Embedding的一种实现方式。还有其他方法,例如GloVe、FastText等。具体实现方式可能有所不同,但基本原理是相似的。 希望以上代码能对你有所帮助!如果你有任何问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值