前言

word2vec是如何得到词向量的?这个问题比较大。从头开始讲的话,首先有了文本语料库,你需要对语料库进行预处理,这个处理流程与你的语料库种类以及个人目的有关,比如,如果是英文语料库你可能需要大小写转换检查拼写错误等操作,如果是中文日语语料库你需要增加分词处理。这个过程其他的答案已经梳理过了不再赘述。得到你想要的processed corpus之后,将他们的one-hot向量作为word2vec的输入,通过word2vec训练低维词向量(word embedding)就ok了。不得不说word2vec是个很棒的工具,目前有两种训练模型(CBOW和Skip-gram),两种加速算法(Negative Sample与Hierarchical Softmax)。本答旨在阐述word2vec如何将corpus的one-hot向量(模型的输入)转换成低维词向量(模型的中间产物,更具体来说是输入权重矩阵),真真切切感受到向量的变化,不涉及加速算法。如果读者有要求有空再补上。

1 Word2Vec两种模型的大致印象

刚才也提到了,Word2Vec包含了两种词训练模型:CBOW模型和Skip-gram模型。CBOW模型根据中心词W(t)周围的词来预测中心词

Skip-gram模型则根据中心词W(t)来预测周围词

抛开两个模型的优缺点不说,它们的结构仅仅是输入层和输出层不同。请看:CBOW模型Skip-gram模型

这两张结构图其实是被简化了的,读者只需要对两个模型的区别有个大致的判断和认知就ok了。接下来我们具体分析一下CBOW模型的构造,以及词向量是如何产生的。理解了CBOW模型,Skip-gram模型也就不在话下啦。

2 CBOW模型的理解

当然,懒省事儿的童鞋们就跟随我的脚步慢慢来吧。

先来看着这个结构图,用自然语言描述一下CBOW模型的流程:CBOW模型结构图

NOTE:花括号内{}为解释内容.输入层:上下文单词的onehot. {假设单词向量空间dim为V,上下文单词个数为C}

所有onehot分别乘以共享的输入权重矩阵W. {V*N矩阵,N为自己设定的数,初始化权重矩阵W}

所得的向量 {因为是onehot所以为向量} 相加求平均作为隐层向量, size为1*N.

乘以输出权重矩阵W' {N*V}

得到向量 {1*V} 激活函数处理得到V-dim概率分布 {PS: 因为是onehot嘛,其中的每一维斗代表着一个单词},概率最大的index所指示的单词为预测出的中间词(target word)

与true label的onehot做比较,误差越小越好所以,需要定义loss function(一般为交叉熵代价函数),采用梯度下降算法更新W和W'。训练完毕后,输入层的每个单词与矩阵W相乘得到的向量的就是我们想要的词向量(word embedding),这个矩阵(所有单词的word embedding)也叫做look up table(其实聪明的你已经看出来了,其实这个look up table就是矩阵W自身),也就是说,任何一个单词的onehot乘以这个矩阵都将得到自己的词向量。有了look up table就可以免去训练过程直接查表得到单词的词向量了。

这回就能解释题主的疑问了!如果还是觉得我木有说明白,别着急!跟我来随着栗子走一趟CBOW模型的流程!

3 CBOW模型流程举例假设我们现在的Corpus是这一个简单的只有四个单词的document:

{I drink coffee everyday}

我们选coffee作为中心词,window size设为2

也就是说,我们要根据单词"I","drink"和"everyday"来预测一个单词,并且我们希望这个单词是coffee。

假设我们此时得到的概率分布已经达到了设定的迭代次数,那么现在我们训练出来的look up table应该为矩阵W。即,任何一个单词的one-hot表示乘以这个矩阵都将得到自己的word embedding。

如有疑问欢迎提问。

cbow word2vec 损失_word2vec是如何得到词向量的?相关推荐

  1. cbow word2vec 损失_word2vec个人总结-理论篇

    word2vec不算新,但是在工业界有广泛应用.该方法利用词在各滑动窗口的共现现象建模词的潜在关系,并最终得到词向量(word embedding).如果两个词的embedding向量内积较大,则表示 ...

  2. cbow word2vec 损失_Word2Vec的核心思想

    本文介绍Word2Vec是基于Skip-Gram架构,本文只介绍核心思想,具体权重更新参考论文. 本文与论文同时饮用较好! 理解Word2Vec核心思想的步骤是先理解one word -> on ...

  3. cbow word2vec 损失_Word2vec之CBOW

    一.Word2vec word2vec是Google与2013年开源推出的一个用于获取word vecter的工具包,利用神经网络为单词寻找一个连续向量看空间中的表示.word2vec是将单词转换为向 ...

  4. cbow word2vec 损失_词向量word2vec之CBOW算法

    词向量模型之CBOW模型的原理与实现 关于词向量模型word2rec,平台里只有skip-gram一个模型的代码实现,本项目将对word2rec算法的第二个模型--CBOW模型进行补充 此项目用于交流 ...

  5. word2vec原理(一): 词向量、CBOW与Skip-Gram模型基础

    word2vec原理(一): CBOW与Skip-Gram模型基础 word2vec原理(二):基于Hierarchical Softmax的模型 word2vec原理(三): 基于Negative ...

  6. 【word2vec】篇一:理解词向量、CBOW与Skip-Gram等知识

    文章目录 词向量基础 One-hot represention Distributed Representation word2vec 基础知识 CBOW 和 Skip-gram 霍夫曼树 系列文章: ...

  7. cbow word2vec 损失_Skip-gram和CBOW知识点

    本文涉及的内容: 如何构造HuffMan树 Hierarchical Softmax似然函数 skip-gram似然函数 CBOW似然函数 Negative Sampling方法 一 HuffMan树 ...

  8. Kaggle word2vec NLP 教程 第二部分:词向量

    原文:Bag of Words Meets Bags of Popcorn 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 第二部分:词向量 代码 第二部分的教程代码在这里. 分 ...

  9. (Word2Vec)怎么将得到的词向量变成句子向量,以及怎么衡量得到词向量的好坏

    腾讯一面的题目,当时脑子里只有相加平均 1. Word2Vec 怎么将得到的词向量变成句子向量 1)平均词向量: 平均词向量就是将句子中所有词的word embedding相加取平均,得到的向量就当做 ...

最新文章

  1. powershell的一个小游戏,看看能写几种方式出来
  2. 【深度学习】协同优化器和结构化知识蒸馏
  3. mysql5.7.25数据库安装
  4. Python的regex模块——更强大的正则表达式引擎
  5. 取木棒21根c语言,关于m根火柴 ,人机最多取n根火柴(21根火柴进阶)
  6. 【小梅哥SOPC学习笔记】系统时钟的使用
  7. idea 查看jsp是否被引用_IDEA集成Java性能分析神器JProfiler
  8. Redis 学习(二)
  9. 无线网首选dns服务器怎么设置,首选dns服务器地址如何设置
  10. 成信大809软件工程专业基础历年真题及答案
  11. 张一鸣宣布卸任字节跳动CEO!
  12. 如何更好地吸收维生素矿物质?
  13. Golang panic: reflect: reflect.flag.mustBeAssignable using value obtained using unexported field
  14. CDN,P2P,PCDN的区别?
  15. D3 CSV表格文件的读取详解
  16. 从三个产业侧影,打开万物智能的应用之匙
  17. 从TdEngine20行代码引发的风波,看10倍程序员与普通程序员的差距
  18. 使用highcharts实现雷达图
  19. Lazada选品的技巧和方法
  20. IT人员专业素养——专业度

热门文章

  1. python中的函数def和函数的参数
  2. Python面向对象反射,双下方法
  3. python celery多worker、多队列、定时任务
  4. python 将文件描述符包装成文件对象
  5. ram在计算机网络中表示的是,2018年职称计算机考试题库(20)
  6. go和java线程,Go的多线程和pthread或Java线程有什么区别?
  7. php包含文件时显示空白页,php中出现空白页的原因及解决方法汇总_php技巧
  8. 【opencv4】opencv视频教程 C++ 6、图像混合、线性混合、混合权重相加addWeighted()、混合加add()、混合乘multiply()
  9. python numpy np.finfo()函数 eps
  10. 使用 Bamboo 构建项目的 CICD 过程文档