torch.nn.Embedding到底在幹嘛

更新 發佈閱讀 7 分鐘

其實跟word2vec, skipgram都沒什麼關係

如果你跟我一樣是先看了transformers或者是至少word embeddings相關的papers才回去設法用pytorch來實作 一開始一定會非常非常困惑

會不知道這個 torch.nn.Embedding在搞什麼鬼

查了官方文件你可能會跟我一樣更困惑...

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

This module is often used to store word embeddings and retrieve them using indices. The input to the module is a list of indices, and the output is the corresponding word embeddings.

Parameters:

  • num_embeddings (int) – size of the dictionary of embeddings
  • embedding_dim (int) – the size of each embedding vector

... 以下略


什麼 simple lookup table?沒有訓練過這個東西 到底哪來的word embedding? 底下到底是word2vec, gloVe, 還是什麼pretrained的東西?

答案

其實答案很簡單: 都不是

其實就是"隨機"


我們再看一次這個document

其實

num_embeddings, 第一個參數的意思就是, 隨便給定一個vocabulary size, 比方說 3, 那麼

nn.Embedding 就會幫你準備 3個空位

第二個參數embedding_dim 會直接幫決定他幫你準備的隨機的representation要有幾個dimensions, 你幫說5

背後在做什麼

當你設了 nn.Embedding(3, 5)

那麼你可以想成其實就是這樣

{

0: [.123123, .123123, .123123, .12312, .123123], # 五個隨機的floats來代表0 這個token

1: [.456456,.456456,.456456,.456546,.456456,.42342],# 五個隨機的floats來代表1 這個token

2: [.789789, .987987, .98798, .5789, .7896, .794] #五個隨機的floats來代表2 這個token

}

為什麼是5個數字呢? 因為你embedding_dim設成5, 如果你設成384就會有384個隨機數字對應到每一個id

可是我想處理文字 又不是數字 - Tokenizer在幹嘛

你可能接下來會感到困惑的點是... 可是我想處理文字 又不是數字...

所以... 其實tokenizer就是在做這件事

假設你想要把 "你好嗎" 這句話拿去配合什麼東西訓練

那麼你就可能會有個tokenizer做這件事:

{你: 0, 好:1, 嗎:2}


你的文字input經過tokenizer之後就會變成一串數字

比方說"你好好嗎嗎"就會變成[0, 1, 1, 2, 2]

"你嗎嗎好"就會變成[0,2,2,1]

所以

然後經過nn.Embedding的時候他就把剛剛的隨機數字塞進去

所以"你好好嗎嗎" 會被轉成這樣 (就只是去查[0, 1, 1, 2, 2])

[[.123123, .123123, .123123, .12312, .123123],

[.456456,.456456,.456456,.456546,.456456,.42342],

[.456456,.456456,.456456,.456546,.456456,.42342],

[.789789, .987987, .98798, .5789, .7896, .794],

[.789789, .987987, .98798, .5789, .7896, .794]]

"你嗎嗎好"就會變成(就只是去查[0,2,2,1]) (我們這邊先不管padding)

[[.123123, .123123, .123123, .12312, .123123],

[.789789, .987987, .98798, .5789, .7896, .794],

[.789789, .987987, .98798, .5789, .7896, .794],

[.456456,.456456,.456456,.456546,.456456,.42342]

]

更新參數

接下來你會有一個task可能是要訓練model來分類什麼東西

比方說聽起來像不像髒話

那麼

[[.123123, .123123, .123123, .12312, .123123],

[.456456,.456456,.456456,.456546,.456456,.42342],

[.456456,.456456,.456456,.456546,.456456,.42342],

[.789789, .987987, .98798, .5789, .7896, .794],

[.789789, .987987, .98798, .5789, .7896, .794]]

可能會對應到 0 (不像)

[[.123123, .123123, .123123, .12312, .123123],

[.789789, .987987, .98798, .5789, .7896, .794],

[.789789, .987987, .98798, .5789, .7896, .794],

[.456456,.456456,.456456,.456546,.456456,.42342]

]

可能會對應到 1 (有點像)等等

然後只要你不鎖住nn.embedding的參數

那麼這些隨機的數字就會被更新, 已讓你的classification更準


Vocabulary Size的影響

你的第一個參數會影響到你有幾個place holders可以用

剛剛我們設3

所以只有三個不同的tokens可以用

所以一但傳進去的index超過2, 就會出錯(list out of range)

所以大部分的語言模型都會設一個很大的數字像是80000

再搭配tokenizer

留言
avatar-img
留言分享你的想法!
avatar-img
寂寞小冬瓜的沙龍
11會員
15內容數
對工程師友善的(目前免費)英文教材 #工程師 #Coding #Python #Django #English #英文 #文法 #語言學習 #程式
2024/04/24
八字是一個非常重要的概念,用於預測個人的命運與性格。八字,又稱作「生辰八字」,是根據一個人出生的年、月、日、時所對應的天干地支來組成的。在八字分析中,十神是理解一個人的性格與命運中不可或缺的元素。 十神的定義 在八字命理中,十神是基於日干(即出生日的天干)與其他天干的相對關係來定義的。這些關係反
2024/04/24
八字是一個非常重要的概念,用於預測個人的命運與性格。八字,又稱作「生辰八字」,是根據一個人出生的年、月、日、時所對應的天干地支來組成的。在八字分析中,十神是理解一個人的性格與命運中不可或缺的元素。 十神的定義 在八字命理中,十神是基於日干(即出生日的天干)與其他天干的相對關係來定義的。這些關係反
2024/04/16
隨因為推論統計邏輯明顯有問題 心理學實驗看到的 p value是 P(Data| Hyptohesis), 也就是假設成立的情況下拿到這樣的資料的機率 以下是大家常見的推論步驟: 先設一個虛無假設 (H0) 拿資料, 算 p value ( = P(Data | Hypothesis)
2024/04/16
隨因為推論統計邏輯明顯有問題 心理學實驗看到的 p value是 P(Data| Hyptohesis), 也就是假設成立的情況下拿到這樣的資料的機率 以下是大家常見的推論步驟: 先設一個虛無假設 (H0) 拿資料, 算 p value ( = P(Data | Hypothesis)
2024/04/15
你好 歡迎來到這個充滿矛盾的地方 由敝人 一個喜歡研究但是不喜歡學術界的博士畢業生 喜歡英文但是討厭講英文的人 主修是統計但是不相信統計 碩士班念心理學但是寧可相信命理 喜歡寫程式但是不喜歡寫應用面的東西 的本人我 歡迎一樣奇怪的你 一樣在找自己的你
2024/04/15
你好 歡迎來到這個充滿矛盾的地方 由敝人 一個喜歡研究但是不喜歡學術界的博士畢業生 喜歡英文但是討厭講英文的人 主修是統計但是不相信統計 碩士班念心理學但是寧可相信命理 喜歡寫程式但是不喜歡寫應用面的東西 的本人我 歡迎一樣奇怪的你 一樣在找自己的你
看更多
你可能也想看
Thumbnail
還在煩惱平凡日常該如何增添一點小驚喜嗎?全家便利商店這次聯手超萌的馬來貘,推出黑白配色的馬來貘雪糕,不僅外觀吸睛,層次豐富的雙層口味更是讓人一口接一口!本文將帶你探索馬來貘雪糕的多種創意吃法,從簡單的豆漿燕麥碗、藍莓果昔,到大人系的奇亞籽布丁下午茶,讓可愛的馬來貘陪你度過每一餐,增添生活中的小確幸!
Thumbnail
還在煩惱平凡日常該如何增添一點小驚喜嗎?全家便利商店這次聯手超萌的馬來貘,推出黑白配色的馬來貘雪糕,不僅外觀吸睛,層次豐富的雙層口味更是讓人一口接一口!本文將帶你探索馬來貘雪糕的多種創意吃法,從簡單的豆漿燕麥碗、藍莓果昔,到大人系的奇亞籽布丁下午茶,讓可愛的馬來貘陪你度過每一餐,增添生活中的小確幸!
Thumbnail
就如同標題一樣,input的作用就是從使用者那裡獲取輸入,直到使用者輸入一段文本並按下 ENTER 鍵。 然而用戶輸入的數據(文本)都將作為字串被返回,並存儲在變數中。 接著我們舉個例,比如說我們在一段數據中需要獲取使用者的名稱,範例如下: name = input("請輸入你的名字:") #
Thumbnail
就如同標題一樣,input的作用就是從使用者那裡獲取輸入,直到使用者輸入一段文本並按下 ENTER 鍵。 然而用戶輸入的數據(文本)都將作為字串被返回,並存儲在變數中。 接著我們舉個例,比如說我們在一段數據中需要獲取使用者的名稱,範例如下: name = input("請輸入你的名字:") #
Thumbnail
我們介紹了字串和列表的索引和切片操作。索引使用方括號[]來選擇字串或列表中的特定元素,並可以使用正向索引(從0開始)或反向索引(從最後一個元素為-1)來訪問元素。切片使用方括號[]和冒號:來選擇字串或列表中的一段子序列,指定起始位置和結束位置(不包含),並可以使用步長來控制間隔。
Thumbnail
我們介紹了字串和列表的索引和切片操作。索引使用方括號[]來選擇字串或列表中的特定元素,並可以使用正向索引(從0開始)或反向索引(從最後一個元素為-1)來訪問元素。切片使用方括號[]和冒號:來選擇字串或列表中的一段子序列,指定起始位置和結束位置(不包含),並可以使用步長來控制間隔。
Thumbnail
探索Python學習筆記中列表的建立、存取和常用方法。從使用中括號定義列表到了解索引、新增、刪除、修改等操作,並介紹append、remove、count等常用方法。
Thumbnail
探索Python學習筆記中列表的建立、存取和常用方法。從使用中括號定義列表到了解索引、新增、刪除、修改等操作,並介紹append、remove、count等常用方法。
Thumbnail
範例句: 假設我們有一段文章以空白隔開的方式來切割詞彙,內容如下: 假設條件為: clauses:[提升,滿意度,問卷] 。 slop:4。 in_order: true ❗ 這裡的Slop代表範圍內不匹配的最大數量,從開始匹配的字詞框到最後加總一併進行計算。 查詢結構會是如此 請問上述條件是否能正
Thumbnail
範例句: 假設我們有一段文章以空白隔開的方式來切割詞彙,內容如下: 假設條件為: clauses:[提升,滿意度,問卷] 。 slop:4。 in_order: true ❗ 這裡的Slop代表範圍內不匹配的最大數量,從開始匹配的字詞框到最後加總一併進行計算。 查詢結構會是如此 請問上述條件是否能正
Thumbnail
在前面的文章中我們學習了關於字典的基本用法,今天再討論更多關於字典的其它用法,以及它和串列、元組等的關聯。
Thumbnail
在前面的文章中我們學習了關於字典的基本用法,今天再討論更多關於字典的其它用法,以及它和串列、元組等的關聯。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News