Re:ゼロから始めるML生活

ミスよりグズを嫌え

SudachiPyでユーザー辞書を使う

f:id:nogawanogawa:20190718185410p:plain
 

気がついたら、前回のブログからだいぶ空いてしまいました。

これまで、Sudachiを使ってユーザー辞書を使おうとした場合には、Sudachi(Java)を使用する必要がありました。 それが最近何やらSudachiPyのリリースがあったらしく、SudachiPyでユーザー辞書が使えるようになったようです。

github.com

ということで、今回はそれを使ってみます。

SudachiPyのインストール

github.com

普通にReadmeに書いてあるとおりにインストールを進めます。

とりあえずインストールしてみます。 すでに、古いSudachiが入っていたので、まずアンインストール。

pip3 uninstall SudachiPy

続けて、新しくインストールし直します。

pip3 install SudachiPy

sudachi $pip3 install SudachiPy
Collecting SudachiPy
  Downloading https://files.pythonhosted.org/packages/aa/e1/7767146e535d57dd17ce1ad82f049b6b6bb0c1cb639cbd984302b99526cb/SudachiPy-0.3.4-py3-none-any.whl (59kB)
     |████████████████████████████████| 61kB 2.9MB/s
Collecting sortedcontainers<2.2.0,>=2.1.0 (from SudachiPy)
  Downloading https://files.pythonhosted.org/packages/13/f3/cf85f7c3a2dbd1a515d51e1f1676d971abe41bba6f4ab5443240d9a78e5b/sortedcontainers-2.1.0-py2.py3-none-any.whl
Installing collected packages: sortedcontainers, SudachiPy
  Found existing installation: sortedcontainers 1.5.9
    Uninstalling sortedcontainers-1.5.9:
      Successfully uninstalled sortedcontainers-1.5.9
Successfully installed SudachiPy-0.3.4 sortedcontainers-2.1.0

ってことでインストールできました。

続いて、Sudachiのシステム辞書をインストールします。

pip3 install https://object-storage.tyo2.conoha.io/v1/nc_2520839e1f9641b08211a5c85243124a/sudachi/SudachiDict_core-20190531.tar.gz

システム辞書のfullをインストールする場合はこちらからダウンロードしてください。

github.com

これで準備完了です。

早速標準入力から使ってみます。

sudachi $sudachipy
すももももももももものうち
すもも   名詞,普通名詞,一般,*,*,*    李
も 助詞,係助詞,*,*,*,*    も
も 助詞,係助詞,*,*,*,*    も
もも  名詞,普通名詞,一般,*,*,*    もも
も 助詞,係助詞,*,*,*,*    も
もも  名詞,普通名詞,一般,*,*,*    もも
の 助詞,格助詞,*,*,*,*    の
うち  名詞,普通名詞,副詞可能,*,*,*  内
EOS

ちゃんと動いているみたいですね。

Readmeを読み進めていくと、どうやらSudachipyには4つのコマンドがあるようで、

  1. 形態素解析(tokenize)
  2. 辞書へのリンク設定(link)
  3. Sudachiの辞書のビルド(build)
  4. ユーザー辞書のビルド(ubuild)

のようになっているようですね。

ユーザー辞書

さてさて、ユーザー辞書です。

https://github.com/WorksApplications/SudachiPy#customized-dictionary

手順としては、

  1. ユーザー辞書を作成
  2. ユーザー辞書をビルド
  3. sudachi.jsonにユーザー辞書を指定

という感じのようです。

ユーザー辞書を作成

こちらの記事を参考にする感じでは、csvフォーマットでユーザー辞書を記述してあげるようです。

developer-collaboration.com

gist.github.com

ユーザー辞書をビルド

そんでもってこれをビルドしてあげます。

sudachipy ubuild -s /path/to/your/system.dic user_dict.txt

今回はこんな感じになりました。

reading the source file...1 words
writing the POS table...2 bytes
writing the connection matrix...4 bytes
building the trie...done
writing the trie...1028 bytes
writing the word-ID table...9 bytes
writing the word parameters...10 bytes
writing the word_infos...53 bytes
writing word_info offsets...4 bytes

するとuser.dicというビルド済みのユーザー辞書が生成されます。

sudachi.jsonにユーザー辞書を指定

最後に設定ファイルであるsudachi.jsonを書いてあげる必要があるようです。

github.com

今回はデフォルトのsudachi.json自体をいじっちゃいます。

3行目みたいな感じで、リスト形式でユーザー辞書のパスを指定してあげます。

使ってみる

やってみるとこんな感じです。

Before

sudachi $sudachipy
きゃりーぱみゅぱみゅ
き 助動詞,*,*,*,文語助動詞-キ,終止形-一般    き
ゃ 記号,一般,*,*,*,*   ヤ
り 助動詞,*,*,*,文語助動詞-リ,終止形-一般    り
ー 補助記号,一般,*,*,*,* ー
ぱ 副詞,*,*,*,*,*    ぱっ
み 接頭辞,*,*,*,*,* み
ゅ 記号,一般,*,*,*,*   ユ
ぱ 副詞,*,*,*,*,*    ぱっ
み 接頭辞,*,*,*,*,* み
ゅ 記号,一般,*,*,*,*   ユ
EOS

After

sudachi $sudachipy
きゃりーぱみゅぱみゅ
きゃりーぱみゅぱみゅ  名詞,固有名詞,一般,*,*,*    きゃりーぱみゅぱみゅ
EOS

ちゃんと変わってますね。

Dockerを使ってやってみる

上はMacbookでやったものなんで、もうちょっと汎用的にしてみます。

Dockerfile

みんな大好きDockerで環境を作っていこうかと。

gist.github.com

※Flaskは後でマイクロサービス化しようとしたので、その関係で入っています。

そんでもってsudachi.jsonにユーザー辞書の記述を加えてやります。 上の環境だとこちらにインストールされていました。

/usr/local/lib/python3.6/dist-packages/sudachipy/resources/sudachi.json

なので、こちらのファイルを書き直すとうまくいきます。

形態素解析

さて、お待ちかねのsudachiの登場です。

といっても、ここまでくれば上とほとんど変わりません。

これを動かすとこんな感じです。

src $docker exec -it fd2d3e31a41d python3 src/sudachi.py
['きゃりーぱみゅぱみゅ']
['吾輩', 'は', '猫', 'だ', 'ある', '。', '名前', 'は', 'まだ', 'ない', '。']

きゃりーぱみゅぱみゅが1語として扱われているので、ユーザー辞書が効いていることがわかります。 普通に単語の正規化もできていますね。

感想

とりあえず、ユーザー辞書が使えることは確認しました。 これで他の形態素解析器とおんなじ感じで使えそうです。