干货|10分钟快速入门PyTorch (7) 词向量

2017 年 9 月 26 日 机器学习研究会

10分钟入门PyTorch系列笔记

10分钟快速入门PyTorch(1)

干货|10分钟入门PyTorch(2)~附源码

干货|PyTorch中如何使用tensorboard可视化


Word Embedding


在自然语言处理中词向量是很重要的,首先介绍一下词向量


之前做分类问题的时候大家应该都还记得我们会使用one-hot编码,比如一共有5类,那么属于第二类的话,它的编码就是(0, 1, 0, 0, 0),对于分类问题,这样当然特别简明,但是对于单词,这样做就不行了,比如有1000个不同的词,那么使用one-hot这样的方法效率就很低了,所以我们必须要使用另外一种方式去定义每一个单词,这就引出了word embedding。


我们可以先举三个例子,比如

  • The cat likes playing ball.

  • The kitty likes playing wool.

  • The dog likes playing ball.

  • The boy likes playing ball.


假如我们使用一个二维向量(a, b)来定义一个词,其中a,b分别代表这个词的一种属性,比如a代表是否喜欢玩飞盘,b代表是否喜欢玩毛线,并且这个数值越大表示越喜欢,这样我们就可以区分这三个词了,为什么呢?


比如对于cat,它的词向量就是(-1, 4),对于kitty,它的词向量就是(-2, 5),对于dog,它的词向量就是(3, -2),对于boy,它的词向量就是(-2, -3),我们怎么去定义他们之间的相似度呢,我们可以通过他们之间的夹角来定义他们的相似度。



上面这张图就显示出了不同的词之间的夹角,我们可以发现kitty和cat是非常相似的,而dog和boy是不相似的。


而对于一个词,我们自己去想它的属性不是很困难吗,所以这个时候就可以交给神经网络了,我们只需要定义我们想要的维度,比如100,然后通过神经网络去学习它的每一个属性的大小,而我们并不用关心到底这个属性代表着什么,我们只需要知道词向量的夹角越小,表示他们之间的语义更加接近。


下面我们使用pytorch来实现一个word embedding

Code

在pytorch里面word embedding实现是通过一个函数来实现的nn.Embedding

word_to_ix = {'hello': 0, 'world': 1}

embeds = nn.Embedding(2, 5)

hello_idx = torch.LongTensor([word_to_ix['hello']])

hello_idx = Variable(hello_idx)

hello_embed = embeds(hello_idx)

print(hello_embed)


这就是我们输出的hello这个词的word embedding,下面我们一步一步来解释一下代码


首先我们需要word_to_ix = {'hello': 0, 'world': 1},每个单词我们需要用一个数字去表示他,这样我们需要hello的时候,就用0来表示它。


接着就是word embedding的定义nn.Embedding(2, 5),这里的2表示有2个词,5表示5维,其实也就是一个2x5的矩阵,所以如果你有1000个词,每个词希望是100维,你就可以这样建立一个word embedding,nn.Embedding(1000, 100)。


如何访问每一个词的词向量是下面两行的代码,注意这里的词向量的建立只是初始的词向量,并没有经过任何修改优化,我们需要建立神经网络通过learning的办法修改word embedding里面的参数使得word embedding每一个词向量能够表示每一个不同的词。


转自:机器学习算法与自然语言处理


完整内容请点击“阅读原文”

登录查看更多
8

相关内容

一份简明有趣的Python学习教程,42页pdf
专知会员服务
76+阅读 · 2020年6月22日
深度学习自然语言处理概述,216页ppt,Jindřich Helcl
专知会员服务
209+阅读 · 2020年4月26日
Transformer文本分类代码
专知会员服务
116+阅读 · 2020年2月3日
一网打尽!100+深度学习模型TensorFlow与Pytorch代码实现集合
【书籍】深度学习框架:PyTorch入门与实践(附代码)
专知会员服务
160+阅读 · 2019年10月28日
【开源书】PyTorch深度学习起步,零基础入门(附pdf下载)
专知会员服务
107+阅读 · 2019年10月26日
开源书:PyTorch深度学习起步
专知会员服务
49+阅读 · 2019年10月11日
机器学习入门的经验与建议
专知会员服务
90+阅读 · 2019年10月10日
100行Python代码,轻松搞定神经网络
大数据文摘
4+阅读 · 2019年5月2日
百闻不如一码!手把手教你用Python搭一个Transformer
大数据文摘
18+阅读 · 2019年4月22日
最新翻译的官方 PyTorch 简易入门教程
人工智能头条
10+阅读 · 2019年1月10日
PyTorch:60分钟入门学习
全球人工智能
13+阅读 · 2018年5月18日
实战 | 手把手教你用PyTorch实现图像描述(附完整代码)
手把手教 | 深度学习库PyTorch(附代码)
数据分析
7+阅读 · 2018年3月20日
干货|自然语言处理中的词向量 — word2vec!
全球人工智能
7+阅读 · 2018年1月25日
手把手教你由TensorFlow上手PyTorch(附代码)
数据派THU
5+阅读 · 2017年10月1日
Image Captioning: Transforming Objects into Words
Arxiv
7+阅读 · 2019年6月14日
Arxiv
5+阅读 · 2018年6月4日
Arxiv
4+阅读 · 2018年5月21日
Arxiv
10+阅读 · 2018年3月22日
Arxiv
7+阅读 · 2018年3月21日
VIP会员
相关VIP内容
一份简明有趣的Python学习教程,42页pdf
专知会员服务
76+阅读 · 2020年6月22日
深度学习自然语言处理概述,216页ppt,Jindřich Helcl
专知会员服务
209+阅读 · 2020年4月26日
Transformer文本分类代码
专知会员服务
116+阅读 · 2020年2月3日
一网打尽!100+深度学习模型TensorFlow与Pytorch代码实现集合
【书籍】深度学习框架:PyTorch入门与实践(附代码)
专知会员服务
160+阅读 · 2019年10月28日
【开源书】PyTorch深度学习起步,零基础入门(附pdf下载)
专知会员服务
107+阅读 · 2019年10月26日
开源书:PyTorch深度学习起步
专知会员服务
49+阅读 · 2019年10月11日
机器学习入门的经验与建议
专知会员服务
90+阅读 · 2019年10月10日
相关资讯
100行Python代码,轻松搞定神经网络
大数据文摘
4+阅读 · 2019年5月2日
百闻不如一码!手把手教你用Python搭一个Transformer
大数据文摘
18+阅读 · 2019年4月22日
最新翻译的官方 PyTorch 简易入门教程
人工智能头条
10+阅读 · 2019年1月10日
PyTorch:60分钟入门学习
全球人工智能
13+阅读 · 2018年5月18日
实战 | 手把手教你用PyTorch实现图像描述(附完整代码)
手把手教 | 深度学习库PyTorch(附代码)
数据分析
7+阅读 · 2018年3月20日
干货|自然语言处理中的词向量 — word2vec!
全球人工智能
7+阅读 · 2018年1月25日
手把手教你由TensorFlow上手PyTorch(附代码)
数据派THU
5+阅读 · 2017年10月1日
Top
微信扫码咨询专知VIP会员