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

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

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のバージョン問題のようです。

goでWebAssembly(2)

前回の続きです。

goでWebAssembly - unokun’s blog

goのWebAssemblyに関する詳細な記事がありました。

Go and wasm: generating and executing wasm with Go GopherAcademy

まとめると以下のようになると思います。

  • Web AssemblyはC/C++、Rustなどでビルドしたnative用バイナリをブラウザ上で実行することができる。
  • goのコンパイラ(gc)は、まだnative用バイナリを生成できない。将来的なアーキテクチャ向けのバイナリを生成する予定?
  • そのかわり、ブラウザ上でgoでビルドしたwasmファイルを動かすjsを提供している。サンプルコードが(wasm_exec.html, wasm_exec.js)になる。
  • このjsは、Web Assemblyでブラウザが提供しているAPIを呼び出す。
  • この環境があれば、goでビルドしたモジュールをブラウザ上で動作させることができる。

上記記事には、asmファイルの情報を表示するツールがいろいろ含まれていました。

  • wasm-dump
  • wasm-run

goでWebAssembly

go 11.1でWebAssemblyが追加になったので、試してみました。

以下のサイトに記載されている内容を試してみたところ、たしかにコンソールに"Hello, WebAssembly!”が出力されました。

WebAssembly · golang/go Wiki

環境 Mac OS High Sierra 10.13.6 go 11.1

f:id:unokun3:20180826121450p:plain

nginx経由で同じようにしましたが、以下のエラーが発生します。

wasm_exec.html:1 Uncaught (in promise) TypeError: Failed to execute 'compile' on 'WebAssembly': Incorrect response MIME type. Expected 'application/wasm'.

以下のページを参考に、mime.typesにapplication/wasmを追加しましたが、うまくいきませんでした。

application/wasm wasm;

#1606 (WebAssembly doesn't work on Firefox/Chrome due to missing MIME type) – nginx

ローカル(ブラウザ内)に処理が書けるのは面白そうです。 何ができるか考えてみます。

vue-cli(3.0)を使う前に

vue-cli(3.0)を使ってみようと思ったのですが、その前に、nodeのパッケージ管理をnodebrewからndenvに変更しました。

ndenvはanyenv(なんでもenv)から使うバージョン管理で、pyenv, rbenvも同じように使えるようです。が、今回はndenvのみanyenvから使えるようにしました。

以下のページの処理をそのまま実行すればOKです。

Nodeのバージョン管理をndenvにし、それに合わせてanyenvを導入したのでメモ – YATのblog

anyenvのインストール

$ git clone https://github.com/riywo/anyenv ~/.anyenv

使っているシェルの設定ファイル(.zshrc、.bash_profile)に以下を追加します。それまで使っていたnodebrewの処理をコメントアウトしました。

export PATH="$HOME/.anyenv/bin:$PATH"
eval "$(anyenv init -)"

# nodebrew
#export PATH=$HOME/.nodebrew/current/bin:$PATH

設定ファイルを再読み込みします。

source 設定ファイル(.zshrc、.bash_profile)

ndenvインストール

$ anyenv install ndenv

インストール可能なnodeのバージョン一覧

$ ndenv install -l

nodeインストール

$ node install インストールしたいバージョン

インストールされているバージョン一覧

$ ndenv versions

デフォルトのバージョン

ndenv global デフォルトのnodenのバージョン

ここまでくれば、vue-cli 3.0が使えるようになります。 次は、それを使ったプロジェクトの作成ですね。

リンク