初学者向け【実装】攻略ノートです。『ゼロつく2』学習の補助となるように適宜解説を加えています。本と一緒に読んでください。本の内容を1つずつ確認しながらゆっくりと組んでいきます。この記事は、2.3.5項「ベクトル間の類似度」と2.3.6項「類似度のランキングを表示」の内容です。単語の類似度として用いるコサイン類似度を説明して、Pythonで実装します。ベクトル間の類似度この項では、単語(ベクトル)の類似度を測定する関数を実装します。類似度としてコサイン類似度を用います。y_n)$として、次の式で定義されます。$$分子はベクトルの内積であり、分母の$\|\mathbf{x}\|$はL2ノルムと呼び2乗和の平方根です。\mathbf{y}$をそれぞれのL2ノルムで割ったベクトルの内積でも計算できます。式のままなので、早速実装しましょう。ny)eps($\epsilon$)は、0除算とならないための微小な値です。実装した関数を使って、ベクトルの値とコサイン類似度の値との関係を見ましょう。2次元のグラフで描画するために、ベクトルの要素数を2とします。1つ目の値がx軸、2つ目の値がy軸に対応します。9.0])plt.quiver()でベクトルを描きます。始点は原点であるため、どちらも0を指定します。終点には、各ベクトルの0番目と1番目の要素を指定します。その他の引数の詳細は省略します(そのまま指定してください)。5)$までを結ぶ直線を意味します。そのため$\mathbf{a}$をベクトルと呼びます。7)$とした場合は、原点からx軸方向に5、y軸方向に6、z軸方向に7の点を指します。このように3次元の座標で表されるベクトルとなることから、3次元ベクトルと呼ばれます。それ以上はイメージしにくいですが$n$次元でも同じことです。他の値でも試してみましょう。方向の違いとは、2つのベクトルの角度の大きさとも捉えられます。長さ(値の大きさ)に関わりなく、方向が近いとコサイン類似度が高くなります。完全に同じ方向のとき最大値の1となります。向きが真逆のとき最小値の-1になります。・単語間の類似度では前項で作成した各単語ベクトルを用いて、2つの単語の類似度を測りましょう。比較したい2つの単語を指定して、単語ベクトルからコサイン類似度を計算します。0]0.70710676911547992つの単語間の類似度を計算できました。次項では、指定した単語と全ての単語との類似度を計算し、類似度の高い単語を見付けます。類似度のランキングを表示この項では、指定した単語との類似度が高い単語を表示する(調べる)関数を実装します。単語を指定して各単語とのコサイン類似度を計算します。対象となる単語をクエリと呼びます。]最大値の1となった単語がありますが、これは同じ単語なためです。これはランキングから除外する必要があります。そこでfor文のループ処理中にcontinueを使います。continueが実行されると、それ以降の処理を省略し次の繰り返し処理に移ります。print(i)0124.argsort()メソッドは、配列の要素の値が小さい順にインデックスを返します。ここで知りたいのは上位のインデックスです。そこでsimilarityに-1を掛けて符号を反転させることで、大小関係を逆転させます。その出力をfor文に使います。0]この値は単語IDに対応します。1$番目の単語が類似度の上位$n$語になります。1$語目からの処理を行う必要がありません。そこでbreakを使います。breakが実行されると、そこでfor文の処理を中断し次の処理に移ります。print(i)print('a')012aこれらの機能を組み合わせて、指定した順位までの単語とコサイン類似度を表示します。0.0処理の確認ができたので実装しましょう。return実装した関数を試してみましょう。0.0「say」と別の単語が1というベクトルの構成が同じであるため、3つの単語の値が同じになりました。コーパスのサイズが大きくなる、つまりテキスト中で何度も単語が登場し、その前後の単語の種類・頻度も大きくなることで、各単語の特徴が単語ベクトルに反映されます。テキストに含まれない単語の場合も確認しておきます。found以上で類似の高い単語を調べることができました。このままでは、コーパスが大きくなると別の課題が生じます。axis=0)と思えばそこまで恐くなくなると思います。x_nと書くので、やっぱりどれも似たようなものです(というか同じものです)。あとはノートにでも書いてみるのもおすすめします。x_n^2}$なんて何度も書いてたら面倒臭くなって、すぐに$\|\mathbf{x}\|$と書きたくなります。単なる私の経験談ですが、私はそうやってるうちに慣れました。x_n^2}と書きます。これはどっちにしろ面倒です...。『パターン認識と機械学習』の独学時のまとめです。『パターン認識と機械学習』の独学時のまとめです。『パターン認識と機械学習』の独学時のまとめです。『パターン認識と機械学習』の独学時のまとめです。00:04何かおかしな内容があれば、ご指摘いただけるととても嬉しいです。【R】円周の作図5.3:正射影ベクトルの導出【『スタンフォード線形代数入門』のノート】スポンサーリンクはてなブログをはじめよう!anemptyarchiveさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。