単語分散表現 chiVe の活用方法 Part 1

**chiVeの活用方法シリーズ**
* Part 1 「分散表現とは？chiVeとは？」（本記事）
* [Part 2 「chiVeでできること（単語ベクトルの性質）」](https://qiita.com/nishihara_d/items/d2973558ec1ee2c69555)
* [Part 3 「chiVeでできること（単語ベクトルで文書分類）」](https://qiita.com/nishihara_d/items/9e3967ad37780d93c7ac)
* [Part 4 「chiVeの追加学習」](https://qiita.com/nishihara_d/items/c2d43ec98242afe0d7b4)


## はじめに

2022年4月末に、[WAP NLP Tech Talk#5](https://worksapplications.connpass.com/event/244032/) にて、「単語分散表現 chiVeの活用方法」というタイトルでお話しをしました。
本記事は、この内容のQiita版です。スライドの内容を、補足しながら4回に分けて紹介します。

https://speakerdeck.com/waptech/dan-yu-fen-san-biao-xian-chivefalsehuo-yong-fang-fa-at-wap-nlp-tech-talk-number-5

[chiVe](https://github.com/WorksApplications/chiVe)（チャイブ）とは、日本語単語分散表現です。
この記事では、chiVeの使い方について説明します。
chiVeの研究的な側面は、[WAP NLP Tech Talk #1](https://worksapplications.connpass.com/event/196402/) でも紹介しています。


## 分散表現とは？chiVeとは？

単語分散表現とは、単語を数値列（ベクトル）に変換したものでした。（[過去の記事](https://qiita.com/masakuri/items/014d75386bf5f02bbc6d)も参考にしてください）
一言で言うと、単語分散表現は、学習コーパスを使い周辺の単語からベクトルを推定して作ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2513839/3e3e4f01-2b9a-a127-a589-ac8ca27feba4.png)

良質な分散表現を得るためには、学習コーパスの適切な選択が重要です。
コーパスの量が少ないと、得られる周辺の単語が少なくなってしまいます。
また、コーパスのドメイン（分野）も考慮しなくてはいけません。例えば、学習コーパスとして新聞記事を使った場合、政治用語の分散表現は良質かもしれませんが、ビジネス文書の用語は上手く扱えないかもしれません。

日本語分散表現としては、[nwjc2vec](https://github.com/masayu-a/NWJC/blob/master/NWJC2vec/00README.md)、[hottoSNS-w2v](https://github.com/hottolink/hottoSNS-w2v)、[朝日新聞単語ベクトル](https://cl.asahi.com/api_data/wordembedding.html)、[HR領域向け単語ベクトル](https://www.bizreach.co.jp/technology/research/word2vec/)、[Wikipedia2Vec](https://wikipedia2vec.github.io/wikipedia2vec/) など様々なものがありますが、学習コーパスの**ドメインに偏りが無く**かつ**商用利用可能な**分散表現は少ないことが分かります。


## chiVeの特長

chiVeの特長は主に次の３点です。
* 日本語形態素解析器 [Sudachi](https://github.com/WorksApplications/Sudachi) により、chiVeは**複数粒度の単語分割**や表記正規化による**表記ゆれの吸収**ができています。
* 日本語大規模コーパス NWJC により、chiVeは**大規模な語彙数**と**高い品質**を確保できています。
* chiVeは、**商用利用可能な**ライセンス Apache 2.0 のもと [GitHub で公開](https://github.com/WorksApplications/chiVe)されています。


## どの chiVe を使えばよいのか？

chiVeは、いくつかのサイズが公開されています。どれを使えば良いでしょうか？

:::note
**①語彙数** と **②計算リソース** を見て決めてください。
:::

| |語彙数|gensim版|Magnitude版|
|:----|:----|:----|:----|
|v1.2 mc5|3,197,456|3.8 GB|5.5 GB|
|v1.2 mc15|1,454,280|1.7 GB|2.4 GB|
|v1.2 mc30|912,550|1.1 GB|1.5 GB|
|v1.2 mc90|482,223|0.6 GB|0.8 GB|


### ①語彙数：語彙数によって扱える単語が違う

chiVeは、サイズが大きいほど、あまり使われない単語も収録されるようになっています。
各版に登録されている単語の一例を図に表しました。

<img width="512" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2513839/067a8453-fa25-5555-be77-87e528a2219a.png">

例えば、「水先法」は最もサイズが大きな `v1.2 mc5` のみに登録されています。

> **水先法**
> 水先法（みずさきほう、昭和24年5月30日法律第121号）は、水先をすることができる者の資格を定め、及び水先業務の適正かつ円滑な遂行を確保することにより、船舶交通の安全を図り、あわせて船舶の運航能率の増進に資することを目的とする日本の法律。
> https://ja.wikipedia.org/wiki/%E6%B0%B4%E5%85%88%E6%B3%95

続いて、
*  `v1.2 mc15` には「労働者派遣事業の適正な運営の確保及び派遣労働者の保護等に関する法律」（※「労働者派遣法」の正式名称）
* `v1.2 mc30` には「雇用の分野における男女の均等な機会及び待遇の確保等に関する法律」（※「男女雇用機会均等法」の正式名称）
* `v1.2 mc5` には「男女雇用機会均等法」や「労働者派遣法」

が登録されています。

このように、よく使われる単語は小さいサイズのchiVeでも収録されていますが、正式な法律名などを一単語として扱いたい場合には、大きなサイズの版を使います。

:::note
chiVeに収録されている単語の粒度（長さ）は、Sudachi の分割粒度に依存しています。
:::
<details>
<summary>Sudachi による分割粒度の違いの例</summary>
<ul>
<li>C単位：雇用の分野における男女の均等な機会及び待遇の確保等に関する法律</li>
<li>A単位：雇用/の/分野/に/おけ/る/男女/の/均等/な/機会/及び/待遇/の/確保/等/に/関する/法律</li>
</ul>
</details>


### ②計算リソース：大きいモデルは重い

大きいサイズであるほど、chiVeを置いておく保存領域が必要になったり、ロードにかかる時間が長くなったりします。

<img width="320" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2513839/b238f773-705d-122a-ffb9-27008f04dcb2.png">

## mc (Min Count) とは

chiVeの版の名前に登場する mc (Min Count) とは、「学習コーパス中の最低出現頻度」のことを指しています。
例えば「mc5」とは、学習コーパスで5回以上出現した単語だけを収録しているという意味です。
mcが小さいほど、語彙数が大きくなります。

### 注意点
:::note warn
出現頻度が低い単語は、良質なベクトルを作りにくいです。
:::
これは、chiVeに限った話ではなく、単語分散表現の原理上の課題です。
主な理由は、少ない学習データでは上手く学習できない場合があるからです。
記事冒頭でも触れたように、単語分散表現は、学習コーパスを使い周辺の単語からベクトルを推定して作ります。出現頻度が低い単語は、学習コーパスでの出現回数が少ない分、得られる周辺単語も少なくなってしまいます。

専門用語（一般の文書には現れないが、特定の文書でよく現れる単語）が多く出てくる文書でchiVeを使いたい場合には、専門用語を一単語として扱うためだけに、mcをむやみに下げるのはあまりお勧めしません。

:::note
専門用語は、ドメイン適応と呼ばれる追加学習を行うと良いです（次回以降の記事）
:::