TeenEmo-LFM2.5-1.2B-DPO

10代の感情理解に特化した日本語LoRA Adapter。LiquidAI/LFM2.5-1.2B-Base をベースに、SFT → DPO の2段階ファインチューニングを施したアダプターです。iPhoneなどのオンデバイス環境での完全ローカル推論を前提に設計されており、会話内容がデバイスの外に出ない設計を特徴とします。

推論にはベースモデルとの組み合わせが必要です。 マージ済みGGUF版は TeenEmo-LFM2.5-1.2B-GGUF をご利用ください。

関連リンク

リソース リンク
GitHubリポジトリ YUGOROU/TeenEmo
GGUF量子化版(llama.cpp / iOS向け) TeenEmo-LFM2.5-1.2B-GGUF
日本語感情評価データセット teememo-eq-bench-ja
モデルコレクション teenemo-latest-collection

プロジェクト概要

TeenEmo は、誰にも言えない悩みをクラウドに送信せず打ち明けられる、10代向けオンデバイスAIカウンセリングプロジェクトです。

10代が抱える「相談したいが人間関係を壊したくない」「どう思われるか心配」という構造的な相談困難に対し、プライバシーを担保しながら感情的なサポートを提供することを目指しています。ChatGPT等の既存クラウド型サービスが抱えるプライバシーリスク・過依存問題・日本の中高生への非特化という課題を、ローカル完結・感情理解特化・過依存防止設計によって解決します。

トレーニング詳細

訓練パイプライン

LFM2.5-1.2B-Base
    ↓ SFT(教師あり微調整)
    ↓   └ <think>タグのフォーマット定着・応答スタイルの基礎学習
TeenEmo-LFM2.5-1.2B-SFT
    ↓ DPO(直接選好最適化)
    ↓   └ chosen/rejectedペアによる曖昧な好みの学習・ハードネガティブの排除
TeenEmo-LFM2.5-1.2B-DPO  ← 本モデル
  • フレームワーク: Unsloth + TRL
  • LoRA設定: rank=32
  • 訓練環境: A100 80GB(Vast.ai)

データセット

10場面 × 10関係 × 4感情 × 10バリエーションの組み合わせから合成・フィルタリングした3,776件を基礎データとして使用。実際のユーザーの悩みは一切使用せず、LLMによる合成データのみで構成することで個人情報の混入を防いでいます。

場面軸(10種): 授業中・部活動・通学中 など
関係軸(10種): 親友・家族・自分自身 など
感情軸(4種): 相反する感情の混在 / 板挟みの状況 / 期待の裏切り / 内省しても答えが出ない自己矛盾

シナリオタイプの内訳(実測値):

タイプ 割合
1度のアドバイスで解決した会話 76.1%
未解決に終わったが高品質な応答 15.5%
マルチターン(複数会話にわたる文脈理解) 4.4%
感情のリバウンドが生じるシナリオ 4.0%

安全性フィルタリング(2段階):

学習データの約6%(226件 / 3,776件)に自傷・暴力関連キーワードが含まれていましたが、即削除ではなく2層処理を採用しています。

  1. 「死にたい」「自傷」など13種のキーワードによる高速フラグ付け(フラグを立てても即削除しない設計)
  2. LLM as a Judge による共感度・安全性・タイミング・自然さの4軸評価 → 安全性スコアで最終採否を決定

これにより「希死念慮のあるユーザーへの共感的応答」は学習に活用しつつ、危険なアドバイスを推奨する応答は排除しています。

DPO選好ペアの設計:

  • chosen(より良い応答): 4軸合計12点以上
  • rejected(悪い応答): 同8点以下(中間域はノイズとして削除)

rejected には以下をハードネガティブとして意図的に混入:

  • 感情が受け取られる前にアドバイスをする早まった解決提案
  • 「そんなことない」「気にしすぎ」など感情の否定
  • 現実を無視した一方的で過剰な励まし

内部思考(Reasoning)設計

全応答データは <think> ~ </think> タグで内部思考と応答を分離した形式で設計されています。即座に答えを出すのではなく「受け取る」ことを優先させるため、内部思考タグ前に前置き文を配置する構造としています。

思考タグの内容は指定せず形式のみを統一しています。内容を指定すると思考パターンが固定化し推論能力が損なわれることを実験で確認したためです。また、シナリオタイプの割合設計から、簡単な悩みには短く・複雑な悩みには深く考えるというトークン数のスケーリングが自然に発現するよう設計されています。

評価(EQ-Bench3-ja)

EQ-Bench3を日本語化・独自改修した teememo-eq-bench-ja で評価しています。

時期 条件 スコア 備考
2025年11月 LFM2-2.6B Instruct + GRPO 47.1 Instructモデル起点のためフォーマット準拠が自然に得られた結果
2026年3月(修正前) LFM2.5-1.2B Base + SFT/DPO 8.30 Baseモデルの出力形式未習得による計測上の問題が主因
2026年3月(修正後) LFM2.5-1.2B Base + SFT/DPO 17.20 評価プロンプトへのフォーマット指示注入により改善

EQ-Bench3について: 感情知能(EQ)の4側面(能動的EQスキル・対人スキル・心理的洞察力・分析力)を、複数ターンのロールプレイと分析タスクで測定するOSSベンチマーク(MITライセンス)。スコア範囲は0〜100点。

日本語フォーク(teememo-eq-bench-ja)について: 46シナリオ + 採点基準の全12ファイルを日本語化。スコア算出の整合性維持のため採点キーは英語に統一し、Baseモデル向けに評価プロンプトへのフォーマット指示注入を追加しています。

1〜2Bパラメータ規模のモデルとして、数十〜数百倍大きいLlama-3.1-405B-InstructやGPT-4に迫る47.1ポイントの達成は、エッジ向けモデルにおける感情理解能力の可能性を示しています。

使い方

PEFTによるLoRAアダプターの読み込み

from peft import PeftModel
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
import re

base_model_id = "LiquidAI/LFM2.5-1.2B-Base"
adapter_id = "YUGOROU/TeenEmo-LFM2.5-1.2B-DPO"

tokenizer = AutoTokenizer.from_pretrained(base_model_id)
base_model = AutoModelForCausalLM.from_pretrained(
    base_model_id,
    torch_dtype=torch.bfloat16,
    device_map="auto",
)
model = PeftModel.from_pretrained(base_model, adapter_id)

messages = [
    {
        "role": "system",
        "content": "あなたは10代の悩みに寄り添うAIカウンセラーです。相手の感情をまず受け取ることを最優先にしてください。"
    },
    {
        "role": "user",
        "content": "最近、学校でうまくいかないことが続いていて、なんか疲れちゃった。"
    }
]

input_ids = tokenizer.apply_chat_template(
    messages,
    add_generation_prompt=True,
    return_tensors="pt"
).to(model.device)

with torch.no_grad():
    output = model.generate(
        input_ids,
        max_new_tokens=512,
        temperature=0.7,
        do_sample=True,
        repetition_penalty=1.1,
    )

response = tokenizer.decode(output[0][input_ids.shape[-1]:], skip_special_tokens=True)

# <think>タグの内容を除去して応答のみ表示
response_clean = re.sub(r"<think>.*?</think>", "", response, flags=re.DOTALL).strip()
print(response_clean)

llama.cpp / iOS(GGUF・推奨)

マージ済みのGGUF版を使用してください。

huggingface-cli download YUGOROU/TeenEmo-LFM2.5-1.2B-GGUF \
    --local-dir ./teenemo-gguf

llama-cli -m ./teenemo-gguf/TeenEmo-LFM2.5-1.2B-DPO-Q4_0.gguf \
    -sys "あなたは10代の悩みに寄り添うAIカウンセラーです。" \
    --prompt "最近、学校でうまくいかないことが続いていて、なんか疲れちゃった。" \
    -ngl 99

注意事項

  • 本モデルは10代向けの感情サポートを目的として訓練されていますが、医療・精神科的な診断・治療の代替にはなりません
  • 危機的状況(自傷・自殺念慮等)への専門的対応は設計スコープ外です。そのような状況では専門機関へのアクセスを促してください
  • 訓練データは合成データのみで構成されており、実際のユーザーの会話データは含まれていません

ライセンス

ベースモデル LFM2.5-1.2B-BaseLFM Open License v1.0 に準拠します。年間収益1,000万ドル未満の個人・組織による非商用・研究目的での利用が許可されています。

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for YUGOROU/TeenEmo-LFM2.5-1.2B-DPO

Adapter
(4)
this model

Collection including YUGOROU/TeenEmo-LFM2.5-1.2B-DPO