--- language: ja license: apache-2.0 tags: - text-classification - bert - japanese - lora - qlora - bridge-inspection - civil-engineering base_model: cl-tohoku/bert-large-japanese-v2 library_name: peft datasets: - bridge-damage-diagnosis-logic metrics: - accuracy - f1 model-index: - name: damage-cause-encoder-v05 results: - task: type: text-classification name: Bridge Damage Cause Classification metrics: - type: accuracy value: 87.07 name: Test Accuracy - type: accuracy value: 47.0 name: Diverse Sample Accuracy --- # Bridge Damage Cause Encoder v0.5 (QLoRA) **橋梁損傷原因分類のための日本語BERTベースのQLoRAモデル** このモデルは、橋梁の損傷記述から原因を10カテゴリに分類する深層学習モデルです。RC床版、コンクリート桁橋、床版橋の診断ロジックPDFから抽出した因果トリプル(Si → Ci)を活用し、4-bit量子化LoRA(QLoRA)で効率的にファインチューニングされています。 ## モデル概要 | 項目 | 詳細 | |-----|------| | **ベースモデル** | [cl-tohoku/bert-large-japanese-v2](https://huggingface.co/cl-tohoku/bert-large-japanese-v2) | | **アーキテクチャ** | BertForSequenceClassification + QLoRA adapters | | **量子化** | 4-bit NF4 (QLoRA) + FP16 classifier | | **LoRA設定** | r=16, α=32, dropout=0.1 | | **訓練可能パラメータ** | 7.1M (2.07%) | | **タスク** | 10クラステキスト分類 | | **言語** | 日本語 | | **ライセンス** | Apache 2.0 | ## 性能指標 | データセット | Accuracy | F1 (weighted) | サンプル数 | |------------|----------|---------------|-----------| | **Test Set (Golden)** | **87.07%** | **87.0%** | 116 | | **Diverse Samples** | **47.0%** | - | 100 | | **Validation (Training)** | 93.91% | 93.73% | 115 | **比較(v0.5実験結果):** - **LoRA (FP16)**: Test 87.07%, Diverse 34.0%, 1.45 GB GPU - **QLoRA (4-bit)**: Test 87.07%, **Diverse 47.0%** ⭐, **0.40 GB GPU** (-72%) - **QA-LoRA**: Test 85.34%, Diverse 30.0%, 0.42 GB GPU → **QLoRAが最善**: 同等のテスト精度で、未見パターンへの汎化が13%向上、GPU使用量72%削減 ## 損傷原因カテゴリ(10クラス) | ID | カテゴリ | 説明 | 対象橋梁タイプ | |----|---------|------|---------------| | 0 | 塩害 | 塩化物イオンによる鉄筋腐食 | RC床版、コンクリート桁橋、床版橋 | | 1 | 凍害 | 凍結融解の繰り返しによる劣化 | RC床版、床版橋 | | 2 | 土砂化 | コンクリートの土砂化現象 | RC床版、床版橋 | | 3 | 疲労 | 繰り返し荷重による疲労亀裂 | RC床版 | | 4 | 鉄筋腐食 | 鉄筋の腐食による損傷 | RC床版 | | 5 | ASR | アルカリシリカ反応 | 床版橋 | | 6 | ボイド管浮き陥没 | ボイド管の浮き上がりや陥没 | 床版橋 | | 7 | 滞水 | 水の滞留による劣化 | 床版橋 | | 8 | 連結桁 | 連結桁特有の損傷 | コンクリート桁橋、床版橋 | | 9 | その他 | 上記以外の損傷原因 | コンクリート桁橋 | ## 使用方法 ### 必要なライブラリ ```bash pip install transformers peft torch bitsandbytes sentence-transformers faiss-cpu ``` ### 推論コード ```python import torch from transformers import AutoTokenizer, AutoModelForSequenceClassification from peft import PeftModel, PeftConfig # モデルとトークナイザーのロード model_id = "yasunotkt/damage-cause-encoder-v05" config = PeftConfig.from_pretrained(model_id) base_model = AutoModelForSequenceClassification.from_pretrained( config.base_model_name_or_path, num_labels=10, device_map="auto" ) model = PeftModel.from_pretrained(base_model, model_id) tokenizer = AutoTokenizer.from_pretrained(model_id) # 推論 def predict_damage_cause(damage_description, context=""): """ 損傷記述から原因を予測 Args: damage_description: 損傷の記述(Si) context: 関連する因果知識(Ci)。オプション。 Returns: 予測ラベルID、ラベル名、確率 """ labels = ["塩害", "凍害", "土砂化", "疲労", "鉄筋腐食", "ASR", "ボイド管浮き陥没", "滞水", "連結桁", "その他"] # 入力テキストの作成 text = damage_description if context: text = f"{damage_description} {tokenizer.sep_token} {context}" # トークナイズと推論 inputs = tokenizer(text, return_tensors="pt", max_length=512, truncation=True, padding=True).to(model.device) with torch.no_grad(): outputs = model(**inputs) probs = torch.softmax(outputs.logits, dim=1) pred_id = torch.argmax(probs, dim=1).item() confidence = probs[0][pred_id].item() return pred_id, labels[pred_id], confidence # 使用例 damage_text = "床版下面に遊離石灰が白く析出し、鉄筋位置に沿って縦方向のひびわれが確認される" pred_id, cause, conf = predict_damage_cause(damage_text) print(f"予測原因: {cause} (ID: {pred_id})") print(f"確信度: {conf:.2%}") ``` ### FAISSを使った文脈取得付き推論 完全な推論パイプライン(FAISS triple index + LLM filter + QLoRA)については、プロジェクトリポジトリをご覧ください: https://github.com/tk-yasuno/damage_cause_encoder ## トレーニング詳細 ### データセット - **ソース**: 35 PDF files(RC床版、コンクリート桁橋、床版橋の診断ロジック) - **抽出トリプル**: 6,745件(テキスト + 図表) - **トレーニングサンプル**: 342件 - **検証サンプル**: 115件 - **テストセット(Golden)**: 116件(15 PDFから手動作成) ### ハイパーパラメータ ```yaml base_model: cl-tohoku/bert-large-japanese-v2 quantization: 4-bit NF4 + double quantization lora_r: 16 lora_alpha: 32 lora_dropout: 0.1 target_modules: [query, key, value, dense] learning_rate: 2e-4 batch_size: 4 gradient_accumulation_steps: 8 epochs: 20 max_length: 512 optimizer: AdamW loss_function: Weighted CrossEntropy (inverse frequency) ``` ### トレーニング環境 - **GPU**: NVIDIA RTX 4060 Ti 16GB - **CUDA**: 12.6 - **メモリ使用量**: 0.40 GB (QLoRA) - **トレーニング時間**: ~10分(20 epochs) - **フレームワーク**: PyTorch 2.6.0, Transformers, PEFT, BitsAndBytes ## アルゴリズムパイプライン ``` 1. PDFからOCR抽出(PaddleOCR + pypdfium2) ↓ 2. 因果トリプル抽出(Qwen2.5 7B) ↓ 3. FAISS dense retrieval(hotchpotch/static-embedding-japanese) ↓ 4. LLM relevance filter(Qwen2.5 7B) ↓ 5. QLoRA分類器(本モデル) ↓ 6. 損傷原因(10クラス) ``` ## 制限事項と今後の展望 ### 制限事項 1. **日本語専用** - 橋梁診断の専門用語に特化 2. **限定的なドメイン** - RC床版、コンクリート桁橋、床版橋のみ 3. **小規模データセット** - 35 PDF、~400サンプル 4. **クラス不均衡** - 「塩害」が支配的(バランシング済み) 5. **文脈依存** - 最適性能にはFAISSによる文脈取得が必要 ### v1.0での改善予定 - マルチモーダル融合(Vision Encoder + Text Encoder) - ハイブリッド検索(BM25 + Dense + Reranker) - より大規模なデータセット(100+ PDFs) - テストセットによる厳密な評価(70/15/15 split) ## 引用 このモデルを研究で使用する場合は、以下を引用してください: ```bibtex @software{damage_cause_encoder_v05, title = {Damage Cause Encoder: Deep Learning for Bridge Damage Classification with QLoRA}, author = {Damage Cause Encoder Project Team}, year = {2026}, version = {0.5}, url = {https://github.com/tk-yasuno/damage_cause_encoder}, note = {QLoRA achieves 87.07\% test accuracy with 72\% GPU memory reduction} } ``` ## 関連リンク - **GitHub**: https://github.com/tk-yasuno/damage_cause_encoder - **詳細ドキュメント**: [LESSON_v05_LoRA_Comparison.md](https://github.com/tk-yasuno/damage_cause_encoder/blob/main/docs/LESSON_v05_LoRA_Comparison.md) - **実験レポート**: [RESULT_15pdf_10class_n428.md](https://github.com/tk-yasuno/damage_cause_encoder/blob/main/docs/RESULT_15pdf_10class_n428.md) ## 謝辞 - **ベースモデル**: [cl-tohoku/bert-large-japanese-v2](https://huggingface.co/cl-tohoku/bert-large-japanese-v2) by Tohoku NLP Group - **PEFT/LoRA**: Hugging Face PEFT library - **QLoRA**: Tim Dettmers et al., arXiv:2305.14314 --- **開発者**: Damage Cause Encoder Project Team **最終更新**: 2026-07-25 **バージョン**: v0.5 **連絡先**: GitHub Issues #### Speeds, Sizes, Times [optional] [More Information Needed] ## Evaluation ### Testing Data, Factors & Metrics #### Testing Data [More Information Needed] #### Factors [More Information Needed] #### Metrics [More Information Needed] ### Results [More Information Needed] #### Summary ## Model Examination [optional] [More Information Needed] ## Environmental Impact Carbon emissions can be estimated using the [Machine Learning Impact calculator](https://mlco2.github.io/impact#compute) presented in [Lacoste et al. (2019)](https://arxiv.org/abs/1910.09700). - **Hardware Type:** [More Information Needed] - **Hours used:** [More Information Needed] - **Cloud Provider:** [More Information Needed] - **Compute Region:** [More Information Needed] - **Carbon Emitted:** [More Information Needed] ## Technical Specifications [optional] ### Model Architecture and Objective [More Information Needed] ### Compute Infrastructure [More Information Needed] #### Hardware [More Information Needed] #### Software [More Information Needed] ## Citation [optional] **BibTeX:** [More Information Needed] **APA:** [More Information Needed] ## Glossary [optional] [More Information Needed] ## More Information [optional] [More Information Needed] ## Model Card Authors [optional] [More Information Needed] ## Model Card Contact [More Information Needed] ### Framework versions - PEFT 0.19.1