zbller commited on
Commit
7ef8a84
·
verified ·
1 Parent(s): 226c7d3

Delete readme2.md

Browse files
Files changed (1) hide show
  1. 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
-