1.嵌入是用向量表示一个物体

2.用数值表示标识符,在机器学习领域称为词嵌入,也称分布式表示

3.词嵌入通常有两种方法——基于平台的Embedding学习,基于预训练模型

4.word2vec是最开始提出的embedding预训练模型

5.word2vec有两种:CBOWSkip-Gram

6.word2vec数据集的一个样本仅选输入词前后各c个词和输入词进行组合

7.word2vec利用神经网络进行权重更新

8.Hierarchical Softmaxnegative sampling是word2vec两种优化策略

嵌入,英文是Embedding,是用向量表示一个物体,这个物体可以是一个单词、一条语句、一个序列、一件商品、一个动作、一部电影等。在机器学习领域,我们把这些统一称为标识符(token),由于数学只认识数字,因此我们用数值表示这些标识符,也即通常说的词嵌入,又称为分布式表示.

传送门:

词嵌入(Word Embedding)

最先开始的embedding是word2vec,我们再详细介绍一次该算法,开始之前,先简单说明一下序列问题的处理步骤。

序列问题

序列,简单来说就是一串元素按照某种性质进行排列。比如数学常见的数列,还有生活中常见的网页浏览、商品浏览,按照时间生成的时间序列......

拿到一份语言材料,要对它进行任务工作,一般需要进行一定的特征工程,流程通常可以表示为下图:

词嵌入是处理序列问题中最具魅力的一环,对于词嵌入的方法,通常有两种——1.利用平台的Embedding层学习,2.使用预训练的词嵌入

对于第一种方法,通过是利用PyTorch、TensorFlow等平台学习,首先初始化词向量,然后平台不断学习得到。比如PyTorch的简单Embedding:

import torch
import jieba
import numpy as np
from torch import nnraw_text = '越努力越幸运'
words = list(jieba.cut(raw_text))
word_to_ix = {i:word for i,word in enumerate(set(words))}#索引化embeds = nn.Embedding(4,3)
keys = word_to_ix.keys()
keys_list = list(keys)
tensor_value = torch.LongTensor(keys_list)
embeds(tensor_value)

第二种嵌入是预训练嵌入——利用较大语料库训练好的预训练模型,把词嵌入加载到当前任务中。预训练模型有很多,最原始的是word2vec,我们先展开介绍这个模型。

CBOW与Skip-Gram

word2vec实质分两种,一种是根据上下文预测目标值,即Continuous Bag-Of-Words Model,简称CBOW;另外一种是根据目标值生成上下文,称为Skip-Gram模型,我们在词嵌入(Word Embedding)文章中详细介绍了它的原理。这两种是相反的过程,我们举一个例子来说明Skip-Gram模型的具体过程,CBOW模型就不再赘述了。在此之前,再强调一下该模型的做出的三个假设:

  • 一个词汇只与其上下文c个词汇有关(称为窗口,window size)

  • 每个单词在窗口下的2c个单词的联合条件概率相互独立且同分布

  • 给定每个单词,在窗口下每个单词的条件概率分布相互独立且同分布

对于下面语料库(句子):

natural language processing and machine learning is fun and exciting


首先,要将这条语句生成一个由序列(输入,输出)构成的数据集,假设取定window size = 2,那么这个数据集的一个样本仅选输入词前后各2个词和输入词进行组合构成:

这条语句一共10个单词,所以数据集是由10个样本构成,从#1~#10.注意,输出标签y不再是一个文本,可能是两个,也可能是三个,这里最多是四个。

接着就是把这些文本变成数字形式表示,利用one-hot编码,虽然该语句一共10个单词,但只有9个互不相同的单词,所以每一个词向量维度应该是9。

我们列出#1~#5前五个样本的向量表示,剩下五个类推:

这样子,就从文本型语句转换为训练集的向量表示。

进行了预处理后的数据集,就可以输入神经网络进行训练,输入是X,输出是Y,隐藏层只有一层,由于输出向量维度是多维的,所以采取softmax激活函数,执行DNN的前向传播与反向传播,然后通过梯度下降更新隐藏层系数矩阵W1输出层系数矩阵W2

传送门:多层感知机(MLP)

这里需要注意的是,由于输出的Y是多个的,在计算损失的时候是多个Y的和。这里以样本1举例,假设经过softmax输出层为:

由于样本的输出有两个,所以分布计算损失再求和(以残差为例):

word2vec优化策略

word2vec算法每次迭代要更新两个矩阵:隐藏层系数矩阵W1和输出层系数矩阵W2,如果词汇量V很大的时候,每次更新矩阵就要消耗巨大的资源,特别的是W2,还需要计算梯度。为了提高效率,word2vec有两种优化策略:Hierarchical SoftmaxNegative Sampling(负采样)。这两种策略出发点一致:不再显式使用W2矩阵,即不再完全计算或更新W2矩阵。

Hierarchical Softmax(简称HS)是用于加速神经语言模型Softmax的一种方式,HS的实质是基于哈尔曼树(一种二叉树)将计算量大的部分变为一种二分类问题,它将通过W2连接输出层改为隐藏层直接与下面二叉树根节点相连:

这里,白色的叶子节点代表词汇表所有的词汇(假设长度为V),黑色节点表示非叶子节点。用n(w,j)表示从根节点到叶子节点w的路径上的第j个非叶子节点,并且每个非叶子节点对应一个与隐藏层维度相同的向量。

训练一个神经网络意味着要输入训练样本并不断调整神经元权重,每训练一个样本,该样本的权重就会调整一次,从神经网络训练流程可以看出来:

词汇表的大小决定了Skip-Gram神经网络权重矩阵的具体规模,这些权重需要经过上亿次的训练样本来调整,这需要非常消耗资源,在实际中效率会非常低下。而负采样只需要每次更新一个训练样本的一小部分权重,并且能改善所得到的词向量的质量。

word2vec的负样本是one-hot编码后的为0的那些位置的样本,每次让一个训练样本仅仅更新一小部分的权重参数,从而降低梯度下降过程中的计算量。

参考资料:

《深入浅出Embedding》

详解word2vec相关推荐

  1. 【NLP-词向量】从模型结构到损失函数详解word2vec

    上周我们讲到,在进行NNLM训练时,能够得到副产品,词向量.本文介绍一种专门用于词向量制备的方法:word2vec,利用它能够高效的训练出词向量. 作者&编辑 | 小Dream哥 1 word ...

  2. Word2Vec详解

    Word2Vec详解 这几天集中学习了Word2Vec,实现并不复杂,但是真正对一些细节有些了解还查阅了一些资料,今天在这里统一自己整理总结一下. 简介 首先说为什么会有Word2Vec,之前对文字的 ...

  3. 【转载】word2vec 中的数学原理详解

    文章目录 一.前言 二.预备知识 三.背景知识 四.基于 Hierarchical Softmax 的模型 五.基于 Negative Sampling 的模型 六.若干源码细节 原文传送门: wor ...

  4. 转:word2vec 中的数学原理详解

    1,目录和前言 https://blog.csdn.net/itplus/article/details/37969519 2,预备知识:逻辑回归.贝叶斯公式.霍夫曼树 https://blog.cs ...

  5. 【NLP-语义匹配】详解深度语义匹配模型DSSM

    所谓语义匹配,就是在语义上衡量文本的相似度,在产业界有很多的应用需求.例如,在FAQ场景中需要计算用户输入与标问之间的相似度来寻找合适的答案.本文介绍一种经典的语义匹配技术,DSSM,主要用于语料的召 ...

  6. 通俗易懂word2vec详解词嵌入-深度学习

    https://blog.csdn.net/just_so_so_fnc/article/details/103304995 skip-gram 原理没看完 https://blog.csdn.net ...

  7. Word2Vec算法详解(CBOW和skip-gram算法详解)

    这里发现了一篇很好的教程,因此就不写了,大家直接下载看就可以了,自己也偷偷懒,这篇文章对word2vec算法思想讲解的很透彻,很浅显易懂,这里对此表示感谢,当然你的英文比较好的情况下,可以直接看英文原 ...

  8. Word2vec结构详解及原理推导

    目录 统计语言模型 神经概率语言模型 Word2vec Hierarchical Softmax Huffman 树 CBOW 和 Skip-gram Negative Sampling CBOW 和 ...

  9. 语言处理方法-Word2Vec详解

    NLP之--Word2Vec详解 2013年,Google开源了一款用于词向量计算的工具--word2vec,引起了工业界和学术界的关注.首先,word2vec可以在百万数量级的词典和上亿的数据集上进 ...

最新文章

  1. Hutool,一个贼好用的 Java 工具类库,用过都说好~
  2. 如何点击按钮弹出弹框显示几秒_产品反馈设计:如何与用户有效沟通?
  3. os.path python使用遍历文件夹文件
  4. 看了这几幅图,感觉自己物理白学了!
  5. python 元类的call总结_Python 类与元类的深度挖掘 I【经验】
  6. 「技术人生」专题第1篇:什么是技术一号位?
  7. On Error Resume Next是什么意思
  8. 关于内存对齐问题的一些资料整理
  9. vs使用未初始化的内存怎么解决_C语言内存操作陷阱总结
  10. mybatis增加数据后,获取增加数据的主键Id
  11. 计算机的最简单的操作,电脑无线投屏怎么使用(手把手教你最简单且实用的操作方法)...
  12. 在豌豆荚安卓市场下载了伪造的ES文件管理器,该流氓apk会自动的下载手机游戏
  13. 残疾男子发起倡议:公务员招一定比例残疾人
  14. 介绍两种Revit绘制斜墙的方法及快速【梁随斜板】
  15. 解析button和input type=button 的区别
  16. TP6助手函数使用示例
  17. Fiddler抓取数据并分析(完整的配置教程) 1
  18. 针不戳 java后端开发岗面经分享,面经+知识点+总结
  19. 网页中的th/th是什么意思
  20. 十年沉淀,回头发觉我当年面试 “Android” 竟然这么难!

热门文章

  1. #51CTO学院四周年# 感谢51CTO学院让我走出迷茫
  2. UI设计到底是什么:什么叫ui设计?
  3. Ambarella公司申请首次公开招股
  4. Python Django 基本创建 App创建
  5. 幻想未来,助你成为人生赢家?
  6. MSI (Message Signaled Interrupts)
  7. 图表示学习之时序的事件和节点动态
  8. 蔡徐坤一条微博转发过亿 幕后推手被判刑五年
  9. Google谷歌地图基础
  10. 文字编辑软件的颠峰作品——Word发展历史全析