載入與訓練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天 梯度消失部分,主要是協變數偏移 標籤偏移...