単語分散表現のクラスタリング

語彙空間のクラスタリングの参考になるものがないかと探して以下の記事に遭遇しました。

Pythonで単語分散表現のクラスタリング - Ahogrammer

現象

作成済みモデルをダウンロードしてクラスタリングを実行するという優れもの記事でしたが、クラスタリングをする際にgensimのエラーが出たのでその解決法をメモ。

AttributeError: 'Word2Vec' object has no attribute 'trainables'

どうやらこれはgensimのバージョン相違に伴うエラーでした。

モデル作成時のgensimとモデル読み込み時のgensimのバージョンが異なる。

'Word2Vec' object has no attribute 'trainables' · Issue #2000 · RaRe-Technologies/gensim

対応策

ありがたいことにこの作者の方はモデル作成のソースをgithubに公開してくれていました。

shiroyagicorp/japanese-word2vec-model-builder: A tool for building gensim word2vec model for Japanese.

$ git submodule init
$ git submodule update
$ python -m venv .env
$ . .env/bin/activate
$ pip install -r requirements.txt

これを使って環境を構築し、クラスタリングを実行したところうまくいきました。多謝!

以下が実行結果の一部です。

...
['年末', '11月下旬', '5月上旬', '3月下旬', '6月中旬', '10月中旬', '8月下旬', '9月中旬', '3月上旬', '秋期']
['大洋', '近鉄バファローズ', '南海', 'プロ野球', '近鉄', '球団', '日本ハム', '藤井寺球場', 'オリックス', '東北楽天ゴールデンイーグルス']
['ヒール', 'ギミック', 'プロレスラー', 'ベビーフェイス', 'ルチャリブレ', 'ルード', 'テクニコ', 'レスラー', 'ハンス・シュミット', 'フリッツ・フォン・エリック']
...

実は、Mecabのビルド時にエラーが発生したのですが、実行ときにはグローバルにインストールしているMecabモジュールを使うので問題なく動作しました。

MeCab_wrap.cxx:2987:10: fatal error: 'stdexcept' file not found

こちらは、XcodeのCommandLineToolsのバージョン問題のようです。