Delete readme2.md
Browse files- readme2.md +0 -175
readme2.md
DELETED
|
@@ -1,175 +0,0 @@
|
|
| 1 |
-
# Mecari (Japanese Morphological Analysis with Graph Neural Networks)
|
| 2 |
-
- Demo: https://huggingface.co/spaces/zbller/Mecari
|
| 3 |
-
|
| 4 |
-
## 概要
|
| 5 |
-
Mecari は、Googleの発表 [1] に着想を得た GNN(Graph Neural Network)ベースの日本語形態素解析器です。MeCab(JUMANDIC)の候補からグラフを構築し、部分アノテーション('+'/'-'、'?'は学習で無視)で学習可能、学習・推論の高速化を重視しています。ノードには JUMAN++ 風のユニグラム特徴量、エッジは無向(双方向)として扱い、GATv2 [2] を学習します。推論ではノードスコアに基づき Viterbi で非重複の最適経路を探索します。
|
| 6 |
-
|
| 7 |
-
## 結果(KWDLC)
|
| 8 |
-
- 学習済み(`sample_model`): Seg F1 0.9725, POS F1 0.9562
|
| 9 |
-
- MeCab(JUMANDIC): Seg F1 0.9677, POS F1 0.9465
|
| 10 |
-
|
| 11 |
-
再現メモ
|
| 12 |
-
- データ: 公式 KWDLC の `dev.id`/`test.id` 分割を使用
|
| 13 |
-
- コンフィグ: `configs/gatv2.yaml`(`extends: base.yaml`)
|
| 14 |
-
|
| 15 |
-
## 動作環境
|
| 16 |
-
- OS: Ubuntu 24.04.3 LTS(確認済)
|
| 17 |
-
- Python: 3.11.3(`>=3.11,<3.12`)
|
| 18 |
-
- PyTorch: 2.2.2+cu121(CPU でも可)
|
| 19 |
-
- CUDA ランタイム: 12.1(GPU 使用時)
|
| 20 |
-
- MeCab: 0.996、JUMANDIC: `/var/lib/mecab/dic/juman-utf8`
|
| 21 |
-
- 備考: Mac/Windows は未検証。PyTorch Geometric のホイール互換に注意
|
| 22 |
-
|
| 23 |
-
## MeCab のセットアップ(Ubuntu 24.04)
|
| 24 |
-
1) インストール(JUMANDIC 同梱)
|
| 25 |
-
```bash
|
| 26 |
-
sudo apt update
|
| 27 |
-
sudo apt install -y mecab mecab-utils libmecab-dev mecab-jumandic-utf8
|
| 28 |
-
```
|
| 29 |
-
2) 確認
|
| 30 |
-
```bash
|
| 31 |
-
mecab -v # 例: 0.996
|
| 32 |
-
[ -d /var/lib/mecab/dic/juman-utf8 ] && echo "JUMANDIC OK"
|
| 33 |
-
```
|
| 34 |
-
ヒント
|
| 35 |
-
- MeCab バイナリは `MECAB_BIN` で上書き可(例: `MECAB_BIN=/usr/local/bin/mecab`)。
|
| 36 |
-
- JUMANDIC のパスは前処理(`preprocess.py`)で `--jumandic-path` を指定可能。
|
| 37 |
-
- `infer.py`/`evaluate.py` はデフォルトで `/var/lib/mecab/dic/juman-utf8` を参照します。
|
| 38 |
-
|
| 39 |
-
## プロジェクトセットアップ
|
| 40 |
-
選択肢 A: uv を使用(推奨)
|
| 41 |
-
```bash
|
| 42 |
-
# uv インストール(未導入の場合)
|
| 43 |
-
curl -LsSf https://astral.sh/uv/install.sh | sh
|
| 44 |
-
|
| 45 |
-
# 仮想環境作成と依存解決
|
| 46 |
-
uv venv
|
| 47 |
-
source .venv/bin/activate
|
| 48 |
-
uv sync
|
| 49 |
-
```
|
| 50 |
-
`pyproject.toml` の `[tool.uv.find-links]` で PyG の CUDA 12.1 対応ホイールを指定済みです。
|
| 51 |
-
|
| 52 |
-
選択肢 B: pip を使用
|
| 53 |
-
```bash
|
| 54 |
-
python -m venv .venv
|
| 55 |
-
source .venv/bin/activate
|
| 56 |
-
# PyG ホイールの互換 URL を指定(Torch 2.2.x + cu121)
|
| 57 |
-
pip install torch==2.2.*
|
| 58 |
-
pip install --find-links https://data.pyg.org/whl/torch-2.2.0+cu121.html torch-geometric==2.4.*
|
| 59 |
-
# 残りをインストール
|
| 60 |
-
pip install -e .
|
| 61 |
-
```
|
| 62 |
-
CPU のみで使う場合は CUDA 関連の依存は不要ですが、PyG の互換は維持してください。
|
| 63 |
-
|
| 64 |
-
## クイックスタート(形態素解析)
|
| 65 |
-
```bash
|
| 66 |
-
# サンプルモデルで 1 文を解析
|
| 67 |
-
python infer.py --text "東京都の外国人参政権"
|
| 68 |
-
|
| 69 |
-
# 対話モード
|
| 70 |
-
python infer.py
|
| 71 |
-
|
| 72 |
-
# 学習後の実験を指定して推論
|
| 73 |
-
python infer.py --experiment gatv2_YYYYMMDD_HHMMSS --text "..."
|
| 74 |
-
```
|
| 75 |
-
注意
|
| 76 |
-
- 実験未指定時は `sample_model/` を読み込み。
|
| 77 |
-
- 既定デバイスは CPU。実験情報により GPU を使用する場合があります。
|
| 78 |
-
|
| 79 |
-
出力例(概形)
|
| 80 |
-
```
|
| 81 |
-
東京都 名詞,固有名詞,*,*,*,*,トウキョウト
|
| 82 |
-
の 助詞,連体化,*,*,*,*,ノ
|
| 83 |
-
外国人 名詞,一般,*,*,*,*,ガイコクジン
|
| 84 |
-
参政 権 名詞,一般,*,*,*,*,サンセイケン
|
| 85 |
-
```
|
| 86 |
-
|
| 87 |
-
## 学習と評価(KWDLC)
|
| 88 |
-
KWDLC の取得
|
| 89 |
-
```bash
|
| 90 |
-
cd /path/to/Mecari
|
| 91 |
-
git clone --depth 1 https://github.com/ku-nlp/KWDLC
|
| 92 |
-
```
|
| 93 |
-
- ライセンス・利用許諾は KWDLC リポジトリを参照。
|
| 94 |
-
- 分割は公式 `dev.id` / `test.id` に厳密に従います。
|
| 95 |
-
|
| 96 |
-
前処理(アノテーションとグラフ生成)
|
| 97 |
-
```bash
|
| 98 |
-
python preprocess.py --config configs/gatv2.yaml
|
| 99 |
-
# 必要に応じて辞書パスを明示
|
| 100 |
-
# python preprocess.py --config configs/gatv2.yaml --jumandic-path /path/to/juman-utf8
|
| 101 |
-
```
|
| 102 |
-
- 出力先は `training.annotations_dir`(既定: `annotations`)。未設定の場合は `annotations_kwdlc_juman` に保存されます。
|
| 103 |
-
- MeCab 解析結果は候補整形・重複除去後、'+'/'-'/ '?' を付与して保存します。
|
| 104 |
-
|
| 105 |
-
学習
|
| 106 |
-
```bash
|
| 107 |
-
python train.py --config configs/gatv2.yaml
|
| 108 |
-
# 例: ロギングを無効化
|
| 109 |
-
# python train.py --config configs/gatv2.yaml --no-wandb
|
| 110 |
-
```
|
| 111 |
-
- 結果は `experiments/<name>/` に保存され、`config.yaml` と `checkpoints/` が生成されます。
|
| 112 |
-
- 乱数 `seed=42`。`deterministic` を true にすると再現性は上がりますが、速度が低下します。
|
| 113 |
-
|
| 114 |
-
評価
|
| 115 |
-
```bash
|
| 116 |
-
python evaluate.py --experiment gatv2_YYYYMMDD_HHMMSS --max-samples 50
|
| 117 |
-
```
|
| 118 |
-
- `evaluate.py` は CPU で評価します。
|
| 119 |
-
- MeCab(JUMANDIC)の辞書パスは現状 `'/var/lib/mecab/dic/juman-utf8'` に固定されています。環境差がある場合はシンボリックリンク作成かコードの該当箇所を変更してください。
|
| 120 |
-
|
| 121 |
-
## コンフィグ概要
|
| 122 |
-
主なキ���(`configs/gatv2.yaml` は `base.yaml` を継承)
|
| 123 |
-
- features.lexical_feature_dim: ユニグラム特徴量の次元(既定 100000)
|
| 124 |
-
- edge_features.use_bidirectional_edges: 双方向エッジの使用(既定 true)
|
| 125 |
-
- model.type: `gatv2` のみ対応
|
| 126 |
-
- model.hidden_dim/num_layers/num_heads/dropout: GATv2 の主要ハイパラ
|
| 127 |
-
- training.learning_rate/batch_size/max_steps: 学習率・バッチサイズ・ステップ数
|
| 128 |
-
- training.patience: 早期終了の待機ステップ
|
| 129 |
-
- training.gradient_clip_val/algorithm: 勾配クリップ
|
| 130 |
-
- training.num_workers: DataLoader のワーカ数
|
| 131 |
-
- training.accumulate_grad_batches: 勾配蓄積
|
| 132 |
-
- training.seed: 乱数シード(既定 42)
|
| 133 |
-
- training.use_wandb: Weights & Biases ロギング(既定 true)
|
| 134 |
-
- training.annotations_dir: 前処理出力の読込先(既定 `annotations`)
|
| 135 |
-
- inference.checkpoint_dir: 推論用チェックポイント探索ルート(既定 `experiments`)
|
| 136 |
-
- loss.use_pos_weight: 不均衡対策での正例重み付け
|
| 137 |
-
|
| 138 |
-
## 実験ディレクトリと再開
|
| 139 |
-
- 構成: `experiments/<name>/config.yaml`, `experiments/<name>/checkpoints/*.ckpt`
|
| 140 |
-
- 学習再開
|
| 141 |
-
```bash
|
| 142 |
-
python train.py --config configs/gatv2.yaml --resume gatv2_YYYYMMDD_HHMMSS
|
| 143 |
-
```
|
| 144 |
-
- 推論で学習済みモデルを指定
|
| 145 |
-
```bash
|
| 146 |
-
python infer.py --experiment gatv2_YYYYMMDD_HHMMSS --text "..."
|
| 147 |
-
```
|
| 148 |
-
|
| 149 |
-
## トラブルシュート
|
| 150 |
-
- MeCab の辞書パスが見つからない: `/var/lib/mecab/dic/juman-utf8` を確認。場所が異なる場合はリンク作成、または `preprocess.py` の `--jumandic-path` を使用。
|
| 151 |
-
- PyG ホイール不整合: Torch と CUDA バージョンに合致する `find-links` を指定。
|
| 152 |
-
- kyoto-reader が見つからない/解析失敗: `pip install kyoto-reader` を確認。KNP ファイルのエンコーディングに注意。
|
| 153 |
-
- GPU メモリ不足: バッチサイズを下げる、`precision="16-mixed"` 既定の確認、あるいは CPU での学習を検討。
|
| 154 |
-
- uv が使えない: pip 手順(上記)を使用。
|
| 155 |
-
- ネットワーク制限で W&B 失敗: `--no-wandb` または `training.use_wandb: false` に設定。
|
| 156 |
-
|
| 157 |
-
## 既知の制限
|
| 158 |
-
- 学習は KWDLC 前提(他コーパス未対応)。
|
| 159 |
-
- '?' は学習時に無視。'+' と重なりを持つ候補は '-' に降格。
|
| 160 |
-
- 品詞体系は JUMANDIC に依存。
|
| 161 |
-
- 推論・評価は単一路(ベストパス)。
|
| 162 |
-
- Mac/Windows は未検証。
|
| 163 |
-
|
| 164 |
-
## ライセンスと謝辞
|
| 165 |
-
- ライセンス: CC BY-NC 4.0(非商用)。コード・学習済みモデル・ドキュメントに適用。
|
| 166 |
-
- 免責: 教育・研究目的の独立実装です。Google 等と関係はありません。
|
| 167 |
-
- 謝辞: MeCab/JUMANDIC、kyoto-reader、PyTorch / PyTorch Geometric、Weights & Biases ほか関連 OSS に感謝します。
|
| 168 |
-
|
| 169 |
-
## 参考文献
|
| 170 |
-
- [1] Gleb Mazovetskiy, Taku Kudo, "Data processing for Japanese text-to-pronunciation models", NLP2024 Workshop on Japanese Language Resources. https://jedworkshop.github.io/JLR2024/materials/b-2.pdf (pp. 19–23)
|
| 171 |
-
- [2] Shaked Brody, Uri Alon, Eran Yahav, "How Attentive are Graph Attention Networks?", ICLR 2022. https://openreview.net/forum?id=R7Pl7yr-KX
|
| 172 |
-
|
| 173 |
-
---
|
| 174 |
-
補足: 既存の `README.md` は簡潔な導入として維持し、本ファイル(`readme2.md`)は詳細版として併用する想定です。
|
| 175 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|