単語分散表現のためのダウンローダを作りました

単語の分散表現は現在の自然言語処理で当たり前のように使われています。最近は学習済みのモデルが数多く公開されており、自分で時間とお金をかけて学習させる必要性が少なくなってきました。しかし、公開されているとはいえ自分で探してきてダウンロードするのはなかなか手間がかかります。

この手間をなくすために単語分散表現のダウンローダを作ってみました。名前は **[chakin](https://github.com/chakki-works/chakin)** です。
[chakki-works/chakin](https://github.com/chakki-works/chakin)
<img src="https://qiita-image-store.s3.amazonaws.com/0/77079/39b35c32-a893-98ae-30ae-efece5ee6b23.jpeg" width="300">
(スターつけていただけるとやる気がでますm(＿＿)m)

chakinの特徴としては、Pythonで書かれておりpipでインストールできる、検索からダウンロードまでワンストップでできる、23のベクトルをサポートしている(2017/5/29時点)と言ったことが挙げられます。サポートするベクトルについては今後増やしていく予定です。

では使い方をご紹介します。

# chakinの使い方
インストールは簡単です。pip を使って以下のコマンドを叩きます:

```shell-session
$ pip install chakin
```

インストールが終わると使用できます。データセットのダウンロードのためには3行のコードを書く必要があります。今回は試しに日本語の分散表現のデータセットをダウンロードしてみましょう。まずは Python を立ち上げます:

```shell-session
$ python
```

Pythonを立ち上げたらインストールした [chakin](https://github.com/chakki-works/chakin) をインポートします。インポートした後、searchメソッドに言語(今回の場合Japanese)を指定することで事前学習済みのモデルを検索することができます:

```py3
>>> import chakin
>>> chakin.search(lang='Japanese')
                         Name  Dimension     Corpus VocabularySize               Method  Language
6                fastText(ja)        300  Wikipedia           580K             fastText  Japanese
22  word2vec.Wiki-NEologd.50d         50  Wikipedia           335K   word2vec + NEologd  Japanese
```

現在は対象言語のみの検索に対応しています。この辺は今後使い勝手をよくしていきたいところの一つです。

ダウンロードしたいデータセットを見つけたら、そのインデックスをdownloadメソッドに指定してダウンロードします。今回は「word2vec.Wiki-NEologd.50d」のインデックスである **22** を指定しました:

```py3
>>> chakin.download(number=22, save_dir='./')
Test: 100% ||               | Time: 0:00:02  60.7 MiB/s
'./latest-ja-word2vec-gensim-model.zip'
```
使い方は以上です。


# サポートしているベクトル
現在は以下に挙げるベクトルをサポートしています。今後対応するベクトルもどんどん追加していくので、ぜひ使ってみてください。

| Name                | Dimension | Corpus                    | VocabularySize | Method   | Language   |
|---------------------|-----------|---------------------------|----------------|----------|------------|
| fastText(ar)        | 300       | Wikipedia                 | 610K           | fastText | Arabic     |
| fastText(de)        | 300       | Wikipedia                 | 2.3M           | fastText | German     |
| fastText(en)        | 300       | Wikipedia                 | 2.5M           | fastText | English    |
| fastText(es)        | 300       | Wikipedia                 | 985K           | fastText | Spanish    |
| fastText(fr)        | 300       | Wikipedia                 | 1.2M           | fastText | French     |
| fastText(it)        | 300       | Wikipedia                 | 871K           | fastText | Italian    |
| fastText(ja)        | 300       | Wikipedia                 | 580K           | fastText | Japanese   |
| fastText(ko)        | 300       | Wikipedia                 | 880K           | fastText | Korean     |
| fastText(pt)        | 300       | Wikipedia                 | 592K           | fastText | Portuguese |
| fastText(ru)        | 300       | Wikipedia                 | 1.9M           | fastText | Russian    |
| fastText(zh)        | 300       | Wikipedia                 | 330K           | fastText | Chinese    |
| GloVe.6B.50d        | 50        | Wikipedia+Gigaword 5 (6B) | 400K           | GloVe    | English    |
| GloVe.6B.100d       | 100       | Wikipedia+Gigaword 5 (6B) | 400K           | GloVe    | English    |
| GloVe.6B.200d       | 200       | Wikipedia+Gigaword 5 (6B) | 400K           | GloVe    | English    |
| GloVe.6B.300d       | 300       | Wikipedia+Gigaword 5 (6B) | 400K           | GloVe    | English    |
| GloVe.42B.300d      | 300       | Common Crawl(42B)         | 1.9M           | GloVe    | English    |
| GloVe.840B.300d     | 300       | Common Crawl(840B)        | 2.2M           | GloVe    | English    |
| GloVe.Twitter.25d   | 25        | Twitter(27B)              | 1.2M           | GloVe    | English    |
| GloVe.Twitter.50d   | 50        | Twitter(27B)              | 1.2M           | GloVe    | English    |
| GloVe.Twitter.100d  | 100       | Twitter(27B)              | 1.2M           | GloVe    | English    |
| GloVe.Twitter.200d  | 200       | Twitter(27B)              | 1.2M           | GloVe    | English    |
| word2vec.GoogleNews | 300       | Google News(100B)         | 3.0M           | word2vec | English    |
| word2vec.Wiki-NEologd.50d | 50  | Wikipedia                 | 335K           | word2vec + NEologd | Japanese |

# おわりに
事前学習済みの単語の分散表現は自然言語処理でよく使われており重要です。しかし、それらを自分で探してくるのは意外と手間です。本記事ではその手間を解消するために作ったダウンローダを紹介しました。この記事が皆様のお役に立てば幸いです。

私のTwitterアカウントでも機械学習や自然言語処理に関する情報をつぶやいています。
[@Hironsan](https://twitter.com/Hironsan13)

この分野にご興味のある方のフォローをお待ちしています。