--- base_model: llm-jp/llm-jp-3-13b library_name: peft --- # モデルカード: llm-jp/llm-jp-3-13b ## モデル概要 このモデルは、松尾研LLM講座の終了課題の提出用のモデルです。 | 項目 | 内容 | |------|------| | 開発者 | masakiai | | ファインチューニング元モデル | [llm-jp/llm-jp-3-13b] | | 対応言語 | 日本語 | | ライセンス | [apache-2.0]| ## モデルソース - **リポジトリ:** [https://huggingface.co/masakiai/llm-jp-3-13b-finetune] --- ## 使用方法 ### 以下は、elyza-tasks-100-TV-0.jsonlの回答のためのコードです ```python import torch from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig import json from tqdm import tqdm import os import re # 環境変数の設定 HF_TOKEN = os.getenv("HF_TOKEN") model_name = "masakiai/llm-jp-3-13b-finetune" ELYZA_TASKS_100_TV_0_JSONL_PATH = "./elyza-tasks-100-TV_0.jsonl" # 4ビット量子化の設定 bnb_config = BitsAndBytesConfig( load_in_4bit=True, bnb_4bit_quant_type="nf4", bnb_4bit_compute_dtype=torch.bfloat16, ) # モデルの読み込み model = AutoModelForCausalLM.from_pretrained( model_name, quantization_config=bnb_config, device_map="auto" ) # トークナイザーの読み込み tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True) # データセットの読み込み datasets = [] with open(ELYZA_TASKS_100_TV_0_JSONL_PATH , "r") as f: item = "" for line in f: line = line.strip() item += line if item.endswith("}"): datasets.append(json.loads(item)) item = "" # 推論の実行 results = [] for data in tqdm(datasets): input = data["input"] prompt = f"""### 指示 {input} ### 回答 """ tokenized_input = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt").to(model.device) attention_mask = torch.ones_like(tokenized_input) with torch.no_grad(): outputs = model.generate( tokenized_input, attention_mask=attention_mask, max_new_tokens=100, do_sample=False, repetition_penalty=1.2, pad_token_id=tokenizer.eos_token_id )[0] output = tokenizer.decode(outputs[tokenized_input.size(1):], skip_special_tokens=True) results.append({"task_id": data["task_id"], "input": input, "output": output}) # ファイルの保存 jsonl_id = re.sub(".*/", "", model_name) with open(f"./{jsonl_id}-outputs.jsonl", 'w', encoding='utf-8') as f: for result in results: json.dump(result, f, ensure_ascii=False) f.write('\n') ``` ### 直接的な使用 このモデルは以下のような日本語タスクに使用できます: - テキスト生成 - 質問応答 - 翻訳 - 要約 ```python from transformers import AutoModelForCausalLM, AutoTokenizer import os HF_TOKEN = os.getenv("HF_TOKEN") model_name = "masakiai/llm-jp-3-13b-finetune" tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForCausalLM.from_pretrained(model_name) text = "日本の文化について教えてください。" input_ids = tokenizer(text, return_tensors="pt").input_ids output = model.generate(input_ids, max_length=50) print(tokenizer.decode(output[0], skip_special_tokens=True)) ``` ---