Embeddingbag与Embedding

>- **🍨 本文为[🔗365天深度学习训练营](https://mp.weixin.qq.com/s/rbOOmire8OocQ90QM78DRA) 中的学习记录博客**
>- **🍖 原作者:[K同学啊 | 接辅导、项目定制](https://mtyjkh.blog.csdn.net/)**

词嵌入是一种用于自然语言处理 (NLP) 的技术,用于将单词表示为数字

one-hot编码就是最早期的词嵌入方法。

Embedding和EmbeddingBag则是PyTorch中的用来处理文本数据中词嵌入(word embedding)的工具,它们将离散的词汇映射到低维的连续向量空间中,使得词汇之间的语义关系能够在向量空间中得到体现。

整数张量是一个包含整数值的张量,张量是一种多维数组。在深度学习中,通常使用整数张量来表示离散的信息,比如词汇表中的词汇索引。每个整数代表一个特定的词汇或类别,通过这些整数,可以将离散的符号信息编码成神经网络能够处理的形式。

举个例子,假设有一个词汇表,其中包含三个词:"apple","banana",和"orange",它们分别被编码为整数张量0,1,20,1,2。在神经网络中,这些整数张量可以经过Embedding层,将它们映射成对应的词嵌入向量,从而在网络中进行进一步的处理。

EmbeddingBag 层中的 mode 参数用于指定如何对每个序列中的嵌入向量进行汇总,常用的模式有三种

  1. 'sum':此模式计算每个序列的嵌入向量之和。当您想要捕获序列中包含的整体信息时,它非常有用。

  2. 'mean':在此模式下,计算每个序列的嵌入向量的平均值。它通常用于获取考虑序列不同长度的代表性向量。

  3. 'max':'max' 模式计算每个序列的嵌入向量每个维度的最大值。当您想要关注序列中最重要的特征时,它非常有用。

Embedding 专注于将整数索引映射到固定的嵌入向量,而 EmbeddingBag 进一步支持变长序列,并提供了灵活的池化操作。

让我们以自然语言处理(NLP)任务为例,比如文本分类。假设你有一个词汇表,其中每个单词都有一个唯一的整数索引。你想将一个文本序列转换为神经网络可以处理的形式。

使用 Embedding:

  1. 创建词嵌入层:

    embedding_layer = nn.Embedding(vocab_size, embedding_dim)

    这里,vocab_size 是词汇表的大小,embedding_dim 是每个单词嵌入向量的维度。

  2. 输入文本序列:

    input_sequence = torch.LongTensor([index1, index2, index3, ...])

    这里,index1, index2, index3 是文本序列中单词对应的整数索引。

  3. 应用嵌入层:

    embedded_sequence = embedding_layer(input_sequence)

  4. embedded_sequence 是一个包含嵌入向量的张量,每行对应一个单词的嵌入。

使用 EmbeddingBag:

  1. 创建嵌入包层:

    embedding_bag_layer = nn.EmbeddingBag(vocab_size, embedding_dim, sparse=True)

    Embedding 不同,EmbeddingBag 可以处理变长序列,同时支持稀疏张量。

  2. 输入文本序列:

    input_sequence = torch.LongTensor([index1, index2, index3, ...]) offsets = torch.LongTensor([0, len1, len1+len2, ...])

  3. offsets 表示每个文本的起始位置,可以用于区分不同文本的边界。

  4. 应用嵌入包层:

    embedded_sequence = embedding_bag_layer(input_sequence, offsets)

    embedded_sequence

  5. 是一个包含嵌入向量的张量,根据 offsets 进行池化操作,以适应变长序列的输入。

这两者都是为了将离散的整数索引映射到密集的嵌入向量,但 EmbeddingBag 在处理变长序列时更加灵活。

Embedding:

Embeddingbag:

  • 20
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值