chiTra-1.1 モデルの学習詳細

# この記事について

2023/03 にワークス徳島人工知能 NLP 研究所から BERT モデル [chiTra-1.1](https://github.com/WorksApplications/SudachiTra#%E4%BA%8B%E5%89%8D%E5%AD%A6%E7%BF%92%E6%B8%88%E3%81%BF%E3%83%A2%E3%83%87%E3%83%AB--pretrained-model) が公開されました。

chiTra-1.0 からアーキテクチャはそのままに細かい改善を追加し、各種タスクで性能の向上を確認しています。またライセンスや利用手順にも変更はなく、バージョンのみの変更で v1.0 と同様に使うことができます。

v1.0/v1.1 の差分については同レポジトリの CHANGELOG にも記載がありますが、本記事ではもうすこし踏み込んで解説してみたいと思います。

# モデル学習での差分

## コーパス

chiTra-1.\* モデルの学習には、国立国語研から提供いただいている国語研日本語ウェブコーパス (NINJAL Web Japanese Corpus, NWJC)[^1] が使用されています。テキスト分量にして 109GB 超のサイズのウェブコーパスです。

言語モデルの学習においては、事前学習用コーパスに対してクリーニングを行うことで性能が向上することが知られています。v1.0 では東北大 BERT の学習[^3] や C4 の作成[^2] で用いられたものを参考にしてNWJCのクリーニングを行っていました。

v1.1 では、さらに処理を追加するとともに、学習コーパスの再構成を行いました。
大きな更新点は以下の３つです。

### テキストデータの再構築

NWJC はウェブクローリングで取得されているため大本のデータは Web Archive (WARC) 形式で保持されています。これを元にすることで、URL や HTML などテキスト以外のメタデータも利用することができます。

v1.0 ではテキストのみ抽出して提供いただいたデータを用いていましたが、v1.1 では WARC データからのテキスト抽出についても再度処理を行いました。この際メタデータとして HTML タグの情報から段落の分割位置を取得し、後段のクリーニングに利用しています。

### 定型文の除去

v1.0 学習の際には学習曲線が粗く、コーパス内容にノイズが残っているのではという予想があり、追加の定性調査を行いました。この際特に多く見受けられた、機械的に挿入されたと思われる定型文について削除を追加しています。具体的な削除対象はブログサイト関連の文言が主であり、これは NWJC のウェブコーパスという特徴や収集時期の影響によるものと推測しています。

### 重複削除

v1.0 のクリーニング処理は文や文書の単位でノイズとなるものを削除するようなものが主でした。
より視野の広い処理として、コーパス全体で重複するセグメントを除去することで性能向上との論文[^4] があり、v1.1 ではこれを参考に以下の二つの処理を追加しました。

- コーパス全体で重複している段落の削除
- MinHash を利用した類似文書の削除

ここで前者の段落分割に WARC データから取得した情報を利用しています。

## 学習パラメータ

chiTra-1.\* はアーキテクチャとして BERT を採用しています。v1.1 でも事前学習のタスク（NSP/MLM）やバッチサイズなどのパラメータについては基本的に v1.0 と同じで、学習全体のステップ数のみ倍の `20472` としています。

これは学習時の精度変化を見ての調整です。
上記のコーパス処理の影響か、学習曲線は v1.0 より滑らかに推移するようになったものの、精度向上の速度は低下することが確認されました。このため v1.0 と同等の事前学習精度を得られるよう学習ステップ数を追加しています。

## Sudachi の更新

### Sudachi 辞書

chiTra はトークナイザに形態素解析器 Sudachi を使用しています。Sudachi 辞書は定期的に更新が行われているため、chiTra モデル学習の際はその時点で最新の辞書を使用しています。v1.1 での使用辞書は core 辞書、バージョンは `20220729` です。

なお chiTra モデルの使用に際しては、必ずしも Sudachi 辞書のバージョンを学習時のものに合わせなくとも問題なく動作します。ただし、更新で追加された語などではトークナイズ結果が変化しうるので、再現性等を考慮する際には注意が必要です。

### chiTra 正規化

chiTra では Sudachi 辞書データを利用した語の正規化をトークナイザレベルで行っています。これにより入力テキストにおける「すだち / 酢橘」といった表記揺れに対する頑健性を得ています。

ここでどの程度の正規化を行うかの選択が必要になりますが、v1.0 では活用語以外について正規化を行う`normalized_and_surface` を採用していました。これについて、接尾辞部分が活用するケースを正規化してしまっているとの指摘があり[^5]、v1.1 ではこれに対応した `normalized_nouns` を採用しています。

# 評価タスク

## chiTra-1.0 との比較

性能の変化を見るため、chiTra-1.0 の評価[^6] で利用した 3 タスクで評価を行っています。
詳細については [chiTra/evaluation のページ](https://github.com/WorksApplications/SudachiTra/tree/main/evaluation)を参照してください。

精度は以下になります。

|           | MARC/Amazon | KUCI  | RCQA  |
| --------- | ----------- | ----- | ----- |
|           | acc         | acc   | F1    |
| chiTa-1.0 | 0.603       | 0.803 | 0.719 |
| chiTa-1.1 | 0.604       | 0.852 | 0.739 |

MARC での変化はわずかですが、KUCI/RCQA ではそれぞれ 5/2 ポイントの向上が見られました。

## JGLUE

v1.1 では上記に追加して、2022/10 に公開された日本語タスクセット [JGLUE](https://github.com/yahoojapan/JGLUE) での評価を行いました。
こちらも詳細は [chiTra/evaluation/jglue のページ](https://github.com/WorksApplications/SudachiTra/tree/main/evaluation/jglue)を参照してください。

精度は以下になります。

|            | MARC-ja | JSTS             | JNLI  | JSQuAD      | JCommonsenseQA |
| ---------- | ------- | ---------------- | ----- | ----------- | -------------- |
|            | acc     | Pearson/Spearman | acc   | EM/F1       | acc            |
| chiTra-1.0 | 0.956   | 0.903/0.861      | 0.882 | 0.839/0.919 | 0.788          |
| chiTra-1.1 | 0.960   | 0.916/0.876      | 0.900 | 0.860/0.937 | 0.840          |

こちらでも総じて v1.1 が v1.0 より高い性能を達成しています。
ここでは省略しましたが、chiTra-1.1 は他の同規模の日本語言語モデルと比較しても同レベルの性能を達成しています。

付記として、chiTra モデルはその語彙正規化機能の影響で、モデル出力から復元したテキストも正規化後の状態となるため、QA タスクにおいて出力が一致しなくなるケースがあります（例：「桜の旧字体は？」への解答「櫻」を「桜」へ正規化してしまう）。

# 終わりに

chiTra-1.1 モデル学習の詳細と性能の変化について記述しました。性能は総じて chiTra-1.0 から改善しており、これから chiTra モデルを触る方はぜひ v1.1 を使ってみてください。既に使われている方もモデルを更新してみていただければと思います。質問などあれば[Slack ワークスペース](https://github.com/WorksApplications/SudachiTra#%E9%80%A3%E7%B5%A1%E5%85%88--contact-us)にご連絡ください。

GPT4 が発表され NLP の世界にも大きな変化が訪れようとしていますが、有用な日本語モデルを提供できるよう引き続き更新を行っていきます。

[^1]: [国語研日本語ウェブコーパス](https://masayu-a.github.io/NWJC/)
[^2]: [cl-tohoku/bert-japanese](https://github.com/cl-tohoku/bert-japanese)
[^3]: [Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer](https://arxiv.org/abs/1910.10683), section 2.2
[^4]: [Deduplicating Training Data Makes Language Models Better](https://arxiv.org/abs/2107.06499)
[^5]: [`normalized_nouns` 関連プルリクエスト](https://github.com/WorksApplications/SudachiTra/pull/48)
[^6]: [NLP2022/PT1-6 単語正規化による表記ゆれに頑健な BERT モデルの構築](<https://www.anlp.jp/proceedings/annual_meeting/2022/#:~:text=%E7%A7%8B%20(%E9%A6%99%E5%B7%9D%E5%A4%A7)-,PT1%2D6,-%E5%8D%98%E8%AA%9E%E6%AD%A3%E8%A6%8F%E5%8C%96>)