【NLP入門】環境構築から簡単な類似度計算まで♪


少し自然言語処理をやろうということで、Bash on Windows10に以下をインストールして遊んでみた。
・python
 (Python 3.5.2)
・MeCab
・辞書;mecab-ipadic-NEologd
・mecab-python3
・scikit-learn
 (joblib-0.13.2 numpy-1.17.1 scikit-learn-0.21.3 scipy-1.3.1)
・gensim(・fasttext・word2vec)
・zenhan
【参考】Python の全角半角処理に zenhan が便利

Bash on Windows をインストール

【参考】Win10のBash on Windows をインストールする
ここは参考のまんまです。ただし、プログラムと機能は横幅がないと下に出現しています。

・python

Anacondaでインストールしようかなと思ったが、ここでは普通にPythonをまんまインストールしてみました。

sudo apt install python3

これでインストールされたのは、(Python 3.5.2)でした。
anacondaでやりたいときは以下のようなことを注意しないとです。
【参考】bash for windows でanacondaディストリビューションのpython3でimportが出来ない

・MeCab

やりたいこととやることは参考の流れを参考にします。
【参考】
scikit-learnを使ってテキストから素性ベクトルを取得する
Python3からMeCabを使う

$ brew install mecab
$ brew install mecab-ipadic

まず、その前に以下を実施します。

$ sudo apt update
$ sudo apt upgrade

そして、上記をやってみると、。。。以下のように出ます。

$ brew install mecab
プログラム 'brew' はまだインストールされていません。 次のように入力することでインストールできます:
sudo apt install linuxbrew-wrapper

ということで、以下でいろいろインストール出来ました。

$ sudo apt install linuxbrew-wrapper

そして、以下のようにmecabがインストールできました。

$ brew install mecab
========================================================================
You may want to update following environments after installed linuxbrew.

  PATH, MANPATH, INFOPATH

(example: /usr/share/doc/linuxbrew-wrapper/examples/profile)
========================================================================
==> This script will install:
/home/ubuntu/.linuxbrew/bin/brew
/home/ubuntu/.linuxbrew/Library/...
/home/ubuntu/.linuxbrew/share/man/man1/brew.1

Press RETURN to continue or any other key to abort
...
==> Downloading and installing Homebrew...
...
HEAD is now at 5320403 Troubleshooting.md: update link
Warning: /home/ubuntu/.linuxbrew/bin is not in your PATH.
==> Installation successful!
==> Next steps
Install the Linuxbrew dependencies:
Debian, Ubuntu, etc.:
  `sudo apt-get install build-essential`

以下は、少しいろいろやってから実施したせいか以下のようになっています。

$ sudo apt-get install build-essential
build-essential はすでに最新バージョン (12.1ubuntu2) です。

次にipadicを入れますが、以下のとおり入りません。

$  brew install mecab-ipadic
Error: cannot load such file -- os/linux/glibc
Please report this bug:
    https://github.com/Linuxbrew/linuxbrew/blob/master/share/doc/homebrew/Troubleshooting.md#troubleshooting

そして、brew install swigというmecab-python3に必要なDependencyを入れようとしますが、これも同じようにできませんでした。

$ brew install swig
Error: cannot load such file -- os/linux/glibc
Please report this bug:
    https://github.com/Linuxbrew/linuxbrew/blob/master/share/doc/homebrew/Troubleshooting.md#troubleshooting

次に、以下のpip3 install ipykernelを実行するとipython関連が入りました。

$ pip3 install ipykernel
Successfully installed backcall-0.1.0 decorator-4.4.0 ipykernel-5.1.2 ipython-7.8.0 ipython-genutils-0.2.0 jedi-0.15.1 j
upyter-client-5.3.1 jupyter-core-4.5.0 parso-0.5.1 pexpect-4.7.0 pickleshare-0.7.5 prompt-toolkit-2.0.9 ptyprocess-0.6.0
 pygments-2.4.2 python-dateutil-2.8.0 pyzmq-18.1.0 setuptools-41.2.0 six-1.12.0 tornado-6.0.3 traitlets-4.3.2 wcwidth-0.
1.7

いよいよ、mecabをpythonから利用するときに必要なmecab-python3を入れます。

$ pip install mecab-python3
Collecting mecab-python3
  Downloading https://files.pythonhosted.org/packages/40/e9/b6ba6580537a5261f615537f02a2a5be43652a653196e0e2d165934ac1af/mecab_python3-0.996.2-cp27-cp27mu-manylinux1_x86_64.whl (15.8MB)
    100% |████████████████████████████████| 15.9MB 120kB/s
Installing collected packages: mecab-python3
Successfully installed mecab-python3-0.996.2

無事に入りました。
pipで入れたので、python3になっているか心配になって以下のように再度pip3でやりましたが同じバージョンが入りました。

$ pip3 install mecab-python3
Successfully installed mecab-python3-0.996.2

mecab-ipadic-NEologd をインストールする

【参考】mecab-ipadic-NEologd : Neologism dictionary for MeCab
参考の通り、インストールしていく。

$ sudo apt install make automake autoconf autotools-dev m4 mecab libmecab-dev mecab-ipadic-utf8 git make curl xz-utils file

$ sudo sed -i -e 's%/lib/mecab/dic%/share/mecab/dic%' /usr/bin/mecab-config

以下で資材をダウンロードします。

$ git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git

そしてインストールします。

mecab-ipadic-NEologd のインストールと更新
Step.1
$ cd mecab-ipadic-neologd
Step.2
以下のコマンドを実行して結果を確認する画面で「yes」と入力すると、sudo 権限で最新版がインストール(初回実行時以降は更新)されます。
$ ./bin/install-mecab-ipadic-neologd -n

最後に辞書がインストールされたディレクトリが確認できます。
これで、mecab-ipadic-NEologdがインストールできました。

以下のコマンドを実行すると辞書のディレクトリが確認できます。
$ echo `mecab-config --dicdir`"/mecab-ipadic-neologd"

さらに以下のおまじないを実施します。

全部入りな mecab-ipadic-NEologd を簡単にインストールする方法
標準インストールでは一部の辞書ファイルがインストールされません。
-a オプションを指定すると全部入り状態でインストールできます。
$ ./bin/install-mecab-ipadic-neologd -n -a

mecab-ipadic-NEologd の使用(Copyright (C) 2015-2019 Toshinori Sato (@overlast)

上記のディレクトリを -d以下に置きます。

$ mecab -d /usr/share/mecab/dic/mecab-ipadic-neologd
お花茶屋は雨です
お花茶屋        名詞,固有名詞,一般,*,*,*,お花茶屋,オハナヂャヤ,オハナジャヤ
は      助詞,係助詞,*,*,*,*,は,ハ,ワ
雨      名詞,一般,*,*,*,*,雨,アメ,アメ
です    助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
EOS
$ echo "8月3日に放送された「中居正広の金曜日のスマイルたちへ」(TBS系)で、1日たった5分でぽっこりおなかを解消するというダイエット方法を紹介。キンタロー。のダイエットにも密着。" | mecab -d /usr/share/mecab/dic/mecab-ipadic-neologd
8月3日  名詞,固有名詞,一般,*,*,*,8月3日,ハチガツミッカ,ハチガツミッカ
に      助詞,格助詞,一般,*,*,*,に,ニ,ニ
放送    名詞,サ変接続,*,*,*,*,放送,ホウソウ,ホーソー
さ      動詞,自立,*,*,サ変・スル,未然レル接続,する,サ,サ
れ      動詞,接尾,*,*,一段,連用形,れる,レ,レ
た      助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
「      記号,括弧開,*,*,*,*,「,「,「
中居正広の金曜日のスマイルたちへ        名詞,固有名詞,一般,*,*,*,中居正広の金曜日のスマイルたちへ,ナカイマサヒロノキンヨウビノスマイルタチヘ,ナカイマサヒロノキンヨービノスマイルタチヘ
」(     記号,一般,*,*,*,*,*
TBS     名詞,固有名詞,一般,*,*,*,TBS,ティービーエス,ティービーエス
系      名詞,接尾,一般,*,*,*,系,ケイ,ケイ
)       記号,一般,*,*,*,*,*
で      助動詞,*,*,*,特殊・ダ,連用形,だ,デ,デ
、      記号,読点,*,*,*,*,、,、,、
1日     名詞,固有名詞,一般,*,*,*,1日,ツイタチ,ツイタチ
たった  副詞,助詞類接続,*,*,*,*,たった,タッタ,タッタ
5分     名詞,固有名詞,一般,*,*,*,5分,ゴフン,ゴフン
で      助詞,格助詞,一般,*,*,*,で,デ,デ
ぽっこり        副詞,一般,*,*,*,*,ぽっこり,ポッコリ,ポッコリ
おなか  名詞,一般,*,*,*,*,おなか,オナカ,オナカ
を      助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
解消    名詞,サ変接続,*,*,*,*,解消,カイショウ,カイショー
する    動詞,自立,*,*,サ変・スル,基本形,する,スル,スル
という  助詞,格助詞,連語,*,*,*,という,トイウ,トユウ
ダイエット方法  名詞,固有名詞,一般,*,*,*,ダイエット方法,ダイエットホウホウ,ダイエットホウホー
を      助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
紹介    名詞,サ変接続,*,*,*,*,紹介,ショウカイ,ショーカイ
。      記号,句点,*,*,*,*,。,。,。
キンタロー。    名詞,固有名詞,一般,*,*,*,キンタロー。,キンタロー,キンタロー
の      助詞,連体化,*,*,*,*,の,ノ,ノ
ダイエット      名詞,サ変接続,*,*,*,*,ダイエット,ダイエット,ダイエット
に      助詞,格助詞,一般,*,*,*,に,ニ,ニ
も      助詞,係助詞,*,*,*,*,も,モ,モ
密着    名詞,サ変接続,*,*,*,*,密着,ミッチャク,ミッチャク
。      記号,句点,*,*,*,*,。,。,。
EOS

pythonアプリのための準備

まず、類似度計算などのためにscikit-learnをインストールします。
これで、numpyとscipyも入ります。

$ pip3 install scikit-learn
Successfully installed joblib-0.13.2 numpy-1.17.1 scikit-learn-0.21.3 scipy-1.3.1

次に、doc2vecやfasttextを利用するために、gensimをインストールします。
【参考】models.keyedvectors – Store and query word vectors

$ pip3 install gensim

gensimの確認のために以下を動かしてみました。
【参考】doc2vecのサンプル

$ python3 sample_gensim_w2vec.py
訓練開始
Epoch: 1
Epoch: 2
Epoch: 3
Epoch: 4
Epoch: 5
Epoch: 6
Epoch: 7
Epoch: 8
Epoch: 9
Epoch: 10
Epoch: 11
Epoch: 12
Epoch: 13
Epoch: 14
Epoch: 15
Epoch: 16
Epoch: 17
Epoch: 18
Epoch: 19
Epoch: 20
SENT_0
[('SENT_1', 0.031334392726421356), ('SENT_3', -0.026536351069808006), ('SENT_2', -0.032195061445236206)]
SENT_3
[('SENT_2', 0.03055877611041069), ('SENT_1', -0.015100374817848206), ('SENT_0', -0.026536351069808006)]
SENT_1
[('SENT_0', 0.031334392726421356), ('SENT_3', -0.015100374817848206), ('SENT_2', -0.0521044060587883)]
[('今日', 0.01506108045578003), ('吠えた', -0.0007879622280597687), ('今', -0.004818214103579521), ('猫', -0.010754822753369808), ('泳ぐ', -0.01584682986140251), ('明日', -0.01980219967663288), ('犬', -0.020805783569812775), ('海', -0.0782541036605835)]

なるほどっていう感じの出力ですね。

今後の文字処理のためにzenhanを入れておきます。

$ pip3 install zenhan
Successfully installed zenhan-0.5.2

まとめ

・自然言語処理に必要な環境を構築した
・一応、類似度まで計算できた

・次は本格的なアプリを作ろうと思う

おまけ

今後のために参考を挙げておく
Doc2Vecを使用するまでの環境構築手順
Doc2Vec を使って日本語の Wikipedia を学習する
FacebookのfastTextでFastに単語の分散表現を獲得する