zbller commited on
Commit
28076b1
·
verified ·
1 Parent(s): 9fde849

Upload folder using huggingface_hub

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