精华内容
下载资源
问答
  • 今天小编就为大家分享一篇pytorch中的embedding词向量的使用方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • pytorch中的embedding词向量的使用

    万次阅读 多人点赞 2018-07-17 23:34:45
    嵌入在 pytorch 中非常简单,只需要调用 torch.nn.Embedding(m, n) 就可以了,m 表示单词的总数目,n 表示嵌入的维度,其实嵌入就相当于是一个大矩阵,矩阵的每一行表示一个单词。 emdedding初始化 默认是...

    Embedding

    词嵌入在 pytorch 中非常简单,只需要调用 torch.nn.Embedding(m, n) 就可以了,m 表示单词的总数目,n 表示词嵌入的维度,其实词嵌入就相当于是一个大矩阵,矩阵的每一行表示一个单词。

    emdedding初始化

    默认是随机初始化的

    import torch
    from torch import nn
    from torch.autograd import Variable
    # 定义词嵌入
    embeds = nn.Embedding(2, 5) # 2 个单词,维度 5
    # 得到词嵌入矩阵,开始是随机初始化的
    torch.manual_seed(1)
    embeds.weight
    # 输出结果:
    Parameter containing:
    -0.8923 -0.0583 -0.1955 -0.9656  0.4224
     0.2673 -0.4212 -0.5107 -1.5727 -0.1232
    [torch.FloatTensor of size 2x5]

    如果从使用已经训练好的词向量,则采用

    pretrained_weight = np.array(args.pretrained_weight)  # 已有词向量的numpy
    self.embed.weight.data.copy_(torch.from_numpy(pretrained_weight))

    embed的读取

    读取一个向量。
    注意参数只能是LongTensor型的

    # 访问第 50 个词的词向量
    embeds = nn.Embedding(100, 10)
    embeds(Variable(torch.LongTensor([50])))
    # 输出:
    Variable containing:
     0.6353  1.0526  1.2452 -1.8745 -0.1069  0.1979  0.4298 -0.3652 -0.7078  0.2642
    [torch.FloatTensor of size 1x10]

    读取多个向量。
    输入为两个维度(batch的大小,每个batch的单词个数),输出则在两个维度上加上词向量的大小。

    • Input: LongTensor (N, W), N = mini-batch, W = number of indices to extract per mini-batch
    • Output: (N, W, embedding_dim)

    见代码

    # an Embedding module containing 10 tensors of size 3
    embedding = nn.Embedding(10, 3)
    # 每批取两组,每组四个单词
    input = Variable(torch.LongTensor([[1,2,4,5],[4,3,2,9]]))
    a = embedding(input) # 输出2*4*3
    a[0],a[1]

    输出为:

    (Variable containing:
     -1.2603  0.4337  0.4181
      0.4458 -0.1987  0.4971
     -0.5783  1.3640  0.7588
      0.4956 -0.2379 -0.7678
     [torch.FloatTensor of size 4x3], Variable containing:
     -0.5783  1.3640  0.7588
     -0.5313 -0.3886 -0.6110
      0.4458 -0.1987  0.4971
     -1.3768  1.7323  0.4816
     [torch.FloatTensor of size 4x3])
    展开全文
  • Embedding词嵌入在 pytorch 中非常简单,只需要调用 torch.nn.Embedding(m, n) 就可以了,m 表示单词的总数目,n 表示词嵌入的维度,其实词嵌入就相当于是一个大矩阵,矩阵的每一行表示一个单词。emdedding初始化...

    Embedding

    词嵌入在 pytorch 中非常简单,只需要调用 torch.nn.Embedding(m, n) 就可以了,m 表示单词的总数目,n 表示词嵌入的维度,其实词嵌入就相当于是一个大矩阵,矩阵的每一行表示一个单词。

    emdedding初始化

    默认是随机初始化的

    import torch

    from torch import nn

    from torch.autograd import Variable

    # 定义词嵌入

    embeds = nn.Embedding(2, 5) # 2 个单词,维度 5

    # 得到词嵌入矩阵,开始是随机初始化的

    torch.manual_seed(1)

    embeds.weight

    # 输出结果:

    Parameter containing:

    -0.8923 -0.0583 -0.1955 -0.9656 0.4224

    0.2673 -0.4212 -0.5107 -1.5727 -0.1232

    [torch.FloatTensor of size 2x5]

    如果从使用已经训练好的词向量,则采用

    pretrained_weight = np.array(args.pretrained_weight) # 已有词向量的numpy

    self.embed.weight.data.copy_(torch.from_numpy(pretrained_weight))

    embed的读取

    读取一个向量。

    注意参数只能是LongTensor型的

    # 访问第 50 个词的词向量

    embeds = nn.Embedding(100, 10)

    embeds(Variable(torch.LongTensor([50])))

    # 输出:

    Variable containing:

    0.6353 1.0526 1.2452 -1.8745 -0.1069 0.1979 0.4298 -0.3652 -0.7078 0.2642

    [torch.FloatTensor of size 1x10]

    读取多个向量。

    输入为两个维度(batch的大小,每个batch的单词个数),输出则在两个维度上加上词向量的大小。

    Input: LongTensor (N, W), N = mini-batch, W = number of indices to extract per mini-batch

    Output: (N, W, embedding_dim)

    见代码

    # an Embedding module containing 10 tensors of size 3

    embedding = nn.Embedding(10, 3)

    # 每批取两组,每组四个单词

    input = Variable(torch.LongTensor([[1,2,4,5],[4,3,2,9]]))

    a = embedding(input) # 输出2*4*3

    a[0],a[1]

    输出为:

    (Variable containing:

    -1.2603 0.4337 0.4181

    0.4458 -0.1987 0.4971

    -0.5783 1.3640 0.7588

    0.4956 -0.2379 -0.7678

    [torch.FloatTensor of size 4x3], Variable containing:

    -0.5783 1.3640 0.7588

    -0.5313 -0.3886 -0.6110

    0.4458 -0.1987 0.4971

    -1.3768 1.7323 0.4816

    [torch.FloatTensor of size 4x3])

    以上这篇pytorch中的embedding词向量的使用方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

    本文标题: pytorch中的embedding词向量的使用方法

    本文地址: http://www.cppcns.com/jiaoben/python/268891.html

    展开全文
  • embedding = tf.get_variable('embedding', [self.config.vocab_size, self.config.embedding_dim]) embedding_inputs = tf.nn.embedding_lookup(embedding, self.input_x) 和gensim的word2vec有...
  • 一、Word Embedding在NLP任务中,我们将自然语言交给...如果将 Word 看成文本的最小单元,可以将嵌入 (Word Embedding) 理解为一种映射,其过程是:将文本空间中的某个 Word,通过一定的方法,映射到(或者说嵌...

    db406c82fd9f8bbcc6773a5a77a64d88.png

    一、Word Embedding

    在NLP任务中,我们将自然语言交给算法来处理,但计算机无法直接理解人类的语言,因此首先要做的是事情就是将语言数学化,即将文本数据转换为数值型数据,由此引出 Word Embedding 的概念。

    如果将 Word 看成文本的最小单元,可以将词嵌入 (Word Embedding) 理解为一种映射,其过程是:将文本空间中的某个 Word,通过一定的方法,映射到(或者说嵌入 embedding)到一个数值空间, Word 在数值空间的表示即 word representation。

    如果该数值空间是一个向量空间,每个 Word 对应一个一维向量,那么这个一维向量被称为词向量。

    Word embedding 将「不可计算」「非结构化」的词转化为「可计算」「结构化」的向量。这一步解决的是”将现实问题转化为数学问题“,是人工智能非常关键的一步。

    注意:词向量只是针对“词”来提的,事实上,我们也可以针对更细粒度或更粗粒度来进行推广,如字向量,句子向量和文档向量, 它们能为字、句子、文档等单元提供更好的表示。

    二、词向量

    如何将词映射为向量?

    (1)One-hot 表示

    最简单的一种词向量是 one-hot representation,即用一个长度为

    的向量来表示一个词,
    为词典
    的大小。该一维向量的分量只有一个1,其余全为0。1对应的位置是该词在词典
    中的索引。
    • 实例

    假设有句子:apple on a apple tree。我们基于这个句子构建一个字典 [“apple”, “on”, “a”, “tree”]。用 one-hot 编码每个单词,则有 apple 对应的 vector 就是 [1, 0, 0, 0],a 对应的 vector 就是 [0, 0, 1, 0]。

    • 缺点

    词的 one-hot 表示有一些缺点:

    1) 维数灾难:one-hot 表示的空间复杂度是

    ,当
    很大,即当词典
    很大时,需要很多空间来存储。

    2) 表征能力差:one-hot 表示只能唯一区别每个词,但不包含语义信息,更不能刻画词跟词之间的相似性。

    (2)Distributed 表示

    另一种词向量是 Distributed representation,它最早是 Hinton 于1986年在 nature 上提出的:《Learning representations by backpropagating errors》,可以克服 one-hot representation 的上述缺点。它的基本想法是:通过训练将每个单词映射为一个固定长度的短向量(短是相对 one-hot 表示而言的)。这些向量构成一个词向量空间,每个向量可视为该空间中的一个点,在这个空间上引入"距离",根据词之间的距离来判断他们的相似性(词法、语义上的)。

    Distributed representation 的形式化表示:为词典

    的任意词
    指定一个长度为
    的实值向量
    ,
    就是
    的词向量。
    引用:为什么叫做 Distributed Representation?
    我是这样理解的:one hot 表示中,词向量只有一个非零分量,信息全都集中在这个非零分量上了,非常集中。而 Distributed representation 则有大量非零分量,相当于把词的信息分布到各个分量中去,相对分散,类似分布式并行。
    如何获取词向量?

    将词映射到一个低维向量后,无疑能节省存储空间和运算时间。但向量之间的距离却未必能衡量词的相似性,如何保证产生的词向量能衡量词相似性呢?

    Harris 在 1954 年提出的分布假说(distributional hypothesis):上下文相似的词,其语义也相似。这启示我们可以用单词的上下文去刻画单词:当单词上下文相似时,单词相似,词向量距离近;当上下文不相似时,单词不相似,词向量距离远。也就是构造词向量时,要用到单词及其上下文信息。

    用单词及其上下文来估计词向量的模型有 LSA (LatentSemantic Analysis/潜在语义分析模型) 和 LDA (Latent Dirichlet Allocation/潜在狄利克雷分配模型)。此外,神经概率语言模型也用到了单词及其上下文,词向量是它的副产品(该模型的目标是生成语言模型),但它产生的词向量也包含了语义信息。Word2vec 则是对神经概率语言模型的改进,其目标就是为了产生含语义信息的词向量。

    (3)词向量的应用

    词向量有什么用处?

    一份好的词向量携带了语义信息且维度经过压缩便于运算,有很多用武之地,例如:

    • 计算相似度,比如man和woman的相似度比man和apple的相似度高;
    • 在一组单词中找出与众不同的一个,例如在如下词汇列表中:[dog, cat, chicken, boy],利用词向量可以识别出boy和其他三个词不是一类;
    • 直接进行词的运算,例如经典的:woman+king-man =queen;
    • 由于携带了语义信息,还可以计算一段文字出现的可能性,也就是说,这段文字是否通顺。

    参考

    word2vec 中的数学原理详解 https://www.cnblogs.com/peghoty/p/3857839.html

    Word Embedding 知识总结https://blog.csdn.net/savinger/article/details/89308831

    展开全文
  • 词向量,英文名叫Word Embedding,按照字面意思,应该是词嵌入。说到词向量,不少读者应该会立马想到Google出品的Word2Vec,大牌效应就是不一样。另外,用Keras之类的框架还有一个Embedding层,也说是将词ID映射为...
  • 嵌入 word embedding embedding 嵌入 embedding: 嵌入, 在数学上表示一个映射f:x->y, 是将x所在的空间映射到y所在空间上去,并且在x空间中每一个x有y空间中唯一的y与其对应。 嵌入,也就是把x在y空间中找到一个...
  • 小叽导读:13年 Word2vev 横空出世,开启了基于 word embedding pre-trained 的 NLP 技术浪潮,6年过去了,embedding 技术已经成为了 nn4nlp 的标配,从不同层面得到了提升和改进。今天,我们一起回顾 embedding 的...
  • Word2Vec、WordEmbedding及预训练词向量的一文总结
  • 13年 Word2vev 横空出世,开启了基于 word embedding pre-trained 的 NLP 技术浪潮,6年过去了,embedding 技术已经成为了 nn4nlp 的标配,从不同层面得到了提升和改进。今天,我们一起回顾 embedding 的理论基础,...
  • 词向量 Word Embedding one hot

    千次阅读 2018-04-13 14:56:48
    转载地址:点击打开链接词向量,英文名叫Word Embedding,按照字面意思,应该是词嵌入。...由于先入为主的意识,大家可能就会将词向量跟Word2Vec等同起来,而反过来问“Embedding是哪种词向量?”这类问题,尤其是...
  • 文章目录常见的语言表示模型词向量Embedding区分Embedding层——keras中的one-hot映射为 向量的层;词向量(word embedding)——一种语言模型表示方法分布式表示(distributed representation)word2vec[More-...
  • 文章目录返回主目录词向量(Word Embedding)句向量(Sentence Embedding) 返回主目录 这是一个系列的文章,点击返回综合目录页 词向量(Word Embedding词向量(Word embedding),又叫Word嵌入式自然语言...
  • 词向量,英文名叫Word Embedding,按照字面意思,应该是词嵌入。说到词向量,不少读者应该会立马想到Google出品的Word2Vec,大牌效应就是不一样。另外,用Keras之类的框架还有一个Embedding层,也说是将词ID映射为...
  • 词向量Embedding

    2019-04-20 14:52:33
    https://spaces.ac.cn/archives/4122
  • 文章目录Word VectorSkip-...词向量模型可表示为含有一层隐藏层的前向神经网络,词向量为输入层到隐藏层的参数,即参数矩阵的行向量. 语料库总词数为|V| embedding后的单词维度为n 输入层为n维向量 输入层到隐藏...
  • 嵌入向量WordEmbedding

    2019-03-11 15:13:00
    嵌入向量WordEmbedding的原理和生成方法 WordEmbedding 嵌入向量(WordEmbedding)是NLP里面一个重要的概念,我们可以利用WordEmbedding将一个单词转换成固定长度的向量表示,从而便于进行数学...
  • 简而言之,词向量技术是将词转化成为稠密向量,并且对于相似的词,其对应的词向量也相近。 1.1 离散表示(one-hot representation) 传统的基于规则或基于统计的自然语义处理方法将单词看作一...
  • pytorch如何读取词向量(nn.Embedding)

    千次阅读 2019-10-11 13:17:12
    如何从已经训练好的词向量矩阵中读取词向量呢?...# 首先使用nn,Embedding定义一个词向量矩阵,称作embed embed = nn.Embedding(embeddings.shape[0], embeddings.shape[1]) # 接下来将embeddings中的值拷贝到emb...
  • 自然语言处理教程,该课程着重讲解词向量(Word embedding),词向量是深度学习技术在自然语言处理中应用的基础,因此掌握好词向量是学习深度学习技术在自然语言处理用应用的重要环节。本课程从One-hot编码开始,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,329
精华内容 531
关键字:

embedding词向量