--- library_name: transformers base_model: - google/gemma-2-9b-it language: - ko pipeline_tag: text-generation tags: - mental-health - cbt - counseling - psychology - wellness - qlora license: gemma --- # 🧠 Doran-i (CBT Counseling Specialist) ![Model Architecture](https://img.shields.io/badge/Model-Gemma_2_9B-blue) ![Task](https://img.shields.io/badge/Task-CBT_Counseling-green) ![Technique](https://img.shields.io/badge/Technique-QLoRA_Fine_Tuning-orange) ![Status](https://img.shields.io/badge/Status-Stable_Release-brightgreen) ## πŸ“– Model Details ### Model Description **Doran-i(λ„λž€μ΄)**λŠ” κ΅¬κΈ€μ˜ κ³ μ„±λŠ₯ μ˜€ν”ˆ λͺ¨λΈμΈ `gemma-2-9b-it`λ₯Ό 기반으둜, **CBT(μΈμ§€ν–‰λ™μΉ˜λ£Œ) 기법**을 μˆ˜ν–‰ν•  수 μžˆλ„λ‘ μ •κ΅ν•˜κ²Œ λ―Έμ„Έμ‘°μ •(Fine-tuning)된 ν•œκ΅­μ–΄ 심리 상담 AI λͺ¨λΈμž…λ‹ˆλ‹€. κΈ°μ‘΄ `Gemma 3`의 μ‹€ν—˜μ  μ•„ν‚€ν…μ²˜ λŒ€μ‹ , κ²€μ¦λœ μ„±λŠ₯κ³Ό μ•ˆμ •μ„±μ„ μžλž‘ν•˜λŠ” **Gemma 2 9B**λ₯Ό μ±„νƒν•˜μ—¬ ν•œκ΅­μ–΄ λ‰˜μ•™μŠ€ νŒŒμ•… λŠ₯λ ₯κ³Ό μƒλ‹΄μ˜ 깊이λ₯Ό λŒ€ν­ κ°•ν™”ν–ˆμŠ΅λ‹ˆλ‹€. λ‹¨μˆœν•œ μœ„λ‘œλ₯Ό λ„˜μ–΄, λ‚΄λ‹΄μžμ˜ 말 속에 μˆ¨κ²¨μ§„ **12κ°€μ§€ 인지 μ™œκ³‘(Cognitive Distortion)**을 νƒμ§€ν•˜κ³ , **μ†Œν¬λΌν…ŒμŠ€μ‹ 질문(Socratic Questioning)**을 톡해 λ‚΄λ‹΄μžκ°€ 슀슀둜 뢀정적 μ‚¬κ³ μ˜ 고리λ₯Ό λŠλ„λ‘ λ•μŠ΅λ‹ˆλ‹€. - **Developed by:** Kong Yoonseo (0xMori) @ Safori - **Model type:** Causal Language Model (QLoRA Fine-tuned) - **Language(s):** Korean (ν•œκ΅­μ–΄) - **License:** Gemma Terms of Use - **Base Model:** `google/gemma-2-9b-it` - **Hardware:** Trained on NVIDIA T4, Merged on TPU v5e-8 ### Model Sources - **Repository:** [https://huggingface.co/0xMori/gemma-2-9b-safori-cbt-merged](https://huggingface.co/0xMori/gemma-2-9b-safori-cbt-merged) - **Service Github:** [[Team Safori](https://github.com/safori-team)] ## 🎯 Uses ### Direct Use (JSON Output) 이 λͺ¨λΈμ€ κ΅¬μ‘°ν™”λœ JSON ν˜•μ‹μœΌλ‘œ 상담 κ²°κ³Όλ₯Ό 좜λ ₯ν•˜λ„λ‘ ν›ˆλ ¨λ˜μ—ˆμŠ΅λ‹ˆλ‹€: ```json { "emotion": "sad", "empathy": "λ‚΄λ‹΄μžμ˜ 감정에 λŒ€ν•œ κΉŠμ€ 곡감 멘트", "detected_distortion": "흑백논리", "analysis": "λ‚΄λ‹΄μžκ°€ μ™œ 그런 생각을 ν•˜κ²Œ λ˜μ—ˆλŠ”μ§€μ— λŒ€ν•œ 뢄석", "socratic_question": "λ°˜λ°• 증거λ₯Ό 찾도둝 μœ λ„ν•˜λŠ” 질문", "alternative_thought": "긍정적 λŒ€μ•ˆ 사고 μ˜ˆμ‹œ" } ``` ### Out-of-Scope Use (μ‚¬μš© μ œν•œ) - **의료적 진단:** 이 λͺ¨λΈμ€ μ˜μ‚¬κ°€ μ•„λ‹ˆλ©°, μ •μ‹ μ§ˆν™˜μ„ μ§„λ‹¨ν•˜κ±°λ‚˜ 약물을 μ²˜λ°©ν•  수 μ—†μŠ΅λ‹ˆλ‹€. - **즉각적인 μœ„κΈ° κ°œμž…:** μžμ‚΄/μžν•΄ λ“± 응급 상황 λ°œμƒ μ‹œ 핫라인 μ•ˆλ‚΄κ°€ ν•„μš”ν•©λ‹ˆλ‹€. ## πŸ’» How to Get Started **Hugging Face Transformers** 라이브러리λ₯Ό μ‚¬μš©ν•˜μ—¬ λ°”λ‘œ μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. ```python import torch from transformers import AutoTokenizer, AutoModelForCausalLM # Merged Model (μ–΄λŒ‘ν„° 병합 μ™„λ£Œ) model_id = "0xMori/gemma-2-9b-safori-cbt-merged" tokenizer = AutoTokenizer.from_pretrained(model_id) model = AutoModelForCausalLM.from_pretrained( model_id, device_map="auto", torch_dtype=torch.float16 ) # Alpaca 포맷 (ν•™μŠ΅ μ‹œ μ‚¬μš©ν•œ 포맷 μ€€μˆ˜ ꢌμž₯) prompt = """당신은 전문적인 μΈμ§€ν–‰λ™μΉ˜λ£Œ(CBT) AI 상담사 'λ„λž€μ΄'μž…λ‹ˆλ‹€. ### μ‚¬μš©μž μž…λ ₯: μ‚¬λžŒλ“€μ΄ λ‹€ λ‚˜λ₯Ό μ‹«μ–΄ν•˜λŠ” 것 κ°™μ•„μ„œ λͺ¨μž„에 λ‚˜κ°€κΈ°κ°€ λ‘λ €μ›Œ. ### 응닡 (JSON): "" input_ids = tokenizer(prompt, return_tensors="pt").to("cuda") outputs = model.generate( **input_ids, max_new_tokens=512, do_sample=True, temperature=0.7, top_p=0.9 ) print(tokenizer.decode(outputs[0], skip_special_tokens=True)) ``` ## βš™οΈ Training Details ### Training Data - **Custom Dataset (Safori CBT):** μΈμ§€ν–‰λ™μΉ˜λ£Œ 이둠을 λ°”νƒ•μœΌλ‘œ 자체 κ΅¬μΆ•ν•œ κ³ ν’ˆμ§ˆ ν•œκ΅­μ–΄ 상담 λŒ€ν™”μ…‹ (μ•½ 400건). - **Preprocessing:** - `Input(λ‚΄λ‹΄μž λ°œν™”)` - `Output(JSON ꡬ쑰)` ν˜•νƒœμ˜ Alpaca ν”„λ‘¬ν”„νŠΈ 포맷 적용. - λ‹€μ–‘ν•œ 인지 μ™œκ³‘ μœ ν˜•(흑백사고, κ³Όμž‰μΌλ°˜ν™” λ“±)을 골고루 λΆ„ν¬μ‹œν‚΄. ### Training Procedure - **Technique:** QLoRA (Quantized Low-Rank Adaptation) - **Optimization Strategy:** - **Early Stopping:** Training Loss 0.65 도달 μ‹œ 과적합 λ°©μ§€λ₯Ό μœ„ν•΄ μ‘°κΈ° μ’…λ£Œ. - **Stable Environment:** ν˜Έν™˜μ„± μ΄μŠˆκ°€ μžˆλŠ” Unsloth λŒ€μ‹  **Pure Hugging Face (TRL 0.8.6)** 라이브러리 μ‚¬μš©. - **Hyperparameters:** - Learning Rate: 2e-4 - Batch Size: 1 (Gradient Accumulation: 8) -> Effective Batch Size 8 - Optimizer: paged_adamw_8bit - Quantization: 4-bit (NF4) - LoRA Rank (r): 16, Alpha: 16 - Max Sequence Length: 2048