Upload folder using huggingface_hub
Browse files- README.md +8 -0
- packages.txt +1 -1
- readme2.md +195 -0
- 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 |
-
|
|
|
|
| 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 |
-
#
|
|
|
|
|
|
|
|
|
|
| 4 |
torch==2.2.2
|
| 5 |
-
torch-
|
| 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 |
-
#
|
| 17 |
-
|
|
|
|
| 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 |
|
|
|
|
|
|