とあるエンジニアの作業ブログ

Python

Python3.7.1で文章間の類似度判定

投稿日:2019年1月3日 更新日:

python3.7.1でMeCabとWord2Vecを使い文章間の類似度判定を行います。 結構類似の記事があったんですが、pythonのバージョン互換の問題かなんかでそのままだと動かなかったので自分なりに改修しました。

動作環境

  • Mac OS High Sierra
  • Python3.7.1

やりたいこと

以下の3つの文章ベクトルのうち、v1-v2間、v1-v3間の類似度を判定します。 期待結果としてはv2の方が似ててほしい。

 

ソースコード

こちらのサイトの”テキスト間の類似度”の項を参考にさせていただきました。
参考【Python】Word2Vecの使い方
なお、MeCab、Word2VecがPythonから利用可能な状態になっており、学習済みモデルが用意されているものとします(ネットに落ちてる公開モデルで良いと思います)。

 

実行結果

うむ。いい感じっぽい。ちなみに類似度はモデルの精度に依存します。

改修箇所解説

大まかに以下が直したところ。

モデルの読み込み

ここは自分で用意したモデルの形式に合わせて読み込みメソッドを変えるだけ。

初期ベクトルsum_vecの次元数

後続で、sum_vec += model.wv[item.split('\t')[0]]という計算を行なっているが、model.wv[]で得られるベクトルの次元数が300のため、次元数の不一致によりbroadcastエラーが発生しているらしい。 とりあえず次元数を一致させて動くようにはしたが、それにより類似度判定の精度に影響が出ないのかは不明。 この辺は数学の世界なので、誰か詳しい人教えてください。

parseToNodeメソッド

なぜかparseToNodeメソッドがうまく機能せず。parseはうまく動くので、splitlines()とsplit()を使って自力でパースした。どうやら他にもハマっている人がいるようで、Windowsではうまく動くので、MacOS&python3.7系(?)で発生するライブラリ側のバグっぽい。

-Python
-, , ,

執筆者:


comment

メールアドレスが公開されることはありません。

関連記事

MacのPython環境最適解!? 〜pyenv+venv+pipenvでPython環境構築〜

Macにpyenv+venvでPython環境構築をした時のメモ。 Anacondaを使うか迷ったが、色々調べたところAnacondaは環境を破壊するとか、Homebrewとコンフリクトするとか色々問 …

【初心者向け】Pythonで初めてのスクレイピング

Python学習中のためスクレイピングをやってみる。 すでに山ほど参考サイトがあるが、以下がソースも短くライトそうなので拝借し、本家はBeautifulSoupを使っているところをpyqueryに改造 …

sidebartop_Ad