基于pytorch 預(yù)訓(xùn)練的詞向量用法詳解
如何在pytorch中使用word2vec訓(xùn)練好的詞向量
torch.nn.Embedding()
這個(gè)方法是在pytorch中將詞向量和詞對(duì)應(yīng)起來的一個(gè)方法. 一般情況下,如果我們直接使用下面的這種:
self.embedding = torch.nn.Embedding(num_embeddings=vocab_size, embedding_dim=embeding_dim) num_embeddings=vocab_size 表示詞匯量的大小 embedding_dim=embeding_dim 表示詞向量的維度
這種情況下, 因?yàn)闆]有指定訓(xùn)練好的詞向量, 所以embedding會(huì)幫咱們生成一個(gè)隨機(jī)的詞向量(但是在我剛剛測(cè)試的一個(gè)情感二分類問題中, 我發(fā)現(xiàn)好像用不用預(yù)訓(xùn)練的詞向量, 結(jié)果差不多, 不過不排除是因?yàn)楫?dāng)時(shí)使用的模型比較簡(jiǎn)單, 導(dǎo)致一些特征根本就沒提取出來).
如果我想使用word2vec預(yù)訓(xùn)練好的詞向量該怎么做呢?
其實(shí)很簡(jiǎn)單,pytorch已經(jīng)給我們提供好了接口
self.embedding.weight.data.copy_(torch.from_numpy(embeding_vector)) self.embedding.weight.requires_grad = False
上面兩句代碼的意思, 第一句就是導(dǎo)入詞向量, 第二句表示的是在反向傳播的時(shí)候, 不要對(duì)這些詞向量進(jìn)行求導(dǎo)更新. 我還看到有人會(huì)在優(yōu)化器那里使用這樣的代碼:
# emotion_net是我定義的模型 optimizer = torch.optim.Adam(filter(lambda p: p.requires_grad, emotion_net.parameters()), lr=1e-3, betas=(0.9, 0.99))
大概意思也是為了保證詞向量不會(huì)被反向傳播而更新, 具體有沒有用我就不清楚了.
其實(shí)我感覺大家比較在意的其實(shí)應(yīng)該是embeding_vector的形式, 下面我就介紹一下embeding_vector的形式
為了講述方便, 這里定義出下面幾個(gè)矩陣
embeding_vector:表示詞向量,每行是一個(gè)詞的詞向量,有多少行就說明有多少單詞
word_list:表示單詞列表,里面就是單詞
word_to_index:這個(gè)矩陣將word_list中的單詞和embeding_vector中的位置對(duì)應(yīng)起來
其實(shí)embeding_vector是一個(gè)numpy矩陣, 當(dāng)然你看到了, 實(shí)際輸入到pytorch的時(shí)候, 是需要轉(zhuǎn)換成tensor類型的. 這個(gè)矩陣是什么樣子的呢? 其中這個(gè)矩陣是 [vocab_size×embeding_dim] [vocab\_size \times embeding\_dim][vocab_size×embeding_dim] 的形式. 其中一共包含vocab_size vocab\_sizevocab_size 個(gè)單詞, 每個(gè)單詞的維度是 embed_dim embed\_dimembed_dim, 我們把這樣一個(gè)矩陣輸入就行了.
之后, 我們要做的其實(shí)就是將 word_to_index word\_to\_indexword_to_index 這個(gè)矩陣搞出來, 這里的單詞轉(zhuǎn)下標(biāo)的矩陣, 就是聯(lián)系 embeding_vector embeding\_vectorembeding_vector 和 word_list word\_listword_list 這兩個(gè)矩陣的中間者. 我們?cè)谳斎氲絫orch.nn.Embedding中之前, 需要先通過 word_to_index word\_to\_indexword_to_index 將單詞轉(zhuǎn)換成 embeding_vector embeding\_vectorembeding_vector 的下標(biāo)就可以了.
以上這篇基于pytorch 預(yù)訓(xùn)練的詞向量用法詳解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- pytorch使用horovod多gpu訓(xùn)練的實(shí)現(xiàn)
- pytorch VGG11識(shí)別cifar10數(shù)據(jù)集(訓(xùn)練+預(yù)測(cè)單張輸入圖片操作)
- 解決pytorch多GPU訓(xùn)練保存的模型,在單GPU環(huán)境下加載出錯(cuò)問題
- pytorch 使用加載訓(xùn)練好的模型做inference
- Pytorch自己加載單通道圖片用作數(shù)據(jù)集訓(xùn)練的實(shí)例
- PyTorch加載預(yù)訓(xùn)練模型實(shí)例(pretrained)
- pytorch實(shí)現(xiàn)對(duì)輸入超過三通道的數(shù)據(jù)進(jìn)行訓(xùn)練
- Pytorch保存模型用于測(cè)試和用于繼續(xù)訓(xùn)練的區(qū)別詳解
- 解決Pytorch 加載訓(xùn)練好的模型 遇到的error問題
- pytorch 準(zhǔn)備、訓(xùn)練和測(cè)試自己的圖片數(shù)據(jù)的方法
- 使用PyTorch訓(xùn)練一個(gè)圖像分類器實(shí)例
- 使用PyTorch將文件夾下的圖片分為訓(xùn)練集和驗(yàn)證集實(shí)例
- PyTorch預(yù)訓(xùn)練Bert模型的示例
相關(guān)文章
pytorch masked_fill報(bào)錯(cuò)的解決
今天小編就為大家分享一篇pytorch masked_fill報(bào)錯(cuò)的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-02-02
python numpy中對(duì)ndarry按照index增刪改查
這篇文章主要介紹了python numpy中對(duì)ndarry按照index增刪改查,在numpy中的ndarry是一個(gè)數(shù)組,因此index就是位置下標(biāo),注意下標(biāo)是從0開始,接下來一起進(jìn)入下面文章了解詳細(xì)內(nèi)容吧2022-02-02

