【深度学习与NLP】——词嵌入Embedding技术

目录

1.词嵌入的作用

2.嵌入矩阵的计算

3.Embedding层的代码实验


词嵌入(Embedding)技术是一种将词汇映射到低维连续向量空间的方法。将离散的单词数据处理成连续且固定长度的向量,使模型可以学习和处理语义信息。

假设需要将["Are", "you", "OK","?"]转换成向量的形式作为神经网络的输入。

将["Are", "you", "OK","?"]转换为4*4的向量矩阵。

1.词嵌入的作用

  1. 捕捉语义关系

    • 词嵌入能够将词汇映射到低维向量空间中,使得语义相近的词在向量空间中的位置也相近。例如,"国王""皇后""王子" 等词的向量会比较接近,因为它们在语义上有一定的关联性。
    • 这种特性有助于计算机更好地理解词汇之间的语义关系,从而提高自然语言处理任务的准确性。
  2. 丰富语义信息

    • 词向量不仅仅是简单的数字表示,它还蕴含了词汇的多种语义信息。例如,一个词的向量可能包含了其词性、词义、情感倾向等方面的信息。
    • 这使得计算机在处理自然语言时能够更全面地考虑词汇的各种特征,从而做出更准确的判断。
  1. 降低数据维度

    • 在自然语言处理中,词汇的数量通常非常庞大。如果采用传统的独热编码(one-hot encoding)方式表示词汇,向量的维度会非常高,且数据稀疏。词嵌入将词汇表示为低维向量,有效地降低了数据的维度。
    • 降维后的向量不仅更易于存储和计算,还能减少计算资源的消耗,提高算法的运行效率。
  2. 加速计算过程

    • 低维向量之间的计算速度通常比高维稀疏向量更快。在自然语言处理任务中,如文本分类、机器翻译等,需要频繁地计算词汇之间的相似度或进行矩阵运算。词嵌入提供的低维向量能够加速这些计算过程,提高算法的执行速度。

将高维的稀疏向量转换为浮点数的低维连续向量

进行PCA降维,可以发现语义相近的词语词语对应的向量位置也更相近。

具体来说,词嵌入技术具有以下几个重要作用:

首先,它有效地将自然语言中的词语,转换为数值向量表达词语之间的语义关系。这样一来,计算机可以更好地理解词语的含义和它们之间的关系,从而提高自然语言处理任务的准确性。

其次,词嵌入技术能够降低数据的维度,减少计算量和存储空间的需求。相比于传统的独热编码方式,词嵌入向量更加紧凑和高效。

此外,词嵌入技术为各种自然语言处理任务提供了丰富的语义信息。这些信息可以被用于文本分类、情感分析、机器翻译等任务中,帮助模型更好地理解和处理自然语言文本。

总之,词嵌入技术是自然语言处理领域中的一项重要技术,它为更高级的自然语言处理任务提供了有力的支持。

2.嵌入矩阵的计算

假设现在需要将["Are", "you", "OK","?"]中的每个词转换为128维的向量。

基于矩阵相乘的方法解释:

基于索引查找的方法解释

一、基于神经网络的方法

  1. Word2Vec

  2. FastText

    • FastText 在 Word2Vec 的基础上进行改进,能够处理词的子词信息。它将每个词表示为字符 n-gram 的集合,然后通过神经网络学习词向量和子词向量。
    • 在计算词嵌入矩阵时,FastText 会考虑词的全局信息和子词信息,从而提高对低频词和生僻词的表示效果。

二、基于矩阵分解的方法

  1. 潜在语义分析(Latent Semantic Analysis,LSA)

  2. 非负矩阵分解(Non-negative Matrix Factorization,NMF)

    • NMF 是另一种矩阵分解方法,它要求分解后的矩阵元素都是非负的。对于词 - 文档矩阵X,NMF 试图找到两个非负矩阵W和H,使得X~=WH。
    • 矩阵W的每一行对应一个词的低维向量表示,即词嵌入矩阵。在训练过程中,通过最小化重构误差来调整W和HH的参数。

三、基于全局词频统计的方法

  1. GloVe
    • GloVe(Global Vectors for Word Representation)基于全局词频统计信息来学习词向量。它通过构建词 - 词共现矩阵X,其中Xij表示词i和词j在语料库中共同出现的次数。
    • GloVe 定义了一个损失函数,通过最小化这个损失函数来学习词向量。损失函数考虑了词的局部上下文窗口和全局统计信息,能够有效地捕捉词语的语义和语法关系。
    • 最终得到的词向量组成了词嵌入矩阵。

3.Embedding层的代码实验

python 复制代码
from torchtext.vocab import Glove     #导入GloVe词向量
# 简单介绍一下Glove词向量,它是斯坦福大学的研究者在2014年开发和发布的GloVe和word2vec与fasttext, # 是当前最常用的3个词向量版本
# 6B表示了模型是基于60亿个单词的语料库训练的在300表示一个单词,使用300维的向量表示
glove =GloVe(name='6B',dim=300)
python 复制代码
# 使用nn.Embedding创建词嵌入层将qlove.vectors,通过from pretrained接口,导入到Embedding层中
# 此时的embedding层,就载入了Glove词向量数据
embedding = nn.Embedding.from_pretrained(glove.vectors)
# 打印embedding层中的weiqht的尺寸
print(f"embedding.shape :{embedding.weight.shape}")

程序输出:

embedding.shape: torch.size([400000,300])

python 复制代码
#将man、king、queen等8个词语的词问量,绘制到二维平面上
words =['man', 'woman', 'king', 'queen', 'dog', 'mother', 'father']
indices =[]

for word in words:  #将单词word,通过glove的词汇表,转换为单词的索引
    index = glove.stoi[word]  #将这些索引保存到indices数组中
    indices.append(index) # 打印单词word和索引index的对应关系
    print(f"{word}->{index}")
python 复制代码
#将索引列表,使用torch.tensor,转为张量的形式
indices = torch.tensor(indices) # 将索引列表转换为,词向量的矩阵
vectors =embedding(indices).detach().numpy() #打印vector的尺寸
print(f"vectors.shape:{vectors.shape}")

输出结果:

python 复制代码
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt

# 使用PCA降维算法,将向量vectors进行降维
pca = PCA(n_components=2)
vectors_2d = pca.fit_transform(vectors)
# 将单词和向量,绘制到二维平面上
plt.scatter(vectors_2d[:, 0], vectors_2d[:, 1])
for i, word in enumerate(words):
    plt.annotate(word,
                 xy=(vectors_2d[i, 0], vectors_2d[i, 1]),
                 xytext=(-10, 10),
                 textcoords='offset points')
plt.show()

参考链接:

【学习Transformer,应该从词嵌入WordEmbedding开始】

相关推荐
视觉人机器视觉9 分钟前
更新20240915机器视觉海康Visionmaster学习步骤
图像处理·人工智能·深度学习·学习·计算机视觉
bylander15 分钟前
【AI学习】陶哲轩在 2024 年第 65 届国际数学奥林匹克(IMO)的演讲:AI 与数学
人工智能·深度学习·学习
Zucker n38 分钟前
物品识别——基于python语言
人工智能·深度学习
大数据AI人工智能培训专家培训讲师叶梓38 分钟前
01.AI推出Yi模型家族:多维度能力的展示
人工智能·语言模型·自然语言处理·性能优化·微调·多模态·预训练
使者大牙1 小时前
【PyTorch单点知识】深入了解 nn.ModuleList和 nn.ParameterList模块:灵活构建动态网络结构
人工智能·pytorch·python·深度学习
小李很执着2 小时前
【深度智能】:迈向高级时代的人工智能全景指南
人工智能·python·深度学习·算法·机器学习·语言模型
醒了就刷牙2 小时前
已读论文创新点合集
人工智能·深度学习
啥都想学的大学生4 小时前
12. DataLoader的基本使用
人工智能·python·深度学习
大熊程序猿5 小时前
python AssertionError: Torch not compiled with CUDA enabled
人工智能·pytorch·深度学习
不想敲代码!!!5 小时前
爆改YOLOv8|使用MobileNetV4替换yolov8的Backbone
pytorch·python·深度学习·yolo·目标检测·yolov8