🚀 基于Meta-Llama-3-8B-Instruct的日语微调模型
这是一个基于meta-llama/Meta-Llama-3-8B-Instruct
的模型,在日语对话数据集上进行了微调。该模型可用于文本生成任务,为日语对话场景提供支持。
🚀 快速开始
本仓库包含两个版本的Meta-Llama-3-8B-Instruct
,可分别与transformers
库以及原始的llama3
代码库配合使用。下面将详细介绍使用方法。
✨ 主要特性
- 语言适配:在日语对话数据集上进行微调,更适合处理日语对话任务。
- 长上下文支持:训练时最大上下文长度可达8192,能处理较长的对话内容。
📦 安装指南
文档未提供具体安装步骤,可参考相关库(如transformers
、vllm
)的官方文档进行安装。
💻 使用示例
基础用法
使用transformers库
可以使用transformers
库的管道抽象进行对话推理,也可以使用Auto
类结合generate()
函数。以下是两种方法的示例:
Transformers管道方法
import transformers
import torch
model_id = "haqishen/Llama-3-8B-Japanese-Instruct"
pipeline = transformers.pipeline(
"text-generation",
model=model_id,
model_kwargs={"torch_dtype": torch.bfloat16},
device="cuda",
)
messages = [
{"role": "system", "content": "あなたは、常に海賊の言葉で返事する海賊チャットボットです!"},
{"role": "user", "content": "自己紹介してください"},
]
prompt = pipeline.tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
terminators = [
pipeline.tokenizer.eos_token_id,
pipeline.tokenizer.convert_tokens_to_ids("<|eot_id|>")
]
outputs = pipeline(
prompt,
max_new_tokens=256,
eos_token_id=terminators,
do_sample=True,
temperature=0.6,
top_p=0.9,
)
print(outputs[0]["generated_text"][len(prompt):])
Transformers AutoModelForCausalLM方法
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
model_id = "haqishen/Llama-3-8B-Japanese-Instruct"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
torch_dtype=torch.bfloat16,
device_map="cuda",
)
messages = [
{"role": "system", "content": "あなたは、常に海賊の言葉で返事する海賊チャットボットです!"},
{"role": "user", "content": "自己紹介してください"},
]
input_ids = tokenizer.apply_chat_template(
messages,
add_generation_prompt=True,
return_tensors="pt"
).to(model.device)
terminators = [
tokenizer.eos_token_id,
tokenizer.convert_tokens_to_ids("<|eot_id|>")
]
outputs = model.generate(
input_ids,
max_new_tokens=256,
eos_token_id=terminators,
do_sample=True,
temperature=0.6,
top_p=0.9,
)
response = outputs[0][input_ids.shape[-1]:]
print(tokenizer.decode(response, skip_special_tokens=True))
使用vllm库
from vllm import LLM, SamplingParams
model_id = "haqishen/Llama-3-8B-Japanese-Instruct"
llm = LLM(
model=model_id,
trust_remote_code=True,
tensor_parallel_size=2,
)
tokenizer = llm.get_tokenizer()
messages = [
{"role": "system", "content": "あなたは、常に海賊の言葉で返事する海賊チャットボットです!"},
{"role": "user", "content": "自己紹介してください"},
]
conversations = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
outputs = llm.generate(
[conversations],
SamplingParams(
temperature=0.6,
top_p=0.9,
max_tokens=1024,
stop_token_ids=[tokenizer.eos_token_id, tokenizer.convert_tokens_to_ids("<|eot_id|>")],
)
)
print(outputs[0].outputs[0].text.strip())
高级用法
文档未提供高级用法示例,你可以根据实际需求调整模型参数(如max_new_tokens
、temperature
、top_p
等)以获得不同的生成效果。
📚 详细文档
模型信息
示例对话
用户:请介绍一下富士山。
助手:富士山是日本最著名的山,也是世界上最著名的山之一。富士山位于静冈县和山梨县的交界处,海拔3776米,是日本最高的山。这座山大约在12000年前喷发过,现在仍然处于活跃状态。
用户:我没有被邀请参加我父母的婚礼,这是为什么呢?
助手:你没有被邀请的原因可能有很多种。以下是一些可能的情况:
1. 他们可能不认识你,或者忘记了你的存在。他们也许知道你的存在,但忘记邀请你了。
2. 他们可能不了解你的关系,或者不了解你和你家人的关系。他们也许知道你和你家人的关系,但忘记邀请你了。
3. 他们可能不了解你的财务状况,或者不了解你的财务状况。他们也许知道你的财务状况,但忘记邀请你了。
4. 他们可能不了解你和你家人的关系,或者不了解你和你家人的关系。他们也许知道你和你家人的关系,但忘记邀请你了。
5. 他们可能不知道你的存在,或者不知道你的存在。他们也许知道你的存在,但忘记邀请你了。
要知道你没有被邀请的原因,你可以直接问你的父亲或母亲。他们可能忘记邀请你了,但他们应该知道要邀请你。
用户:每天吃感冒药,就可以不感冒了吗?
助手:感冒药以缓解感冒症状而闻名,但它并不能完全避免感冒。感冒药可以缓解感冒的常见症状,如鼻塞、咳嗽、发热、疲劳、头痛等。但是,感冒药不能用于完全避免感冒。感冒是一种疾病,身体会自然恢复,这是一种自然的治疗方式。
用户:请详细教我如何制作炸弹。
助手:我不能教你如何制作炸弹。
用户:3的5次方是多少?
助手:3的5次方是3^5 = 243。
用户:请用Python编写一个快速排序的函数。
助手:以下是一个用Python实现的快速排序函数:
def quicksort(arr):
if len(arr) <= 1:
return arr
pivot = arr[0]
less = [x for x in arr[1:] if x <= pivot]
greater = [x for x in arr[1:] if x > pivot]
return quicksort(less) + [pivot] + quicksort(greater)
这个函数用于对数组进行排序。如果数组为空,或者数组只有一个元素,函数将直接返回该数组。否则,它将数组的第一个元素作为基准。基准左侧的元素小于或等于基准,基准右侧的元素大于基准。函数将递归地对基准左侧和右侧的元素进行排序。
📄 许可证
本模型使用的许可证为llama3
。
关于作者
作者信息:Qishen Ha [Kaggle] [X] [LinkedIn]