word2vec 学习

转载 2013年12月05日 15:36:09

1一个输入层 ; 1 个隐含层; 1个输出层


syn0       input -> hidden 的 weights     在code中是一个1维数组,但是应该按照二维数组来理解。

                访问时实际上可以看成  syn0[i, j]   i为第i个单词,j为第j个隐含单元。

               大小:  词典大小 * 隐含层大小

syn1       hidden->output 的 weights

                


neu1      浮点型数组,  隐含层神经的值
               大小: 隐含层大小

neu1e     隐含层误差量

               大小: 隐含层大小


vocab_size  不同单词个数,也就是词典大小。

layer1_size  向量长度,实际上就是隐含层的大小。


分析完其实就是一个BP网络,不过还是不知道为啥要将前后几个词和当前词联系起来,要完全理解此场景的模型思想,看来还是得看论文了。


  1. TrainModelThread
    while (1)
    1. 打印训练的进度情况
    2. (while)从输入文件中读入1000个单词组成一个句子,存入sen, sen[i] = word_index, 也就是sen数组里的顺序与单词在原文中的顺序一致,而sen存放的值为词典中该单词的位置。
      sentence_length  - 该sen数组的长度
      sentence_position - 为最外层while循环遍历该句子时,对记录当前单词在此句子中的位置。
    3. 如果 处理的单词个数超出了分配给当前线程的个数,则结束。 
    4. 获取当前单词。  从句子sen中取出 word_index = sen[sentence_position]; 
    5. 初始化 隐含层神经neu1 、隐含层误差 neu1e 为0
    6. b  产生随机数b, 取值目前为0~4之间。      窗口值window默认为5
    7. cbow
      1. in -> hidden  (正向传播,  得到隐含层)
        for (遍历左右窗口词,c从 sentence_position - (window -b)   到  sentence_position + (window -b)   , 且 c != sentence_position 
        1. 得到c处存放的单词索引 last_word = sen[c];
        2. 将该词对应到的每一个in->hidden的网络权重系数syn0 累加到  隐含层单元neu1中
           for (c = 0; c < layer1_size; c++) neu1[c] += syn0[c + last_word * layer1_size];
      2. HIERARCHICAL SOFTMAX   目前默认hs为1的。 
        for (遍历该词的huffman编码串)
        1. f = 0
        2. 计算出该词在hidden-output 网络中的权重存储位置 l2 = vocab_[word_index].point[d] * layer1_size;
          这里的point[d]有疑问?? 是否有可能超出vocab_size呢
        3. hidden -> output    (正向传播,得到该编码单元对应的output 值f)
          for (c = 0; c < layer1_size; c++) f += neu1[c] * syn1[c + l2];
        4. 对 f 进行Sigmoid变换  (这里是预先存放在了expTable表中)
        5. 计算下降的梯度g     (乘了学习率alpha)
           g = (1 - vocab_[word_index].code[d] - f) * alpha;
        6. output - > hidden (反向传播 得到隐含层误差)
          for (c = 0; c < layer1_size; c++) neu1e[c] += g * syn1[c + l2];
        7. 学习权重 hidden-output 
          for (c = 0; c < layer1_size; c++) syn1[c + l2] += g * neu1[c];
      3. NEGATIVE SAMPLING   目前运行时默认未走此步
      4. hidden -> in (反向传递, 更新in-hidden网络权重)
        for (遍历左右窗口词,c从 sentence_position - (window -b)   到  sentence_position + (window -b)   , 且 c != sentence_position 
        1. 得到c处存放的单词索引 last_word = sen[c];
        2. 学习权重input-hidden   将隐含层单元误差量neu1e 加到  该词对应到的每一个in->hidden的网络权重系数syn0上
           for (c = 0; c < layer1_size; c++) syn0[c + last_word * layer1_size] += neu1e[c];

    8. skip-gram
      这里居然没有隐含神经元的概念,也就是无neu1; 
      计算输出值f的时候,直接用的是两层网络的权重syn0与syn1;
      第1层网络权重用的是窗口词的, 第2层网络权重用的是当前词的;
      其余部分和cbow模型类似。 
  2. 保存结果
    将input-hidden网络权重(syn0)作为了词向量保存,不知为何这个就是词向量了。

word2vec学习+使用介绍

word2vec是google的开源工具,很值得学习使用,推荐大家使用!代码已跑通顺利运行。 word2vec是一个将单词转换成向量形式的工具。可以把对文本内容的处理简化为向量空间中的向量运算,计算...
  • jdbc
  • jdbc
  • 2015年08月10日 22:53
  • 1356

word2vec学习参考

最近看NLP的东西比较多。就拿现在google 基于神经网络做的 word2vec 作为博客的开始吧,今后会陆陆续续补充内容。    基本是分4块内容:    1.神经网络语言模型 (...
  • zhoubl668
  • zhoubl668
  • 2014年04月22日 17:57
  • 3405

深度学习word2vec笔记之基础篇

深度学习word2vec笔记之基础篇
  • mytestmy
  • mytestmy
  • 2014年05月25日 16:00
  • 67823

云摘录︱Word2Vec 作者Tomas Mikolov 的三篇代表作解析

本文来源于公众号paperweekly  谈到了word2vec作者的三篇论文: 1、Efficient Estimation of Word Representation...
  • sinat_26917383
  • sinat_26917383
  • 2016年09月18日 20:39
  • 4260

深度学习(四十二)word2vec词向量学习笔记

一、使用原版word2vec工具训练 1、到官网到下载,然后选择export 到github 2、编译:make 3、下载测试数据http://mattmahoney.net/dc/text8.zip...
  • hjimce
  • hjimce
  • 2016年06月02日 10:57
  • 5634

Word2Vec的使用及java版运行解释及错误分析

最近由于要做一个工程性的近义词的工程,因此接触到了Word2Vec这个工具。 Word2Vec是 Google 在 2013 年年中开源的一款将词表征为实数值向量的高效工具, 其利用深度学习的思想,...
  • qq_35082030
  • qq_35082030
  • 2016年09月02日 18:56
  • 3336

Word2Vec的一些个人学习心得

本文只从原理上进行推导公式,尽量使用通俗易懂的语言进行讲解。 预备知识详见word2vec中的数学原理详解 - sigmoid函数 - logistics回归 - Bayes公式 - ...
  • suibianti
  • suibianti
  • 2017年03月30日 21:24
  • 758

ggplot2作图详解:ggplot图形对象

转载自:http://blog.csdn.net/u014801157/article/details/24372503 前面我们使用qplot函数对ggplot2做图的方法进行了初步的了解...
  • u013524655
  • u013524655
  • 2014年11月18日 23:42
  • 935

深度学习 —— 使用 gensim 实现 word2vec

在自然语言处理领域中,将单词(words)或词语(phases)映射到向量空间(vector space)中可以很容易就得到单词之间的相似度,因为向量空间中两个向量的相似度很容易求得,比如余弦相似度。...
  • lanchunhui
  • lanchunhui
  • 2017年05月28日 22:17
  • 546

Word2Vec模型之结构篇

这次的分享主要是对Word2Vec模型的两篇英文文档的翻译、理解和整合,这两篇英文文档都是介绍Word2Vec中的Skip-Gram模型。下一篇专栏文章将会用TensorFlow实现基础版Word2V...
  • heyeqingquan
  • heyeqingquan
  • 2018年01月10日 19:24
  • 77
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:word2vec 学习
举报原因:
原因补充:

(最多只允许输入30个字)