WSLでMeCabとJupyter Notebookを動かす
PythonはWindowsでも動きますが、いざ色々やろうとするとUbuntu対応だってことが多いですね。
(そんな時のために?)Windows10ではWindows Subsystem for Linux(WSL)があるのですが、今回MeCabを入れて、Jupyter Notebookで動かしてみるのにそこそこ苦労したので、ご紹介します。
たぶんもう一回やろうとしても難しいので、備忘録です。
尚、MeCabについては、下記を参考にしています。
https://github.com/neologd/mecab-ipadic-neologd/blob/master/README.ja.md
WSLインストール
下記リンクの手順なのですが、UbuntuはUbuntu 18.04 LTSを入れました。
尚、一度入れていたUbuntuではMeCabのインストールが行かなかった(MeCabが見つからなかった)ので、アンインストールしてやり直しました。
リンクの手順ではPower ShellでWSLを有効にしていますが、コントロールパネルからでも(おそらく)同じだと思います。
https://docs.microsoft.com/ja-jp/windows/wsl/install-win10
Ubuntu起動
スタートメニューからUbuntu 18.04を最初に起動すると、下記のようにusernameとpasswordを設定します。
Installing, this may take a few minutes...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username: XXXXXXXX
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Installation successful!
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
aptitudeインストール
手順ではaptitudeを使うとありますが、aptitude: command not found
と怒られるので、インストールします。
尚、sudoコマンドを最初に使うときには、passwordを求めらます。
sudo apt-get install aptitude
[sudo] password for XXXXXXXX:
Do you want to continue? [Y/n] y
installが終わったら、手順の通りupdateとupgradeします。
sudo aptitude update
sudo aptitude upgrade
Do you want to continue? [Y/n] y
MeCabインストール
手順の通りMeCabその他をインストールします。Ubuntuを再インストールする前はここでエラーが出てました。
sudo aptitude install make automake autoconf autotools-dev m4 mecab libmecab-dev mecab-ipadic-utf8 git make curl xz-utils file
Do you want to continue? [Y/n] y
sudo sed -i -e 's%/lib/mecab/dic%/share/mecab/dic%' /usr/bin/mecab-config
mecab-ipadic-NEologd をインストール
~$ git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
Cloning into 'mecab-ipadic-neologd'...
remote: Enumerating objects: 75, done.
remote: Counting objects: 100% (75/75), done.
remote: Compressing objects: 100% (74/74), done.
remote: Total 75 (delta 5), reused 55 (delta 0), pack-reused 0
Unpacking objects: 100% (75/75), done.
~$ cd mecab-ipadic-neologd
~/mecab-ipadic-neologd$ ./bin/install-mecab-ipadic-neologd -n
[install-mecab-ipadic-NEologd] : Do you want to install mecab-ipadic-NEologd? Type yes or no.
yes
インストール先はオプション未指定の場合 mecab-config に従って決まります。
以下のコマンドを実行すると確認できます。
~/mecab-ipadic-neologd$ echo `mecab-config --dicdir`"/mecab-ipadic-neologd"
/usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd
テスト
~$ echo "8月3日に放送された「中居正広の金曜日のスマイルたちへ」(TBS系)で、1日たった5分でぽっこ りおなかを解消するというダイエット方法を紹介。キンタロー。にも密着。" | mecab
8 名詞,数,*,*,*,*,*
月 名詞,一般,*,*,*,*,月,ツキ,ツキ
3 名詞,数,*,*,*,*,*
日 名詞,接尾,助数詞,*,*,*,日,ニチ,ニチ
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ
放送 名詞,サ変接続,*,*,*,*,放送,ホウソウ,ホーソー
さ 動詞,自立,*,*,サ変・スル,未然レル接続,する,サ,サ
れ 動詞,接尾,*,*,一段,連用形,れる,レ,レ
た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
「 記号,括弧開,*,*,*,*,「,「,「
中居 名詞,固有名詞,人名,姓,*,*,中居,ナカイ,ナカイ
正広 名詞,固有名詞,人名,名,*,*,正広,マサヒロ,マサヒロ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
金曜日 名詞,副詞可能,*,*,*,*,金曜日,キンヨウビ,キンヨービ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
スマイル 名詞,一般,*,*,*,*,スマイル,スマイル,スマイル
たち 名詞,接尾,一般,*,*,*,たち,タチ,タチ
へ 助詞,格助詞,一般,*,*,*,へ,ヘ,エ
」( 名詞,サ変接続,*,*,*,*,*
TBS 名詞,一般,*,*,*,*,*
系 名詞,接尾,一般,*,*,*,系,ケイ,ケイ
) 名詞,サ変接続,*,*,*,*,*
で 助詞,格助詞,一般,*,*,*,で,デ,デ
、 記号,読点,*,*,*,*,、,、,、
1 名詞,数,*,*,*,*,*
日 名詞,接尾,助数詞,*,*,*,日,ニチ,ニチ
たっ 動詞,自立,*,*,五段・タ行,連用タ接続,たつ,タッ,タッ
た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
5 名詞,数,*,*,*,*,*
分 名詞,接尾,助数詞,*,*,*,分,フン,フン
で 助動詞,*,*,*,特殊・ダ,連用形,だ,デ,デ
ぽ 形容詞,接尾,*,*,形容詞・アウオ段,ガル接続,ぽい,ポ,ポ
っ 動詞,非自立,*,*,五段・カ行促音便,連用タ接続,く,ッ,ッ
こり 動詞,自立,*,*,一段,連用形,こりる,コリ,コリ
おなか 名詞,一般,*,*,*,*,おなか,オナカ,オナカ
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
解消 名詞,サ変接続,*,*,*,*,解消,カイショウ,カイショー
する 動詞,自立,*,*,サ変・スル,基本形,する,スル,スル
という 助詞,格助詞,連語,*,*,*,という,トイウ,トユウ
ダイエット 名詞,サ変接続,*,*,*,*,ダイエット,ダイエット,ダイエット
方法 名詞,一般,*,*,*,*,方法,ホウホウ,ホーホー
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
紹介 名詞,サ変接続,*,*,*,*,紹介,ショウカイ,ショーカイ
。 記号,句点,*,*,*,*,。,。,。
キンタロー 名詞,一般,*,*,*,*,*
。 記号,句点,*,*,*,*,。,。,。
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ
も 助詞,係助詞,*,*,*,*,も,モ,モ
密着 名詞,サ変接続,*,*,*,*,密着,ミッチャク,ミッチャク
。 記号,句点,*,*,*,*,。,。,。
EOS
PIPインストール
sudo aptitude install python3-pip
mecab-python3インストール
mecab-python3をインストールするのですが、unable to execute 'swig': No such file or directory
と怒られるのでswigをインストールします。
sudo aptitude install swig
pip3 install mecab-python3
pip3でnumpyなど、他に使うライブラリをインストールします。
(尚、pipをアップグレードしようとして何かやらかしたので、以後 --user を付けないとpip3が動かなくなりました…)
Jupyter Notebookインストール
pip3 install ipython[all] --user
pip3 install jupyter --user
Jupyter Notebook起動
jupyter notebookをタイプすると、下記メッセージが出るので、ブラウザのURLにhttp://localhost:8888/?token=7517a29f9ebd226603577be161642b11961463aaf2674d05
を張り付けるとjupyter notebookが起動します。やったー!
~$ jupyter notebook
[I 16:16:51.697 NotebookApp] Writing notebook server cookie secret to /home/XXXXXXXX/.local/share/jupyter/runtime/notebook_cookie_secret
[I 16:16:52.689 NotebookApp] Serving notebooks from local directory: /home/XXXXXXXX
[I 16:16:52.689 NotebookApp] The Jupyter Notebook is running at:
[I 16:16:52.690 NotebookApp] http://localhost:8888/?token=7517a29f9ebd226603577be161642b11961463aaf2674d05
[I 16:16:52.691 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
MeCabテスト
import MeCab
tagger = MeCab.Tagger("-Ochasen")
node = tagger.parse("坊主が屏風に上手に坊主の絵を描いた")
print(node)
坊主 ボウズ 坊主 名詞-一般
が ガ が 助詞-格助詞-一般
屏風 ビョウブ 屏風 名詞-一般
に ニ に 助詞-格助詞-一般
上手 ジョウズ 上手 名詞-形容動詞語幹
に ニ に 助詞-副詞化
坊主 ボウズ 坊主 名詞-一般
の ノ の 助詞-連体化
絵 エ 絵 名詞-一般
を ヲ を 助詞-格助詞-一般
描い エガイ 描く 動詞-自立 五段・カ行イ音便 連用タ接続
た タ た 助動詞 特殊・タ 基本形
EOS
def tokenize(sentence):
"""日本語の文を形態素の列に分割する関数
:param sentence: str, 日本語の文
:return tokenized_sentence: list of str, 形態素のリスト
"""
node = tagger.parse(sentence)
node = node.split("\n")
tokenized_sentence = []
for i in range(len(node)):
feature = node[i].split("\t")
if feature[0] == "EOS":
# 文が終わったら終了
break
# 分割された形態素を追加
tokenized_sentence.append(feature[0])
return tokenized_sentence
tokenize("坊主が屏風に上手に坊主の絵を描いた")
['坊主', 'が', '屏風', 'に', '上手', 'に', '坊主', 'の', '絵', 'を', '描い', 'た']
今後の抱負
Windows環境でMeCabは無理かなと思っていたのですが、なんとかできてよかったです。
MeCabとPyTorchを組み合わせてNLPをやりたいのですが、PyTorchのインストールはできていますが、WSLでGPUを有効にできていません。そもそもできるのか不明ですが…
import torch
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
device
device(type='cpu')
Bash on Ubuntuの起動設定(追記)
作業フォルダを設定したショートカットを使えば、Ubuntuからデフォルトのフォルダを参照しやすい形で起動できます。
GPUは色々やったけど、だめでした。
ネットを見ても、対応していないようですね…