文档章节

PyTorch快速入门教程七(pytorch下RNN如何做自然语言处理)

earnpls
 earnpls
发布于 2017/07/02 09:21
字数 1178
阅读 624
收藏 1

Word Embedding

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

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

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

  1. The cat likes playing ball.
  2. The kitty likes playing wool.
  3. The dog likes playing ball.
  4. The boy likes playing ball.

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

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

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

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

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

代码

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

# -*- coding: utf-8 -*-
import numpy as np
import torch
import torch.nn as nn
import torch.nn.functional as F
from torch.autograd import Variable

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,代码会输出如下内容,接下来我们解析一下代码:

Variable containing:
 0.4606  0.6847 -1.9592  0.9434  0.2316
[torch.FloatTensor of size 1x5]

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

接着就是word embedding的定义nn.Embedding(2, 5),这里的2表示有2个词,5表示5维度,其实也就是一个2x5的矩阵,所以如果你有1000个词,每个词希望是100维,你就可以这样建立一个word embeddingnn.Embedding(1000, 100)。如何访问每一个词的词向量是下面两行的代码,注意这里的词向量的建立只是初始的词向量,并没有经过任何修改优化,我们需要建立神经网络通过learning的办法修改word embedding里面的参数使得word embedding每一个词向量能够表示每一个不同的词。

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

接着这两行代码表示得到一个Variable,它的值是hello这个词的index,也就是0。这里要特别注意一下我们需要Variable,因为我们需要访问nn.Embedding里面定义的元素,并且word embeding算是神经网络里面的参数,所以我们需要定义Variable

hello_embed = embeds(hello_idx)这一行表示得到word embedding里面关于hello这个词的初始词向量,最后我们就可以print出来。

 

在这里,我整理发布了Pytorch中文文档,方便大家查询使用,同时也准备了中文论坛,欢迎大家学习交流!

Pytorch中文文档

Pytorch中文论坛

Pytorch中文文档已经发布,完美翻译,更加方便大家浏览:

Pytorch中文网:https://ptorch.com/

Pytorch中文文档:https://ptorch.com/docs/1/

本文转载自:https://ptorch.com/news/11.html

共有 人打赏支持
earnpls
粉丝 6
博文 26
码字总数 74
作品 0
昌平
程序员
私信 提问
PyTorch 你想知道的都在这里

本文转载地址,并进行了加工。本文适用于深度学习新手的“入门指导系列”,也有适用于老司机的论文代码实现,包括 Attention Based CNN、A3C、WGAN、BERT等等。所有代码均按照所属技术领域分...

readilen
2018/10/20
0
0
库、教程、论文实现,这是一份超全的PyTorch资源列表(Github 2.2K星)

选自 Github,作者:bharathgs,机器之心编译。 机器之心发现了一份极棒的 PyTorch 资源列表,该列表包含了与 PyTorch 相关的众多库、教程与示例、论文实现以及其他资源。在本文中,机器之心...

机器之心
2018/10/22
0
0
PyTorch 1.0 稳定版来啦

雷锋网 AI 科技评论消息,NeurIPS 正在加拿大召开,会上,Facebook 宣布正式推出 PyTorch 1.0 稳定版,在 Facebook code 博客上,也一并同步了这一消息。雷锋网(公众号:雷锋网) AI 科技评论...

汪思颖
2018/12/08
0
0
官宣,PyTorch 1.0 稳定版本现已推出

简评:快来一起快乐地学习吧。 随着 PyTorch 生态系统和社区继续为开发人员提供有趣的新项目和教育资源,今天(12 月 7日)在 NeurIPS 会议上发布了 PyTorch 1.0 稳定版。研究人员和工程师现...

极光推送
2018/12/10
0
0
干货警告!476个PyTorch资源大合集推荐,GitHub超过3600星

乾明 编辑整理 量子位 报道 | 公众号 QbitAI 最近,GitHub的“趋势”版块出现了一份PyTorch资源,内容从库到教程再到论文实现,应用尽有,质量贼高。 无论你在PyTorch是一名青铜选手,还是一...

量子位
2018/10/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Cookie 显示用户上次访问的时间

import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.serv......

gwl_
今天
1
0
网络编程

第14天 网络编程 今日内容介绍  网络通信协议  UDP通信  TCP通信 今日学习目标  能够辨别UDP和TCP协议特点  能够说出UDP协议下两个常用类名称  能够说出TCP协议下两个常用类名称...

stars永恒
今天
1
0
二进制相关

二进制 众所周知计算机使用的是二进制,数字的二进制是如何表示的呢? 实际就是逢二进一。比如 2 用二进制就是 10。那么根据此可以推算出 5的二进制等于 10*10+1 即为 101。 在计算机中,负数以...

NotFound403
昨天
3
0
day22:

1、写一个getinterface.sh 脚本可以接受选项[i,I],完成下面任务: 1)使用格式:getinterface.sh [-i interface | -I ip] 2)当用户使用-i选项时,显示指定网卡的IP地址;当用户使用-I选项...

芬野de博客
昨天
2
0
Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现

自Spring Cloud Alibaba发布第一个Release以来,就备受国内开发者的高度关注。虽然Spring Cloud Alibaba还没能纳入Spring Cloud的主版本管理中,但是凭借阿里中间件团队的背景,还是得到不少...

程序猿DD
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部