web-dev-qa-db-ja.com

Wordのベクトル(Word自体ではない)が与えられた場合、最も類似した単語を取得する

gensim.models.Word2Vecライブラリを使用すると、最も類似した単語のリストを検索するモデ​​ルと「単語」を提供できます。

model = gensim.models.Word2Vec.load_Word2vec_format(model_file, binary=True)
model.most_similar(positive=[Word], topn=N)

入力としてシステムにモデルと「ベクトル」を与え、システムに上位の類似語(ベクトルは与えられたベクトルに非常に近い)を返すように頼む可能性があるのだろうか。次のようなもの:

model.most_similar(positive=[VECTOR], topn=N)

2つのモデル(英語とドイツ語)と、最も類似したドイツ語の候補を見つける必要がある英語の単語があるバイリンガル設定にこの機能が必要です。私がやりたいのは、英語モデルから各英語の単語のベクトルを取得することです:

model_EN = gensim.models.Word2Vec.load_Word2vec_format(model_file_EN, binary=True)
vector_w_en=model_EN[Word_EN]

そして、これらのベクトルを使用してドイツのモデルを照会します。

model_DE = gensim.models.Word2Vec.load_Word2vec_format(model_file_DE, binary=True)
model_DE.most_similar(positive=[vector_w_en], topn=N)

Word2vecパッケージの元の距離関数を使用して、Cでこれを実装しました。しかし、今では、他のスクリプトと統合できるように、Pythonである必要があります。

gensim.models.Word2Vecライブラリまたはこれを行う他の同様のライブラリに既にメソッドがあるかどうかを知っていますか?自分で実装する必要がありますか?

18
amin

メソッド similar_by_vector は、ベクトルごとに上位N個の類似単語を返します。

similar_by_vector(vector, topn=10, restrict_vocab=None)
21
user48135

あなたが達成しようとしていることは、正確な答えを与えることはできないと思います。 2つのモデルが個別にトレーニングされるためです。また、英語とドイツ語の両方のモデルは、それぞれの単語ベクトル間の距離が類似しています。 'House'のWordベクトルが 'Haus'のWordベクトルと同じ方向になるという保証はありません。

簡単に言えば、両方のモデルをベクトルサイズ= 3でトレーニングした場合です。そして、「House」にはベクトル[0.5,0.2,0.9]があり、 'Haus'にはベクトル[0.5,0.2,0.9]またはそれに近いものがあるという保証はありません。

これを解決するには、まず英語の単語をドイツ語に翻訳してから、その単語のベクトルを使用してドイツ語モデルで類似の単語を検索します。

TL:DR;ある言語モデルから別の言語モデルにベクトルをプラグインするだけでは、正確な結果を期待できません。

0
Dachrimar