文章目录

  • 词向量基础
    • One-hot represention
    • Distributed Representation
  • word2vec 基础知识
    • CBOW 和 Skip-gram
    • 霍夫曼树

系列文章:

  1. 【word2vec】篇一:理解词向量、CBOW与Skip-Gram等知识
  2. 【word2vec】篇二:基于Hierarchical Softmax的 CBOW 模型和 Skip-gram 模型
  3. 【word2vec】篇三:基于Negative Sampling 的 CBOW 模型和 Skip-gram 模型

由于计算机不能直接对各种字符进行运算,为此需要将词的表示进行一些转换。因此,在自然语言处理中,通常需要对输入的语料进行一些预处理:

其中,如何对词汇进行表示是很关键的问题,糟糕的表示方法容易导致所谓的 “Garbage in, garbage out”。

词向量基础

对词汇的表示,常见的有One-hot represention 和 Distributed Representation 两种形式。

One-hot represention

One-hot represention 将词汇用二进制向量表示,这个向量表示的词汇,仅仅在词汇表中的索引位置处为1,其他地方都为0。例子如下图所示:

这样的方式表示词汇虽然简单,但是也有如下缺点:

  • 单词的上下文丢失了。
  • 没有考虑频率信息。
  • 词汇量大的情况下,向量维度高且稀疏,占用内存。

Distributed Representation

Distributed Representation 也可以理解为Word Embedding,具体形式为:

注意到,使用Word Embedding得到的向量维度远小于词汇表的个数。如果将上面的向量在空间中表示,可以得到:

上图告诉我们,通过词向量之间的距离可以度量他们之间的关系,意思相近的词在空间中的距离比较近。出现这种现象的原因是,我们最后得到的词向量在训练过程中学习到了词的上下文。

那么,Distributed Representation 要如何得到?

  1. 之前介绍的神经网络语言模型可以得到。

  2. 接下来要介绍的 word2vec 就是另一种更受欢迎的方法。

word2vec 基础知识

word2vec 是 Google 于 2013 年推出的一个用于获取 word vector 的工具包,它简单、高效,因此引起了很多人的关注。在正式讲解 word2vec 前,还需要对一些基本概念有所了解。

CBOW 和 Skip-gram

CBOW 的思想是输入是某一个词wtw_twt的上下文相关的词对应的词向量,而输出就是wtw_twt的词向量。如下图所示:

可以看到,模型对输入的上下文词汇进行了求和运算,使用求和后的向量表示上下文的信息,然后学习wtw_twt的向量表示。

Skip-Gram 的思想是和 CBOW 的思路是反着来的,即输入是特定的一个词wtw_twt的词向量,而输出是特定词对应的上下文词向量。

word2vec 根据输入输出形式的不同,可以分为CBOW (Continuous Bag-of-Words) 与Skip-Gram两种模型。

霍夫曼树

一般情况下,词汇表中词汇的数量是非常多的,如果用传统的DNN+Softmax的方式来训练词向量,计算量太大了。于是,word2vec 使用的数据结构是用霍夫曼树来代替隐藏层和输出层的神经元。霍夫曼树的叶子节点起到输出层神经元的作用,叶子节点的个数即为词汇表的小大, 而内部节点则起到隐藏层神经元的作用。具体的内容,我们在之后会讲解。这里首先需要了解下霍夫曼树。

从实际的例子出发,看看如何构造霍夫曼树:

假设有(a,b,c,d,e,f)共6个词汇,词汇的权值用词频表示:wa=16,wb=4,wc=8,wd=6,we=20,wf=3w_a=16,w_b=4,w_c=8,w_d=6,w_e=20,w_f=3wa=16,wb=4,wc=8,wd=6,we=20,wf=3,我们假设这6个词汇是6棵只要根节点的森林集合。于是构造步骤如下:

首先是权值最小的b和f合并,得到的新树,根节点权重是7。将b于f这两个树从列表中删除,并且添加刚刚得到的合并的树。此时森林里共有5棵树,根节点权重分别是16,8,6,20,7。此时根节点权重最小的6,7对应的树合并,得到新子树,依次类推,最终得到下面的霍夫曼树:

如何编码呢?

一般对于一个霍夫曼树的节点(根节点除外),可以约定左子树编码为0,右子树编码为1.如上图,则可以得到c的编码是00。

注意,在word2vec中,约定编码方式和上面的例子相反,即约定左子树编码为1,右子树编码为0,同时约定左子树的权重不小于右子树的权重。

那么霍夫曼树有什么好处呢?

一般得到霍夫曼树后我们会对叶子节点进行霍夫曼编码,由于权重高的叶子节点越靠近根节点,而权重低的叶子节点会远离根节点。这样我们的高权重节点编码值较短,而低权重值编码值较长。这保证的树的带权路径最短,即我们希望越常用的词拥有更短的编码。

有了上面的基础知识,就可以对word2vec进行讲解了。相比于用传统的神经网络的方法来训练词向量,于word2vec提出了有两种改进方法:一种是基于 Hierarchical Softmax 算法的,另一种是基于 Negative Sampling 算法的。

参考文章:

word2vec模型

word2vec 中的数学原理详解

【word2vec】篇一:理解词向量、CBOW与Skip-Gram等知识相关推荐

  1. 《自然语言处理学习之路》02 词向量模型Word2Vec,CBOW,Skip Gram

    本文主要是学习参考莫烦老师的教学,对老师课程的学习,记忆笔记. 原文链接 文章目录 书山有路勤为径,学海无涯苦作舟. 零.吃水不忘挖井人 一.计算机如何实现对于词语的理解 1.1 万物数字化 1.2 ...

  2. 【Word2Vec】word2vec是如何得到词向量的?

    前言 word2vec是如何得到词向量的?这个问题比较大.从头开始讲的话,首先有了文本语料库,你需要对语料库进行预处理,这个处理流程与你的语料库种类以及个人目的有关,比如,如果是英文语料库你可能需要大 ...

  3. word2vec中单词向词向量的转换过程详解

    目录 前言: 1.Word2Vec两种模型的大致印象 2.CBOW模型流程举例 3.CBOW模型流程举例 总结: 目录 前言: 针对word2vec是如何得到词向量的?这篇文章肯定能解决你的疑惑.该篇 ...

  4. Rasa课程、Rasa培训、Rasa面试、Rasa实战系列之Understanding Word Embeddings CBOW and Skip Gram

    Rasa课程.Rasa培训.Rasa面试.Rasa实战系列之Understanding Word Embeddings CBOW and Skip Gram 字嵌入 从第i个字符,第i+1个字符预测第 ...

  5. 莫烦nlp——词向量—CBOW

    由于不是第一次接触,本文只摘录莫烦关于词向量的观点.更多的关注代码. 上一次系统学习莫烦教程已经一年半了,时间过得太快了. 转载:https://mofanpy.com/tutorials/machi ...

  6. 企业隐患排查文本挖掘比赛(二):算法篇(从词向量到BERT)

    1.文本挖掘的历程 对于NLP问题,首先要解决的是文本表示的问题.虽然人能够清楚地了解文本的含义,但是计算机只能处理数值运算,因此首先要考虑如何将文本转化为数值. 1.1 向量表示 1.1.1 词袋模 ...

  7. 【word2vec】Distributed Representation——词向量

    Distributed Representation 这种表示,它最早是 Hinton 于 1986 年提出的,可以克服 one-hot representation 的缺点. 其基本想法是: 通过训 ...

  8. 120G+训练好的word2vec模型(中文词向量)

    从网上了解到,很多人缺少大语料训练的word2vec模型,在此分享下使用120G+语料训练好的word2vec模型. 训练语料: 百度百科800w+条,20G+ 搜狐新闻400w+条,12G+(数据下 ...

  9. PGL 系列(四)词向量 CBOW

    环境 python 3.6.8 paddlepaddle-gpu 2.3.0 numpy 1.19.5 pgl 2.2.4 学习路线 一.CBOW 概念 CBOW:通过上下文的词向量推理中心词 在CB ...

最新文章

  1. Mat转换为IplImage 类型和CvMat 类型
  2. 再见了,收费的Navicat。
  3. python设计模式(十三):解释器模式
  4. 兰州2021高考一诊成绩查询,2021兰州中考"一诊"成绩分析结果查询
  5. 利用微信登录掘金网站的HTTP请求分析
  6. 安全性中的Spring AOP –通过方面控制UI组件的创建
  7. 微信小程序---实现输入手机验证码功能
  8. C语言 for 循环 - C语言零基础入门教程
  9. 算法与数据结构(六):堆排序
  10. startx启动过程分析
  11. 刚发布!开发者调查报告:机器学习/深度学习算法工程师急缺
  12. AFNetworking源码学习
  13. Jmeter工具使用-分布式架构和服务器性能监控解决方案
  14. Python采集豆瓣网电影资源--疑问
  15. 荣耀手机wifi信号如何连接服务器,教你手机无限流量免费上网 荣耀WiFi实测
  16. no interpreter
  17. SQL基础知识归纳总结
  18. RegNet: Designing Network Design Spaces
  19. MongoDB的基础指令和练习笔记
  20. (Alpha)Let's-展示博客

热门文章

  1. None用法+连接字符串优先使用join +用format而不是%+区别可变对象和不可变对象(list的深拷贝和浅拷贝)
  2. Gensim初步使用和详细解释(该代码只能处理英文,处理中文不可用该代码)
  3. mysql 算子 谓词_[SQL] SQL 基础知识梳理(六)- 函数、谓词、CASE 表达式
  4. 数学狂想曲(十一)——高阶统计, 最速降线, 泛函 变分
  5. 【数学基础】拉格朗日对偶
  6. types是什么意思中文翻译成_types 和 @types 是什么?
  7. 合作式智能运输系统 车用通信系统应用层及应用数据交互标准(第二阶段)_携手推进汽车与信息通信标准化融合发展,CSAE与CCSA签署标准化工作备忘录...
  8. [转] 以 async/await 为例,说明 babel 插件怎么搭
  9. 《UNIX网络编程 卷1:套接字联网API(第3版)》——第2章 传输层:TCP、UDP和SCTP 2.1概述...
  10. Sequence 带来的更多乐趣