GiNZA で形態素解析やってみた（インストールで少しだけハマった）

突如形態素解析をしてみたくなりました。  
以前 MeCab をやったことがありますが、いまは GiNZA だというのでやってみました。

下記の WSL 環境です。

```
$ cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.3 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.3 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
```

Python 3.8 です。

```
$ python3 --version
Python 3.8.10
```

## ginza のインストール

Google 先生に聞いて公式サイトを探索。

https://megagonlabs.github.io/ginza/

そして、説明書通りにインストールですが、その前に [venv](https://docs.python.org/ja/3/library/venv.html) 環境を作ります。
（pipenv をよく使うのですが、今は venv が公式だということで、今回は venv にしてみました）

https://docs.python.org/ja/3/library/venv.html

```
$ mkdir ginza-trial
$ cd ginza-trial
$ python3 -m venv .venv
$ source .venv/bin/activate
```

そして ginza を公式の説明通りにインストールします。  
公式サイトの「実行環境」のセクションです。


初めてなので何もインストールしていないハズですが、一応アンインストールから行います。

```
$ pip uninstall ginza ja_ginza_electra
$ pip uninstall ja_ginza
$ pip uninstall ja_ginza_electra
```

そして、インストールです。

```
$ pip install -U ginza ja_ginza_electra
```

やったぜ、実行だ！

```
$ ginza

Traceback (most recent call last):
  ...（長い長いトレースバック）...
ImportError: tokenizers>=0.10.1,<0.11 is required for a normal functioning of this module, but found tokenizers==0.12.1.
Try: pip install transformers -U or pip install -e '.[dev]' if you're working with git master
```

:astonished: :exclamation: :exclamation:

## tokenizer のバージョン修正

今回、tokenizer 0.12.5 がインストールされたのですが、次のような状態です。
* ginza が依存する transformers は、 tokenizers>=0.10.1,<0.11 を要求します。
* ginza が依存する sudachitra は、 tokenizers>=0.10.3 を要求します。

そこで、 tokenizers 0.10.3 をインストールすることにしました。

```
$ pip install tokenizers==0.10.3
```

ginza を実行だ！  
説明にある通り、初回実行のため Tarnsformers のモデルのダウンロードが始まりました。
成功です！！

ダウンロードの完了を待ちます。  
400MB以上あり、数分かかりました。

```
$ ginza
Cannot find the requested files in the cached path and outgoing traffic has been disabled. To enable model look-ups and downloads online, set 'local_files_only' to False.
trying to download model from huggingface hub: megagonlabs/transformers-ud-japanese-electra-base-ginza-510 ...
Downloading: 100%|██████████████████████████████████████████████████████████████████████| 815/815 [00:00<00:00, 271kB/s]
Downloading: 100%|███████████████████████████████████████████████████████████████████| 414M/414M [02:25<00:00, 2.98MB/s]
succeded
```

むむ、succeded のあと、プロンプトに戻らない・・・。  
:astonished: :exclamation: :exclamation:

## インタラクティブモードだからです

問題ではありません。  
引数なしで ginza を実行したので、標準入力からの入力待ちになっていただけでした。

ので、そのまま形態素解析したい文章を打ってみます。

```
銀座でランチをご一緒しましょう。
```

ドキドッ :exclamation: ドキドキする間もなく、一瞬で結果が出力されました。

```
/home/munehiro/trials/ginza/.venv/lib/python3.8/site-packages/torch/amp/autocast_mode.py:198: UserWarning: User provided device_type of 'cuda', but CUDA is not available. Disabling
  warnings.warn('User provided device_type of \'cuda\', but CUDA is not available. Disabling')
# text = 銀座でランチをご一緒しましょう。
1       銀座    銀座    PROPN   名詞-固有名詞-地名-一般 _       6       obl     _       SpaceAfter=No|BunsetuBILabel=B|BunsetuPositionType=SEM_HEAD|NP_B|Reading=ギンザ|NE=B-GPE|ENE=B-City
2       で      で      ADP     助詞-格助詞     _       1       case    _       SpaceAfter=No|BunsetuBILabel=I|BunsetuPositionType=SYN_HEAD|Reading=デ
3       ランチ  ランチ  NOUN    名詞-普通名詞-一般      _       6       obj     _       SpaceAfter=No|BunsetuBILabel=B|BunsetuPositionType=SEM_HEAD|NP_B|Reading=ランチ
4       を      を      ADP     助詞-格助詞     _       3       case    _       SpaceAfter=No|BunsetuBILabel=I|BunsetuPositionType=SYN_HEAD|Reading=ヲ
5       ご      ご      NOUN    接頭辞  _       6       compound        _       SpaceAfter=No|BunsetuBILabel=B|BunsetuPositionType=CONT|Reading=ゴ
6       一緒    一緒    VERB    名詞-普通名詞-サ変可能  _       0       root    _       SpaceAfter=No|BunsetuBILabel=I|BunsetuPositionType=ROOT|Reading=イッショ
7       し      する    AUX     動詞-非自立可能 _       6       aux     _       SpaceAfter=No|BunsetuBILabel=I|BunsetuPositionType=SYN_HEAD|Inf=サ行変格,連用形-一般|Reading=シ
8       ましょう        ます    AUX     助動詞  _       6       aux     _       SpaceAfter=No|BunsetuBILabel=I|BunsetuPositionType=SYN_HEAD|Inf=助動詞-マス,意志推量形|Reading=マショウ
9       。      。      PUNCT   補助記号-句点   _       6       punct   _       SpaceAfter=No|BunsetuBILabel=I|BunsetuPositionType=CONT|Reading=。
```

公式説明通りの結果がでました！  
「CUDA 持ってないな、お前」という警告が出ていますが、事実なので気にしないことにします。

他の文章もやってみましょう。

```
メロスは激怒した
# text = メロスは激怒した
1       メロス  メロス  NOUN    名詞-普通名詞-一般      _       3       nsubj   _       SpaceAfter=No|BunsetuBILabel=B|BunsetuPositionType=SEM_HEAD|NP_B|Reading=メロス
2       は      は      ADP     助詞-係助詞     _       1       case    _       SpaceAfter=No|BunsetuBILabel=I|BunsetuPositionType=SYN_HEAD|Reading=ハ
3       激怒    激怒    VERB    名詞-普通名詞-サ変可能  _       0       root    _       SpaceAfter=No|BunsetuBILabel=B|BunsetuPositionType=ROOT|Reading=ゲキド
4       し      する    AUX     動詞-非自立可能 _       3       aux     _       SpaceAfter=No|BunsetuBILabel=I|BunsetuPositionType=SYN_HEAD|Inf=サ行変格,連用形-一般|Reading=シ
5       た      た      AUX     助動詞  _       3       aux     _       SpaceAfter=No|BunsetuBILabel=I|BunsetuPositionType=SYN_HEAD|Inf=助動詞-タ,終止形-一般|Reading=タ
```

```
型をしっかり覚えた後に、型破りになれる。
# text = 型をしっかり覚えた後に、型破りになれる。
1       型      型      NOUN    名詞-普通名詞-一般      _       4       obj     _       SpaceAfter=No|BunsetuBILabel=B|BunsetuPositionType=SEM_HEAD|NP_B|Reading=カタ
2       を      を      ADP     助詞-格助詞     _       1       case    _       SpaceAfter=No|BunsetuBILabel=I|BunsetuPositionType=SYN_HEAD|Reading=ヲ
3       しっかり        しっかり        ADV     副詞    _       4       advmod  _       SpaceAfter=No|BunsetuBILabel=B|BunsetuPositionType=SEM_HEAD|Reading=シッカリ
4       覚え    覚える  VERB    動詞-一般       _       6       acl     _       SpaceAfter=No|BunsetuBILabel=B|BunsetuPositionType=SEM_HEAD|Inf=下一段-ア行,連用形-一般|Reading=オボエ
5       た      た      AUX     助動詞  _       4       aux     _       SpaceAfter=No|BunsetuBILabel=I|BunsetuPositionType=SYN_HEAD|Inf=助動詞-タ,連体形-一般|Reading=タ
6       後      後      NOUN    名詞-普通名詞-副詞可能  _       11      obl     _       SpaceAfter=No|BunsetuBILabel=B|BunsetuPositionType=SEM_HEAD|NP_B|Reading=アト
7       に      に      ADP     助詞-格助詞     _       6       case    _       SpaceAfter=No|BunsetuBILabel=I|BunsetuPositionType=SYN_HEAD|Reading=ニ
8       、      、      PUNCT   補助記号-読点   _       6       punct   _       SpaceAfter=No|BunsetuBILabel=I|BunsetuPositionType=CONT|Reading=、
9       型破り  型破り  ADJ     形状詞-一般     _       11      advcl   _       SpaceAfter=No|BunsetuBILabel=B|BunsetuPositionType=SEM_HEAD|Reading=カタヤブリ
10      に      だ      AUX     助動詞  _       9       aux     _       SpaceAfter=No|BunsetuBILabel=I|BunsetuPositionType=SYN_HEAD|Inf=助動詞-ダ,連用形-ニ|Reading=ニ
11      なれる  なれる  VERB    動詞-非自立可能 _       0       root    _       SpaceAfter=No|BunsetuBILabel=B|BunsetuPositionType=ROOT|Inf=下一段-ラ行,終止形-一般|Reading=ナレル
12      。      。      PUNCT   補助記号-句点   _       11      punct   _       SpaceAfter=No|BunsetuBILabel=I|BunsetuPositionType=CONT|Reading=。
```
（http://www.hoku-iryo-u.ac.jp/~amefuto/maximum%20the%20maxim/effort1.html No.4 - A - 11 中村 勘九郎（歌舞伎役者））

いい感じです！

形態素解析を楽しみたいと思います。