torch.nn.Embedding
和 one-hot 编码在实现和用途上有所不同,但它们在概念上有相似之处:都是将词汇索引转换为向量表示。然而,one-hot 编码生成的是高维稀疏向量,而 torch.nn.Embedding
生成的是低维稠密向量,并且这些嵌入向量在训练过程中可以学习到词汇之间的语义关系。因此,torch.nn.Embedding
通常比 one-hot 编码更高效和有用。
torch.nn.Embedding
是 PyTorch 提供的一种用于词嵌入的层,将词汇表中的每个词映射到一个固定大小的低维稠密向量空间。这些嵌入向量是可训练的权重,通过训练数据来学习。
特点:
- 低维度稠密向量: 向量的维度是用户定义的(通常比词汇表的大小小很多),使得计算更高效。
- 包含语义信息: 嵌入向量在训练过程中会捕捉词汇之间的语义关系,类似的词汇在向量空间中会靠得更近。
One-hot 编码是一种表示离散型数据的方法,其中每个词汇用一个向量表示,该向量的长度等于词汇表的大小。在这个向量中,只有对应词汇的索引位置为1,其余位置为0。
特点:
- 高维度稀疏向量: 向量的长度等于词汇表的大小,对于大词汇表来说,这种表示非常稀疏且高维。
- 没有语义信息: 不同词汇之间没有任何关系,所有词汇的向量表示在欧几里得空间中都是正交的。