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

Analytics 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系(?)で発生するライブラリ側のバグっぽい。

-Analytics, Python, 自然言語処理
-, , ,

執筆者:


comment

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

関連記事

「詳解 ディープラーニング 第2版」を読んで ~単純パーセプトロンの実装~

目次 ニューラルネットワークとディープラーニング 単純パーセプトロンの実装 ニューラルネットワークとディープラーニング ニューラルネットワーク ··· 脳がニューロンとそのネットーワークで情報処理する …

Tableauで損益計算書を作る

Tableauで損益計算書(正確には管理会計、すなわち売上と費用の予実分析資料)を作成することになったのでその結果のまとめ。 目次 実現したいこと いきなり残念な結論 一応Tableauでやるとどうな …

【入門】専門じゃない人のためのデータ分析でよく使う用語まとめ

データ分析とか統計の本を読んでいるとよくでてくる用語で、数学とか統計とかそういう畑を出てない自分にとって馴染みの薄いものを備忘的にまとめていくメモ。 用語 概要 因子 因果関係の原因となる項目。 e. …

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

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

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

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