動手學深度學習PyTorch版 詞嵌入高階

2021-10-03 05:06:12 字數 2087 閱讀 4727

載入與訓練glove向量

import torch

import torchtext.vocab as vocab

print

([key for key in vocab.pretrained_aliases.keys()if

"glove"

in key]

)cache_dir =

"/home/kesci/input/glove6b5429"

glove = vocab.glove(name=

'6b'

, dim=

50, cache=cache_dir)

print

("一共包含%d個詞。"

%len

(glove.stoi)

)print

(glove.stoi[

'beautiful'

], glove.itos[

3366

])

求近義詞和模擬詞

def

knn(w, x, k)

:'''

@params:

w: 所有向量的集合

x: 給定向量

k: 查詢的數量

@outputs:

topk: 余弦相似性最大k個的下標

[...]: 余弦相似度

'''cos = torch.matmul(w, x.view((-

1,))

)/((torch.

sum(w * w, dim=1)

+1e-9

).sqrt(

)* torch.

sum(x * x)

.sqrt())

_, topk = torch.topk(cos, k=k)

topk = topk.cpu(

).numpy(

)return topk,

[cos[i]

.item(

)for i in topk]

defget_similar_tokens

(query_token, k, embed)

:'''

@params:

query_token: 給定的單詞

k: 所需近義詞的個數

embed: 預訓練詞向量

'''topk, cos = knn(embed.vectors,

embed.vectors[embed.stoi[query_token]

], k+1)

for i, c in

zip(topk[1:

], cos[1:

]):# 除去輸入詞

print

('cosine sim=%.3f: %s'

%(c,

(embed.itos[i]))

)get_similar_tokens(

'chip',3

, glove)

求模擬詞

def

get_analogy

(token_a, token_b, token_c, embed)

:'''

@params:

token_a: 詞a

token_b: 詞b

token_c: 詞c

embed: 預訓練詞向量

@outputs:

res: 模擬詞d

'''vecs =

[embed.vectors[embed.stoi[t]

]for t in

[token_a, token_b, token_c]

] x = vecs[1]

- vecs[0]

+ vecs[2]

topk, cos = knn(embed.vectors, x,1)

res = embed.itos[topk[0]

]return res

get_analogy(

'man'

,'woman'

,'son'

, glove)```

動手學深度學習PyTorch版 筆記彙總

pytorch的tensor,它可以是零維 又稱為標量或乙個數 一維 二維及多維的陣列。tensor自稱為神經網路界的numpy,它與numpy相似,二者可以共享記憶體,且之間的轉換非常方便和高效。不過它們也有不同之處,最大的區別就是numpy會把ndarray放在cpu中進行加速運算,而由torc...

《動手學深度學習》pytorch版筆記一

動手學深度學習 pytorch版筆記 與其說是筆記,不如說是問題集,有些已經搞清楚了,記錄一下。有些還沒搞清楚,先列在這裡,以後有空再慢慢查文件填坑。task 1 線性回歸 1.向量化運算以及矩陣的維度表示 2.torch.randn np.random.normal 等隨機數組生成函式 3.ten...

Pytorch 動手學深度學習(二)

學習安排如下 task03 過擬合 欠擬合及其解決方案 梯度消失 梯度 迴圈神經網路高階 1天 task04 機器翻譯及相關技術 注意力機制與seq2seq模型 transformer 1天 task05 卷積神經網路基礎 lenet 卷積神經網路高階 1天 梯度消失部分,主要是協變數偏移 標籤偏移...