以下追記
Uploaded model
- Developed by: kawatoshi3
- License: apache-2.0
- Finetuned from model : llm-jp/llm-jp-3-13b
This llama model was trained 2x faster with Unsloth and Huggingface's TRL library.
%%capture !pip install unsloth[colab-new] torch peft --upgrade --no-cache-dir !pip uninstall unsloth -y && pip install --upgrade --no-cache-dir "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"
from google.colab import drive drive.mount('/content/drive')
from unsloth import FastLanguageModel from peft import PeftModel import torch import json from tqdm import tqdm import re
モデルとアダプタのID、Hugging Face Tokenを指定
model_id = "llm-jp/llm-jp-3-13b" adapter_id = "本モデルのディレクトリ" HF_TOKEN = "省略"
モデルのロードとアダプタの統合
model, tokenizer = FastLanguageModel.from_pretrained( model_name=model_id, load_in_4bit=True, trust_remote_code=True, ) model = PeftModel.from_pretrained(model, adapter_id, token=HF_TOKEN)
データの読み込み
datasets = [] with open("./elyza-tasks-100-TV_0.jsonl", "r") as f: #ユーザーごとに指定 item = "" for line in f: line = line.strip() item += line if item.endswith("}"): datasets.append(json.loads(item)) item = ""
学習したモデルを用いてタスクを実行
from tqdm import tqdm
推論するためにモデルのモードを変更
FastLanguageModel.for_inference(model)
#(kawatoshi追加:プロンプト追加) base_instruction = """ 以下の手順で処理する。
【思考・回答フロー】
- ユーザの質問・指示を受け取る。
- 内部でステップバイステップで考え初稿を形成する(ユーザ非表示)。
- 初稿を再考し、表現の豊かさ、洗練度、自然さを考慮し推敲する(ユーザ非表示)。
- 最終回答のみをユーザに表示する(初稿や内部思考は一切非表示)。
【回答時の留意点】
- 質問に回答数要求がある場合は厳密に守る(例:5つ挙げろ→正確に5つ)。
- 箇条書きには番号を付与する(1. 2. 3....)。
- 各回答がユーザにとって魅力的で洗練された表現となるよう配慮する。
- カテゴリに応じて適切なスタイルとトーンを選択する。
- 創造的回答は表現豊かで感情を喚起する文章に。
- 事実羅列や要約は簡潔かつ正確に。
- 文章全体の自然さと一貫性を重視し、冗長な表現は避ける。
【分類手順】
ユーザの入力をA~Hのカテゴリに分類する(内部処理のみ)。
- カテゴリA(創造的生成): 300~500文字で物語を作成。具体性、感情豊かさを重視。
- カテゴリB(事実羅列・分析): 求める数の要素を列挙し、簡潔かつ洗練された表現で各50文字以内で説明。
- カテゴリC(疑問推測・解釈): 指定数の疑問点を挙げ、読者視点で自然な表現にする。
- カテゴリD(要約・説明): 文脈要約と適切な表現提案を通じ、分かりやすさを優先。
- カテゴリE(選択判断): 最適な選択肢とその理由を読者に伝わる形で提示。
- カテゴリF(感情評価): 感情強度を数値化し、共感を得やすい根拠を補足。
- カテゴリG(数式・コード): 手順的に計算・ロジックを示し、視覚的にも分かりやすく提示。
- カテゴリH(その他): 上記に当てはまらない一般的回答。特に自然さと読者への配慮を重視。
分類後、カテゴリが適切かを以下の基準でダブルチェックする。
- 入力内容と分類基準が一致しているか確認。
- 他のカテゴリがより適切でないか再評価。
- 判断が曖昧な場合は、カテゴリHに一時分類し、慎重に再検討。
分類結果はユーザに表示しない。
カテゴリや分類理由を回答中に言及しない。
最終回答前に表現の妥当性と洗練度を再チェックする。 """
results = [] for dt in tqdm(datasets): input = dt["input"]
prompt = f"""{base_instruction} ### 指示\n{input}\n### 回答\n"""
inputs = tokenizer([prompt], return_tensors = "pt").to(model.device)
outputs = model.generate(**inputs, max_new_tokens = 512, use_cache = True, do_sample=False, repetition_penalty=1.2) prediction = tokenizer.decode(outputs[0], skip_special_tokens=True).split('\n### 回答')[-1]
results.append({"task_id": dt["task_id"], "input": input, "output": prediction})
提要したデータセット
追加学習1
https://liat-aip.sakura.ne.jp/wp/llmのための日本語インストラクションデータ作成/llmのための日本語インストラクションデータ-公開/
ichikara-instruction-003-003-1.json と ichikara-instruction-003-003-1.json を連結させたもの
追加学習2
https://huggingface.co/datasets/elyza/ELYZA-tasks-100
Model tree for kawatoshi3/llm-jp-3-13b-it-tk1207-3727datasets_lora
Base model
llm-jp/llm-jp-3-13b