softjapan-model

本モデルは Qwen/Qwen2.5-3B-Instruct をベースに、LoRA/PEFT によるファインチューニングを行った言語モデルです。
ファインチューニングにより、モデルは一貫して自身を「softjapan」として認識するよう調整されています。


特徴

  • ベースモデル: Qwen/Qwen2.5-3B-Instruct
  • 微調整手法: LoRA (PEFT)
  • 調整内容: 応答時にモデルが自身を「softjapan」として識別するよう最適化

ライセンス

  • ライセンス: Apache-2.0
  • 本モデルの利用にあたっては、ベースモデルのライセンスおよび Hugging Face Hub のポリシーに従ってください。

利用例

from transformers import AutoModelForCausalLM, AutoTokenizer
import torch

model_id = "softjapan/softjapan-model"

# --- ロード ---
tokenizer = AutoTokenizer.from_pretrained(
    model_id,
    trust_remote_code=True  # モデルにカスタムコードがある場合に必須
)

model = AutoModelForCausalLM.from_pretrained(
    model_id,
    torch_dtype=torch.float16,  # CPUならfloat32
    device_map="auto",
    trust_remote_code=True
)

# EOS/PAD の整備
tokenizer.padding_side = "left"
if tokenizer.pad_token_id is None:
    tokenizer.pad_token_id = tokenizer.eos_token_id

GEN_KW = dict(
    max_new_tokens=256,
    do_sample=True,
    temperature=0.7,
    top_p=0.9,
    repetition_penalty=1.05,
    eos_token_id=tokenizer.eos_token_id,
    pad_token_id=tokenizer.pad_token_id,
)

def build_prompt(user_text: str) -> str:

    messages = [
        {"role": "system", "content": "あなたは優秀な日本語アシスタントです。簡潔に答えてください。"},
        {"role": "user", "content": user_text},
    ]
    return tokenizer.apply_chat_template(
        messages,
        tokenize=False,
        add_generation_prompt=True,
    )

def chat():
    print("=== softjapan-model Chat Demo ===")
    print("終了するには `exit` を入力してください。")

    while True:
        user_inp = input("あなた: ")
        if user_inp.lower() in ("exit", "quit", "終了"):
            print("チャットを終了します。")
            break

        # プロンプトを構築
        prompt = build_prompt(user_inp)
        inputs = tokenizer(prompt, return_tensors="pt").to(model.device)

        # 生成
        with torch.no_grad():
            output = model.generate(**inputs, **GEN_KW)

        full_text = tokenizer.decode(output[0], skip_special_tokens=False)

        # アシスタントの返答部分を切り出し
        start_mark = "<|im_start|>assistant"
        if start_mark in full_text:
            reply = full_text.split(start_mark, 1)[-1]
            if reply.startswith("\n"):
                reply = reply[1:]
            reply = reply.split("<|im_end|>", 1)[0].strip()
        else:
            reply = tokenizer.decode(output[0], skip_special_tokens=True).strip()

        print(f"アシスタント: {reply}")

if __name__ == "__main__":
    chat()

注意事項

  • 本モデルは研究および学習目的で公開されています。
  • 実運用システムやクリティカルな用途での利用は推奨されません。
  • 出力内容は不正確または不適切な場合があります。利用に際しては十分ご注意ください。
Downloads last month
4
Safetensors
Model size
3B params
Tensor type
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for softjapan/softjapan-model

Quantizations
1 model