新しく買ったWindows 10でneologd等の自然言語処理環境を構築する (+ XGBoost)
新しく買ったWindows 10でneologd等の自然言語処理環境を構築する (+ XGBoost)
はじめに
自然言語処理と機械学習とSE的なことを仕事としているのですが、現在務めている会社ではWindowsの利用を強く推奨されることがあります。これは、コンプラインスの関係でセキュリティ管理者が複数のOSを管理するコストは高いからWindowsに限定することが多いという理由に起因しています。
この文章を書いている環境はUbuntu LinuxのLibreofficeを用いています。文字コードがUTF-8だと自然言語処理の観点で何かと都合がよく、MeCabなどの形態素解析エンジンもUTF-8ですし、Python3も内部の処理系がUTF-8で、GolangのRuneや、C++も文字処理粒度はUTF-8のものが増えています。
こういう関係もあって、sjisをハックするなど、あまり技術的にこったことをしたくないというモチベーションのもと、Windowsで形態素解析と、みんな大好きXGBoostを導入するまでの一連の流れを示したいと思います。
ツール属性の攻撃という言葉があって、これが案外馬鹿にできないというか、かなりの攻撃力を誇るので、できるだけ覚えるコスト下げたいという思いもあります。
(この方法は2017年3月段階での、私がいじくってなんとか動かした方法ですので、正しく理解するには公式ドキュメントも注意深く参照することをおすすめします)
計画
1. Windows 10の持ち運べるノートパソコンであるLG gramの購入と、アップグレード
2. OSをNVMeに移動する
4. mecabとneologdの導入
5. Anacondaとjupyter notebookの構築
6. XGBoostの導入
1. Windows 10の持ち運べるノートパソコンであるLG gramの購入と、アップグレード
本当はMacBook Proがほしいのだが、2017年3月、もっとも高いメモリのモデルでも16GByteまでしかなく、加えて8GByte → 16GByteに変更するのに20000円もかかる。自分で取り替えられる場合、12000円程度ですむ。
MacBookには、NVMeモデルがない。NVMeはSSDより高速な主記憶装置で、ディスクに大量にアクセスする操作が発生することが多い機械学習ではNVMeであるだけで、かなり処理時間が短縮できることがある。スワップ領域等を作成しておくと、メモリがあふれた時にもマシンが処理落ちして使い物にならなくなる時間が短縮できて大変よい。
CPUは早いほうがいいが、ノートパソコンで重い計算をさせることは私は少ないのでCore i3でいいかなって感じです。
LG gramの2017年のモデルが1キロを下回る軽さで、メモリを追加することも、NVMeに換装することもできます。96000円程度で秋葉原のツクモで10%還元で購入できました。そのポイントを利用してNVMeとDDR4の16GByteのメモリを購入しました。NVMeがsamsung 512GBのモデルで30000円程度,DDR4の16GByteで12000円程度でした。合計で、120000円程度です。
全く文脈を無視しますが、ぼくは小林銅蟲先生を尊敬していまして、料理ブログよく見てるので、あのノリ羨ましいなって思います。
OSをNVMeに移動する
これが一番めんどくさかったです。コントロールパネルからリカバリーディスクの作成を選んで、32GのUSBフラッシュメモリにOSのリカバリディスクを作成しました。
かなり早いUSBフラッシュメモリを用いたのに全く速度がでない。。。4時間ぐらいかかりました。これはMicorsoftの怠慢では。途中で寝てしまいました。
3. 日本語が処理できるようにcmdやcmderの代わりにputty, teratermやcygwind sshを利用する
Bash on WidowsというWindows上にUbuntuが動作する仕組みがあるのですが、コマンドプロンプトや、よくおすすめされるcmderというソフトは、日本語入力やファイルが壊滅的にダメで、これが原因でほんとつらい思いをしました。
よく私が使う回避策は、Bash on Windowsでssh-serverを起動して、teraterm等てアクセスする方法です。面倒ですが今のところこれが一番安定して、日本語が扱えます。
3.1 開発者モードを、コントロールパネルから有効にする
3.2 Windowsの機能の有効化または無効化 → Windows Subsystem for Linux (Beta) → チェックを入れて再起動
3.3 services.mscをコマンドプロンプトに入力 -> SSH Server Broker,SSH Server Proxyの2つのサービスを無効にする
3.3 cmdを立ち上げる → bashと入力 → Linuxのインストール
3.4 Bash on Windowsに入る → sudo apt get install openssh-serverでインストール
/etc/ssh/sshd_configを編集
$ sudo vim /etc/ssh/sshd_config 変更→ UsePrivilegeSeparation no 変更→ PasswordAuthentication yes コメントアウト → #Hostkey /etc/ssh/ssh_host_dsa/key コメントアウト → #Hostkey /etc/ssh/ssh_host_ecdsa/key コメントアウト → #Hostkey /etc/ssh/ssh_host_ed25519/key
コマンド実行(これをやらないとつながらない)
$ sudo ssh-keygen -t rsa -N '' -f ssh_host_rsa_key
sshdを起動
$ sudo /etc/init.d/ssh start
4. mecabとneologdの導入
これもUbuntuのインストール手順に従えば、問題ないです。標準のUbuntuLinuxにはデフォルト入ってないパッケージもあるので適宜入れていきます。
$ sudo apt install mecab libmecab-dev mecab-ipadic $ sudo apt install mecab-ipadic-utf8 $ sudo apt install python-mecab $ sudo apt install python3-pip $ sudo pip3 install mecab-python3 $ git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git $ cd mecab-ipadic-neologd $ ./bin/install-mecab-ipadic-neologd -n
mecabのデフォルト辞書をneologdに変更する
$ sudo vim /etc/mecabrc 変更 → dicdir = /usr/lib/mecab/dic/mecab-ipadic-neologd
動作確認(FGOは標準辞書にない)
$ echo "Fate/Grand Order" | mecab
Fate/Grand Order 名詞,固有名詞,一般,*,*,*,Fate/Grand Order,フェイトグランドオーダー, フェイトグランドオーダー
EOS
5. Anacondaとjupyter notebookの構築
最初Anacondaを使わずに入れようと思ったけど、ubuntuのwheelが通じないことながあって、Anacondaでインストールするのが楽でした。
Anacondaのパッケージを取得
$ wget https://repo.continuum.io/archive/Anaconda3-4.3.1-Linux-x86_64.sh
インストール(sudoするとパーミッションが面倒なのでしない)
$ sh Anaconda3-4.3.1-Linux-x86_64.sh (ひらすらyesで進めていく)
私の環境ではpython3.6のバイナリがAnacondaのPythonですので、Python3.6で実行できるようになります。
$ which python3.6 /home/{yourname}/anaconda3/bin/python3.6
なお、ipythonのkernelが不安定なので、以下のパッチを当てる必要があります。
conda install -c jzuhone zeromq=4.1.dev0
jupyter notebookのパスワードを作成します
In [1]: from notebook.auth import passwd In [2]: passwd() Enter password: Verify password: Out[2]: 'sha1:67c9e60bb8b6:9ffede0825894254b2e042ea597d771089e11aed' <-これをコピーしておきます
jupyter notebookにパスワードを設定
$ vim ~/.jupyter/jupyter_notebook_config.py
コピーした内容を貼り付け
c.NotebookApp.password = u'sha1:67c9e60bb8b6:9ffede0825894254b2e042ea597d771089e11aed'
ついでにjupyterで形態素解析ができるようにする
$ sudo ipython -m pip install mecab-python3
これでClient側のWindowsからwebブラウザ等でjupyter notebookが利用可能です。
例でスクリーンショットを載せます。
6. XGBoostの導入
自分はlibsvm形式で直接xgboostのバイナリに放り込むことが多いのですが、やりかは何でもいいと思います。
$ git clone --recursive https://github.com/dmlc/xgboost
$ cd xgboost
$ make -j4
$ sudo ln -s /home/{yourname}/xgboost/xgboost /usr/local/bin/xgboost
サンプルのアガリクスの有効判定みたいなのをときます。
$ cd demo/binary_classification
$ python mapfeat.py
$ python mknfold.py agaricus.txt 1
$ xgboost mushroom.conf
いろいろ入れられそうですが、この辺にしておきます。
再度になりますが、自分はQiitaとか見てて結構ハマって、よくわかんないなぁとか思っていたのですが、公式ドキュメントで解決することが多かったです。私の今回の方法も、ひと月後には通用しないものになっているかもしれません。
公式ドキュメントを正しく理解することが一番の近道かもしれません。
(何か間違い等がありましたら、ツイッターでお知らせいただけると幸いです。)