質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.04%

Word2Vecにおけるコサイン類似度とgensimの類似度測定関数について

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 5,651

score 276

 前提・実現したいこと

Word2Vecにおける類似度測定関数について、
コサイン類似度で測定しているとあるのですが、

コサイン類似度の式に当てはめたときに、
イメージ説明
このコードでは一体分母と分子が何にあたるのかよくわかりません。
コード参照元

import gensim
word2vec_model = gensim.models.KeyedVectors.load_word2vec_format('model/model_neologd.vec', binary=False)
import pprint
pprint.pprint(word2vec_model.similarity('国王', '王妃'))



また、word2vecでベクトルから単語を出力するコードにおいて、
どのような原理で類似単語が出力され、コサイン類似度による類似度測定はどのように関わっているのかわからず、困っています。
コード参照元2

sentences = gensim.models.word2vec.Text8Corpus(filename)
model = Word2Vec(sentences, size=100, window=5, min_count=5, workers=4)
vector = model.wv["明智"]
word = model.most_similar( [ vector ], [], 5)

 試したこと

どちらの問題も
gensimにおけるsimilarity関数の説明を読みましたが、
よくわかりませんでした。

n_similarity(ws1, ws2)
Compute cosine similarity between two sets of words.

Parameters:    
ws1 (list of str) – Sequence of words.
ws2 (list of str) – Sequence of words.
Returns:    
Similarities between ws1 and ws2.

Return type:    
numpy.ndarray


most_similar(**kwargs)
Find the top-N most similar entities. Possibly have positive and negative list of entities in **kwargs.

他、参考資料

ruby で短い文章の cos類似度を計算してみる

 補足情報(FW/ツールのバージョンなど)

python3.6

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • hayataka2049

    2018/07/30 22:58

    コサイン類似度そのものについては理解していますか?

    キャンセル

  • tenjin

    2018/07/31 06:29

    ご質問いただきましてありがとうございます。強調フィルタリングにおけるコサイン類似度は、cos(a,b) = a・b / (|a| ・ |b|) = 両方アクセスしたユーザ数 / 商品a, bそれぞれにアクセスしたユーザ数で求められているという理解です。コサイン類似度自体は、コサイン値を求めており2点のベクトルのなす角度によって類似度を測定しているという理解です。

    キャンセル

回答 2

checkベストアンサー

+3

http://www.randpy.tokyo/entry/word2vec_skip_gram_model

https://deepage.net/bigdata/machine_learning/2016/09/02/word2vec_power_of_word_vector.html

単語はベクトルになるのですから、cos類似度を計算するのは高校数学じゃないですか。

単語を数値ベクトルに変換する手法がword2vecであることを理解していますか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/08/03 14:27

    ご回答いただきましてありがとうございます。単語を数値ベクトルに変換する手法がword2vecであることは理解していますが、質問②で書いたように、その値からどのような原理で類似単語が求められるのかわかりません。

    キャンセル

  • 2018/08/03 17:41

    新しい単語をもってきた時、既存のそれぞれの単語までの距離を計算することができます。
    類似単語というのはその距離が短いもののことです。

    キャンセル

+2

質問1について
あらかじめ学習したモデルから比較対象の単語の特徴ベクトルを抽出し、コサイン類似度の計算式に当てはめて計算しています。

質問2について
原理は上記の回答の応用です。与えられた単語の特徴ベクトルと全ての単語の特徴ベクトルのコサイン類似度を計算して上位のものを抽出しています。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.04%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る