2015-09-24 20 views
8

Tôi vừa bắt đầu sử dụng Word2vec và tôi đã tự hỏi làm cách nào chúng ta có thể tìm từ gần nhất với vector giả sử. Tôi có vector này là vector trung bình cho một tập hợp các vectơ:Cách tìm từ gần nhất với vector bằng cách sử dụng word2vec

array([-0.00449447, -0.00310097, 0.02421786, ...], dtype=float32) 

Có cách nào thẳng về phía trước để tìm các từ tương tự nhất trong dữ liệu huấn luyện của tôi để vector này?

Hoặc giải pháp duy nhất là tính toán độ tương tự cosin giữa véc tơ này và vectơ của mỗi từ trong dữ liệu huấn luyện của tôi, sau đó chọn số gần nhất?

Cảm ơn.

Trả lời

17

Đối gensim thi hành word2vec có most_similar() chức năng cho phép bạn tìm từ ngữ nghĩa gần một từ nhất định:

>>> model.most_similar(positive=['woman', 'king'], negative=['man']) 
[('queen', 0.50882536), ...] 

hoặc để nó đại diện vector:

>>> your_word_vector = array([-0.00449447, -0.00310097, 0.02421786, ...], dtype=float32) 
>>> model.most_similar(positive=[your_word_vector], topn=1)) 

nơi topn xác định mong muốn số lượng kết quả trả về.

Tuy nhiên, cảm giác ruột của tôi là chức năng mà giống hệt nhau mà bạn đề nghị, tức là tính toán sự tương đồng cosin cho vector nhất định và mỗi vector khác trong từ điển (đó là khá kém hiệu quả ...)

4

Don' t quên thêm mảng trống có các từ phủ định trong most_similar chức năng:

import numpy as np 
model_word_vector = np.array(my_vector, dtype='f') 
topn = 20; 
most_similar_words = model.most_similar([ model_word_vector ], [], topn) 
Các vấn đề liên quan