torch.nn.Embedding到底在幹嘛

更新於 2023/04/28閱讀時間約 6 分鐘

其實跟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
10會員
15內容數
對工程師友善的(目前免費)英文教材 #工程師 #Coding #Python #Django #English #英文 #文法 #語言學習 #程式
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
寂寞小冬瓜的沙龍 的其他內容
基本原則 對於不是從小長大在該語言環境的人來說,學語言一定是需要刻意練習的。 犯一些錯誤後被直接糾正學到最多也最快 用英文去學習你本來就在乎的主題會好學很多You get what you care for. 你的學習歷程不一定跟學校、補習班、文法書上規劃的一樣。請尊重並站在自己的學習歷程這邊
英文的口說練習有個重要的迷思,就是好像沒有明確範圍,好像無從準備起 -- 其實完全不是這樣的。因為每個人一生的知識量會是有限的,一個人習慣談論的主題其實也相當有限。只要觀察自己平常都喜歡用中文談論什麼主題,就可以知道自己在講英文的時候需要講到什麼主題。 把自己當作每個普通的話題,例如食物、旅遊、對於
今天參加了一個有趣的開源社群的講座,在講公開透明監督政府等等的。但是裡面講者多少也有提到跟同溫層外的人溝通最容易碰到的問題就是「參加開源project對我到底有什麼好處」,老實說,**我自己身為同溫層外的人,也真的非常需要知道這個問題的答案**。 我覺得針對個人的話,好像可以這樣回答:
如果你跟我一樣是個論文生不出來的博士生,也許你會跟我一樣迷惘到去學八字、看人類圖的書、算塔羅之類的。然而這些東西很貴,而且其實底層邏輯好像滿類似的,這裡我們就來創造一套屬於自己的占卜系統。首先,我們要了解占卜的基本元素...
如果你的機器學習模型或是任何統計最後的結果可以轉變成二分法, 假設由1和0來代表「是」與「不是」, 可以變成簡單的vector(例如pd.Series)或者dataframe的方式儲存的話, 這個簡單的教學就適用於你 如果你原本計算models的過程非常繁複,  model已經算出來了, 可是當初
Django in production is a different beast from its development counterpart. 這句怎麼解呢
基本原則 對於不是從小長大在該語言環境的人來說,學語言一定是需要刻意練習的。 犯一些錯誤後被直接糾正學到最多也最快 用英文去學習你本來就在乎的主題會好學很多You get what you care for. 你的學習歷程不一定跟學校、補習班、文法書上規劃的一樣。請尊重並站在自己的學習歷程這邊
英文的口說練習有個重要的迷思,就是好像沒有明確範圍,好像無從準備起 -- 其實完全不是這樣的。因為每個人一生的知識量會是有限的,一個人習慣談論的主題其實也相當有限。只要觀察自己平常都喜歡用中文談論什麼主題,就可以知道自己在講英文的時候需要講到什麼主題。 把自己當作每個普通的話題,例如食物、旅遊、對於
今天參加了一個有趣的開源社群的講座,在講公開透明監督政府等等的。但是裡面講者多少也有提到跟同溫層外的人溝通最容易碰到的問題就是「參加開源project對我到底有什麼好處」,老實說,**我自己身為同溫層外的人,也真的非常需要知道這個問題的答案**。 我覺得針對個人的話,好像可以這樣回答:
如果你跟我一樣是個論文生不出來的博士生,也許你會跟我一樣迷惘到去學八字、看人類圖的書、算塔羅之類的。然而這些東西很貴,而且其實底層邏輯好像滿類似的,這裡我們就來創造一套屬於自己的占卜系統。首先,我們要了解占卜的基本元素...
如果你的機器學習模型或是任何統計最後的結果可以轉變成二分法, 假設由1和0來代表「是」與「不是」, 可以變成簡單的vector(例如pd.Series)或者dataframe的方式儲存的話, 這個簡單的教學就適用於你 如果你原本計算models的過程非常繁複,  model已經算出來了, 可是當初
Django in production is a different beast from its development counterpart. 這句怎麼解呢
你可能也想看
Google News 追蹤
Thumbnail
本文探討了複利效應的重要性,並藉由巴菲特的投資理念,說明如何選擇穩定產生正報酬的資產及長期持有的核心理念。透過定期定額的投資方式,不僅能減少情緒影響,還能持續參與全球股市的發展。此外,文中介紹了使用國泰 Cube App 的便利性及低手續費,幫助投資者簡化投資流程,達成長期穩定增長的財務目標。
Thumbnail
 這次的觸康健綜合課程一階是一場專業知識的饗宴,學員們除了掌握了肌應檢測的精準技巧,同時也學會了經絡調和的綜合應用。透過蘇老師的引導,他們為自己的健康與平衡迎來了一次豐富而深刻的學習體驗。
Thumbnail
🌟 Touch for Health®觸康健®肌應學綜合課程一階 🌟加開場 今年第三場觸康健一階(加開場)開課囉! 以下是今天的學員心得: 彭小姐:再次認識自己的潛意識,用檢測的方式很棒。 陳先生:我是我身體的主人。 林先生:我需要放鬆,太緊繃了。 李先生:認識自己,然後讓自
Thumbnail
設計不僅是技術創新的體現,更是對人類需求的深刻理解。透過同理心與設計的完美結合,設計師不僅能夠為人們創造更具人性關懷的解決方案,使生活更方便與溫馨,同時也貢獻於更廣泛的社會趨勢,本文介紹了三個設計產品,藉由觸覺讓有需求者能夠換一種方式來感知世界。
Thumbnail
最近正好在研究「silero-vad」這套工具, 但根據官方教學,預設的載入方式會從網路上進行下載模型的動作: model, utils = torch.hub.load(repo_or_dir='snakers4/silero-vad',
Thumbnail
【李婉如/ 報導】一年一度的科技盛會 TOUCH TAIWAN 於 04月19日 早上正式展開盛大的展覽活動,除了產業界的重要企業一同參與外,其中也包括大專院校的相關科技研究系所與合作廠商共同參加,在產學協作的模式下共同參與創新與資源投入,相信會為台灣高端科技人才儲備更多的能量。 今天經濟部長 王美
Thumbnail
Touch panel air bonding and optical bonding ** 3C機構設計爸版權所有 ©️ ** 今天要討論的主題,乍看之下好像跟機構設計沒有什麼關係,但是,如果不了解Touch Panel (觸控面板)的結構,如何能夠做出相對應的機構設計呢?Touch panel
Thumbnail
越來越覺得t touch身體繃帶好好用 在保母狗兒與自家狗兒身上,經常看到非常棒的反應,能夠幫助狗狗好好休息。事情是這樣的,四年前,我帶天天回家時,當時的他
Thumbnail
怎麼開始的? 日常生活中,我們經常會遇到許多情境世上人不知所措,或是覺得尷尬,不希望發生的狀況,這時候大腦可能因為驚嚇、慌張而瞬間當機,而發生手足無措的狀況。大腦當機的當下,我們唯一記得的句子或是肢體動作很有機會是我不要,不可以,等等,不行,冒出一連串「不」開頭的字串。 舉例來說,假如狗狗喜歡撲跳到
Thumbnail
本文探討了複利效應的重要性,並藉由巴菲特的投資理念,說明如何選擇穩定產生正報酬的資產及長期持有的核心理念。透過定期定額的投資方式,不僅能減少情緒影響,還能持續參與全球股市的發展。此外,文中介紹了使用國泰 Cube App 的便利性及低手續費,幫助投資者簡化投資流程,達成長期穩定增長的財務目標。
Thumbnail
 這次的觸康健綜合課程一階是一場專業知識的饗宴,學員們除了掌握了肌應檢測的精準技巧,同時也學會了經絡調和的綜合應用。透過蘇老師的引導,他們為自己的健康與平衡迎來了一次豐富而深刻的學習體驗。
Thumbnail
🌟 Touch for Health®觸康健®肌應學綜合課程一階 🌟加開場 今年第三場觸康健一階(加開場)開課囉! 以下是今天的學員心得: 彭小姐:再次認識自己的潛意識,用檢測的方式很棒。 陳先生:我是我身體的主人。 林先生:我需要放鬆,太緊繃了。 李先生:認識自己,然後讓自
Thumbnail
設計不僅是技術創新的體現,更是對人類需求的深刻理解。透過同理心與設計的完美結合,設計師不僅能夠為人們創造更具人性關懷的解決方案,使生活更方便與溫馨,同時也貢獻於更廣泛的社會趨勢,本文介紹了三個設計產品,藉由觸覺讓有需求者能夠換一種方式來感知世界。
Thumbnail
最近正好在研究「silero-vad」這套工具, 但根據官方教學,預設的載入方式會從網路上進行下載模型的動作: model, utils = torch.hub.load(repo_or_dir='snakers4/silero-vad',
Thumbnail
【李婉如/ 報導】一年一度的科技盛會 TOUCH TAIWAN 於 04月19日 早上正式展開盛大的展覽活動,除了產業界的重要企業一同參與外,其中也包括大專院校的相關科技研究系所與合作廠商共同參加,在產學協作的模式下共同參與創新與資源投入,相信會為台灣高端科技人才儲備更多的能量。 今天經濟部長 王美
Thumbnail
Touch panel air bonding and optical bonding ** 3C機構設計爸版權所有 ©️ ** 今天要討論的主題,乍看之下好像跟機構設計沒有什麼關係,但是,如果不了解Touch Panel (觸控面板)的結構,如何能夠做出相對應的機構設計呢?Touch panel
Thumbnail
越來越覺得t touch身體繃帶好好用 在保母狗兒與自家狗兒身上,經常看到非常棒的反應,能夠幫助狗狗好好休息。事情是這樣的,四年前,我帶天天回家時,當時的他
Thumbnail
怎麼開始的? 日常生活中,我們經常會遇到許多情境世上人不知所措,或是覺得尷尬,不希望發生的狀況,這時候大腦可能因為驚嚇、慌張而瞬間當機,而發生手足無措的狀況。大腦當機的當下,我們唯一記得的句子或是肢體動作很有機會是我不要,不可以,等等,不行,冒出一連串「不」開頭的字串。 舉例來說,假如狗狗喜歡撲跳到