翻译原始链接: http://mccormickml.com/2016/04/19/word2vec-tutorial-the-skip-gram-model/

这个教程包含 训练word2vec的 skip-gram 模型。通过这个教程,我希望跳过常规Word2Vec 的介绍和抽象理解, 而是去讨论一些细节。特别是skip gram的网络结构。

##模型
skipgram model 常常让人惊讶于它的简单结构。我认为基本没啥弯路,或者需要复杂的模型解释。

让我们从高层语义开始。Word2Vec 使用了一个小trick,你可能在其他machine learning问题中见过。我们训练一个简单的网络来执行一个任务,但是最乎我们实际上并没有用这个网络 来预测 test中的任务。而是,利用这个任务(目标)去学习网络中的权重W。我们将看到这些学出来的权重W就是我们所要的词向量(word vectors)。

你可能会见到这个trick,的另一个地方是 auto-encoder。 auto-encoder 常常用来压缩一个输入,然后再把压缩后的结果解压回去。在训练完成之后,你可以把解压的网络扔掉,只使用压缩的网络。这就是一个trick来获得 无监督下 好的图像特征。

##假任务
那现在我们来讨论一下我们所要建立网络的训练任务(假任务)。然后我们再来讨论为什么这个任务可以间接地学习到想要的word vector。

给定句子中一个特定的词(input word),随机选它附近的一个词。网络的目标是预测 我们选到这个附近词的概率。

实际上这个“附近“,是一个窗口。一个常用的窗口大小为5,意味着 输入词前方的5个词,后方的5个词。

输出的概率实际上关系到周围的每一个词。比如,如果你给出一个词苏联(Soviet),那么概率很高的输出 应该是 联合(Union)和俄罗斯(Russia)而不是西瓜或者袋鼠。

我们通过给网络 输入我们在训练文本中 找到的词对,来训练网络。下面这个例子展示了从“The quick brown fox jumps over the lazy dog.“ 中找到的一些词对. 我使用了window size=2,而蓝色标出的词为输入词。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rQlLRapY-1672065626013)(http://mccormickml.com/assets/word2vec/training_data.png)]

网络将会去学这些pair出现的统计概率。举个例子来说,网络会得到很多 (苏联,联合)的概率多过(苏联,大脚怪)。所以当训练完成的时候,当你输入了苏联这个词,联合会得到比大脚怪更高的预测概率。

##模型细节
首先,你不能把word变成一个string输入给网络,所以我们要找另外一个形式。所以我们首先建立一个word的词典,比如我们有10,000个不同的词,那么我们就建立一个10,000的词典。

“ants“就可以变成一个10,000维的向量。这个向量每一维代表一个词,我们把代表“ants“的那一维置为1,其他维置为0。

而网络的输出也是一样也是一个 10,000维的向量,代表每个词预测的概率。

网络结构如下图:

网络中没有激活函数,输出使用的是softmax。我们等下再回来讨论。

当使用这个网络来训练词pair的时候,训练的输入是one-hot向量 训练的目标输出也是一个one-hot向量。但实际test这个网络的时候,输出会是一个概率分布。
(译者按:打个比方,苏联只 和 联合/俄罗斯 有交集,所以会收敛到 50%, 50% 的分布。而不是 联合就是100%。 当然test的时候也可以找最高概率的结果,那也是one-hot。)

##隐层
我们需要学习300维的word vector。所以我们使用的隐层将是 10,000行 (词典中词的数量)和 300列的 (每个隐层神经元)。

300 是Google公布出来在Google news 上训练使用的维数,你可以通过这个链接([https://code.google.com/archive/p/word2vec/]) 下载(需翻墙)。这书300是个超参,可以按你的实际需求修改。

如果你从行的角度看,这个隐层的W实际上就是我们要的word vector。

所以最终目标就是 让网络学习 隐层中的权重。当我们训练完成的时候,我们就可以把后半部分 output层给去掉了。

好,让我们回到之前的模型的定义。

现在你可能在问自己,one-hot向量就是基本全是0,只有一个是1的向量,那么这会产生什么结果呢? 当你用 1×10,0001\times10,0001×10,000 乘 10,000×30010,000\times30010,000×300 的矩阵,他相当于只选择了那一行‘1‘的。下面是一个简单的例子:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gnD7crsI-1672065626018)(http://mccormickml.com/assets/word2vec/matrix_mult_w_one_hot.png)]

这意味着这个网络的隐层实际上就是像一个 查找表(lookup table)一样。输出的300维就是这个词的word vector。

##输出层
‘ant‘的1×3001\times3001×300 的word vector 然后传到了输出层。输出层是一个softmax 的分类器(译者按:我认为不是regression,就是classification吧)主旨就是把每个输出normal到0~1之间,并且这些输出的和为1。

更具体的来说,每个word vector(1×3001\times3001×300)将会乘一个W(300×10,000300\times10,000300×10,000)再次映射到 10,000维,每一维代表临近词的概率。而这些概率做一个softmax的normal(就是图中的expexpexp 的函数,来归一化)。 下面是一张说明图。

需要注意的是,神经网络彬不知道输出词对于输入词的位置。输出词常常在输入词的前面还是后面。举个例子来说,虽然York 100%是跟在 New的后面,但是训练出来的网络 用York 作为输入,New 并不是100%的,还可能是其词。

##直觉
让我们对这个网络做一个直觉上的感受。

如果两个不同的词有相同的上下文,那么我们的模型会需要预测类似的输出。那么网络为了输出类似的预测,他就会使这两个不同词的word vector尽可能相似。所以,如果两个词有相同的上下文,我们就可以得到比较接近的word vector。

那么什么词有相同的上下文? 比如一些近义词 smart 和intelligent 再比如 一些相关的词 engine 和 transmission。

这也可以帮你处理一些形式变化。比如 ant 和ants 因为他们应该有类似的上下文。

下一步

你可能注意到 skip-gram 有很多权重需要学习。 举个例子说,300维特征,10,000的词表, 3MB×23MB\times23MB×2 的权重需要去学习,输入输出层各一个。
所以如果在一个更大的词典上学习,word2vec的作者引入了一些trick 让训练更可行。这将会在下一章中介绍。(我也做了翻译,欢迎大家继续看~)



感谢看完,也欢迎关注我的其他文章:

2020年 行人重识别的挑战 与 最新进展 (35页PPT整理)
Pytorch有什么节省显存的小技巧?
IJCV2022 | 逆转特征让re-id模型从88.54%到0.15%

Word2Vec教程 - Skip-Gram模型相关推荐

  1. Word2Vec教程-Skip-Gram模型

    上海站 | 高性能计算之GPU CUDA培训 4月13-15日 三天密集式学习  快速带你晋级 阅读全文 > 正文共1930个字,6张图,预计阅读时间5分钟. 原文:Word2Vec Tutor ...

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

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

  3. 黑马lavarel教程---5、模型操作(AR模式)

    黑马lavarel教程---5.模型操作(AR模式) 一.总结 一句话总结: AR: ActiveRecord :Active Record(活动记录),是一种领域模型模式,特点是一个模型类对应关系型 ...

  4. SAP UI5 初学者教程之七 - JSON 模型初探试读版

    Jerry 从 2014 年加入 SAP成都研究院 CRM Fiori 开发团队之后开始接触 SAP UI5,曾经在 SAP 社区和"汪子熙"微信公众号上发表过多篇关于 SAP U ...

  5. 3D建模软件测试自学,收藏:5个自学3DMAX教程以及3D模型资源的网站

    收藏:5个自学3DMAX教程以及3D模型资源的网站 2019-03-11 19:05:43 10点赞 131收藏 0评论 话不多说就直接上网站了, 第一个:3D侠 这个有大量的模型和模型库,最重要的是 ...

  6. v_rep教程----构建纯净模型

    v_rep教程----构建纯净模型 构建可见形状: 建立关节 模型定义 本教程将指导您逐步建立一个纯净的模拟模型,一个机器人,或任何其他项目.得到一个美观.快速显示.快速仿真和稳定的仿真模型,这是一个 ...

  7. UML教程1:模型图的构成和功能说明

    文章目录 大纲 一.前言 1.1 UML概述 1.1.1 UML简介 1.1.2 UML模型图的构成 1.2 UML事物 1.2.1 构件事物 1.2.2 行为事物 1.2.3 分组事物 1.2.4 ...

  8. 仙剑人物MMD制作详细教程,包含模型提取和3DMAX简单操作

    [仙剑人物MMD制作详细教程,包含模型提取和3DMAX简单操作]_夏侯瑾轩吧_百度贴吧

  9. word2vec三种保存模型方式

      大家好,我是爱编程的喵喵.双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中.从事机器学习以及相关的前后端开发工作.曾在阿里云.科大讯飞.CCF等比赛获得多次Top名次.现 ...

最新文章

  1. 钻进眼球的致盲寄生虫威胁近亿人,却只是生存竞争的失败者
  2. 【指标统计】本区或跨区取WEB统计指标配置方法
  3. Mysql-innoDB存储引擎(事务,锁,MVCC)
  4. Linux centos7 shell特殊符号、cut命令、sort_wc_uniq命令、tee_tr_split命令、shell特殊符号...
  5. 编写程序计算 sentence 中有多少个单词,并指出其中最长和最短的单词。如果有多个最长或最短的单词,则将它们全部输出。
  6. 70. Climbing Stairs 题解
  7. 递增的整数序列链表的插入_LeetCode基础算法题第178篇:和为零的N个唯一整数
  8. vs2010 打开项目卡死问题解决办法
  9. 【Ubuntu】用g++生成动态库
  10. Google 辟谣,Android 和 Chrome OS 不合并 - Andromeda
  11. 大数据分析数据来源的有哪些类型
  12. WDS+MDT部署Windows7操作系统2—;导入启动映像和安装映像
  13. safair下html换行产生的间距设置font-size:0无效
  14. 日记(docker)
  15. 选课蹭课记录(2021.8.31)
  16. SonicwALL NSA-5600 防火墙基本介绍
  17. 现在的access数据库有2种后缀格式:.mdb和.accdb,区别是.mdb是access2003版及以前,.accdb是2007版access的格式
  18. 2017中兴面试经验
  19. BlazeDS入门及配置
  20. 【数据类型转换、运算符、方法入门】

热门文章

  1. Python中的(1,)
  2. AI遮天传 DL-多层感知机
  3. insmod: error inserting 'vivi.ko': -1 Unknown symbol in module 问题解决办法
  4. Linux在加载模块时报insmod: error inserting xxx.ko -1 File exists这个错
  5. 如何用js实现图片下载
  6. 中国教育资助网“益行天下”大型公益学子资助活动启动
  7. 如何批量替换文件名称中的指定字符?
  8. CUDA C编程(笔记)——CUDA的异构并行计算
  9. 将文件放到Android模拟器的SD卡中的两种解决方法
  10. 2018华为实习生招聘(软件)