最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解PyTorch nn.Embedding() 嵌入

 更新時間:2024年11月05日 11:57:03   作者:Hoper.J  
在自然語言處理(NLP)中,將文本序列轉(zhuǎn)化為數(shù)字序列(tokenid)后,為了使模型能更好地理解這些數(shù)字背后的含義,引入了嵌入層(Embedding)通過簡單的示例,可以看出Embedding的獲取過程及其在理解語言中的關(guān)鍵作用

在對文本序列進行分詞(tokenize)并映射后,字符串序列就轉(zhuǎn)變?yōu)榱藬?shù)字(token id)序列,這些 token id 可以直接輸入到模型中,但需要明白的是,模型并不能直接從一個純粹的數(shù)字中獲取豐富的信息。類比到人類的認知,我們理解一個字或詞并不是僅靠符號,而是其背后的含義。

nn.Embedding 嵌入層

torch.nn.Embedding(num_embeddings, embedding_dim, padding_idx=None, max_norm=None, norm_type=2.0, scale_grad_by_freq=False, sparse=False, _weight=None, _freeze=False, device=None, dtype=None)

A simple lookup table that stores embeddings of a fixed dictionary and size.

一個簡單的查找表,用于存儲固定大小的字典中每個詞的嵌入向量。

參數(shù)

  • num_embeddings (int): 嵌入字典的大小,即詞匯表的大小 (vocab size)。
  • embedding_dim (int): 每個嵌入向量的維度大小。
  • padding_idx (int, 可選): 指定填充對應(yīng)的索引值。該索引對應(yīng)的嵌入向量在訓練過程中不會更新,即梯度不參與反向傳播,通常作為“填充”標記使用。對于新構(gòu)建的 Embedding 模塊,此索引的嵌入向量默認值為全零,但可以更改為其他值。
  • max_norm (float, 可選): 如果設(shè)置,超過此值的嵌入向量范數(shù)將被重新歸一化,使其最大范數(shù)等于 max_norm
  • norm_type (float, 可選): 用于計算 max_norm 的 p-范數(shù),默認為 2,即計算 2 范數(shù)。
  • scale_grad_by_freq (bool, 可選): 如果為 True,梯度將根據(jù)單詞在 mini-batch 中的頻率的倒數(shù)進行縮放,適用于高頻詞的梯度調(diào)整。默認為 False。
  • sparse (bool, 可選): 如果設(shè)置為 True,則權(quán)重矩陣的梯度為稀疏張量,適合大規(guī)模詞匯表的內(nèi)存優(yōu)化。
  • 變量 weight (Tensor): 模塊的可學習權(quán)重,形狀為 (num_embeddings, embedding_dim),初始值從正態(tài)分布 N(0, 1) 中采樣。

方法

from_pretrained(embeddings, freeze=True, padding_idx=None, max_norm=None, norm_type=2.0, scale_grad_by_freq=False, sparse=False)

Create Embedding instance from given 2-dimensional FloatTensor.

用于從給定的 2 維浮點張量(FloatTensor)創(chuàng)建一個 Embedding 實例。

參數(shù)

  • embeddings (Tensor): 一個包含嵌入權(quán)重的 FloatTensor。第一個維度代表 num_embeddings(詞匯表大?。?,第二個維度代表 embedding_dim(嵌入向量維度)。
  • freeze (bool, 可選): 如果為 True,則嵌入張量在訓練過程中保持不變,相當于設(shè)置 embedding.weight.requires_grad = False。默認值為 True。
  • 其余參數(shù)參考之前定義。

要點示例未完待續(xù)…(預(yù)計 11.6 前上傳)

QA

Q1:對于神經(jīng)網(wǎng)絡(luò)來說,什么是“符號”及其“背后的含義”?

答案是:Token IDEmbedding

那么,什么是 Embedding?

我們可以通過 PyTorch 中的 nn.Embedding 類來理解它,先跳過繁瑣的介紹,運行代碼來直觀感受:

import torch
import torch.nn as nn
# 設(shè)置隨機種子以確保結(jié)果可復現(xiàn)
torch.manual_seed(42)
# 定義嵌入層參數(shù)
num_embeddings = 5  # 假設(shè)詞匯表中有 5 個 token
embedding_dim = 3   # 每個 token 對應(yīng) 3 維嵌入向量
# 初始化嵌入層
embedding = nn.Embedding(num_embeddings, embedding_dim)
# 定義整數(shù)索引
input_indices = torch.tensor([0, 2, 4])
# 查找嵌入向量
output = embedding(input_indices)
# 打印結(jié)果
print("權(quán)重矩陣:")
print(embedding.weight.data)
print("\nEmbedding 輸出:")
print(output)

輸出:

權(quán)重矩陣:
tensor([[ 0.3367,  0.1288,  0.2345],
        [ 0.2303, -1.1229, -0.1863],
        [ 2.2082, -0.6380,  0.4617],
        [ 0.2674,  0.5349,  0.8094],
        [ 1.1103, -1.6898, -0.9890]])

Embedding 輸出:
tensor([[ 0.3367,  0.1288,  0.2345],
        [ 2.2082, -0.6380,  0.4617],
        [ 1.1103, -1.6898, -0.9890]], grad_fn=<EmbeddingBackward0>)

在這里,input_indices = [0, 2, 4] 從權(quán)重矩陣中選擇第 0、2 和 4 行作為對應(yīng)的嵌入表示。是的沒錯,Embedding 的獲取就是這么簡單。

接下來,構(gòu)建一個 Embedding 類進行理解:

class Embedding():
    def __init__(self, num_embeddings, embedding_dim):
        self.weight = torch.nn.Parameter(torch.randn(num_embeddings, embedding_dim))
    def forward(self, indices):
        return self.weight[indices]  # 沒錯,就是返回對應(yīng)的行

可以看出,Embedding 類的本質(zhì)是一個查找表(lookup table)。在上面的示例中,embedding.weight 中存儲了 5 個(num_embeddings)嵌入向量,每個向量有 3 個維度(embedding_dim)。當提供 input_indices 時,查找表返回對應(yīng)的嵌入向量(權(quán)重矩陣的行)。

Q2: 最初的權(quán)重矩陣是什么?最終的嵌入向量由什么決定?

最初的權(quán)重矩陣是一般隨機初始化的,在訓練過程中會更新權(quán)重,使其能有效地表達背后的含義。

Q3: 什么是語義?

舉個簡單的例子來理解“語義”關(guān)系:像“貓”和“狗”在向量空間中的表示應(yīng)該非常接近,因為它們都是寵物;“男人”和“女人”之間的向量差異可能代表性別的區(qū)別。此外,不同語言的詞匯,如“男人”(中文)和“man”(英文),如果在相同的嵌入空間中,它們的向量也會非常接近,反映出跨語言的語義相似性。同時,【“女人”和“woman”(中文-英文)】與【“男人”和“man”(中文-英文)】之間的差異也可能非常相似。

本文“狹義”地解讀了與 Token id 一起出現(xiàn)的 Embedding,這個概念在自然語言處理(NLP)中有著更具體的稱呼:Word Embedding。

到此這篇關(guān)于PyTorch nn.Embedding() 嵌入詳解的文章就介紹到這了,更多相關(guān)PyTorch nn.Embedding() 嵌入內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

杭锦后旗| 河津市| 武邑县| 金秀| 瓦房店市| 湟源县| 内江市| 清远市| 平顶山市| 安庆市| 九寨沟县| 三门县| 遂宁市| 大邑县| 融水| 广宁县| 三原县| 桃江县| 莱州市| 万载县| 安国市| 筠连县| 建宁县| 清涧县| 长丰县| 诸暨市| 四川省| 伊春市| 达孜县| 云和县| 舒城县| 阳朔县| 冕宁县| 山阳县| 巴林右旗| 佛山市| 临江市| 禄丰县| 台东市| 科尔| 南召县|