函数调用:在 xLAM 上微调 Llama 3得益于 QLoRA,速度快且内存高效

 

        欢迎来到雲闪世界.最近的大型语言模型 (LLM) 在大多数语言生成任务中都表现出色。然而,由于它们基于下一个标记预测进行操作,因此它们通常难以准确执行数学运算。此外,由于它们的知识匮乏,它们可能缺乏准确回答某些查询所需的信息。

缓解这些问题的一种方法是通过函数调用。函数调用允许 LLM 可靠地连接到外部工具。它支持与外部 API 交互。例如,通过将 LLM 与网络搜索引擎和计算器连接,可以通过函数调用从互联网检索信息并执行数学运算。

在本文中,我们将了解如何微调 LLM 以进行函数调用。我使用 xLAM,这是 Salesforce 发布的包含 60k 条函数调用条目的数据集,用于微调 Llama 3。我们将了解如何格式化数据集以及如何利用微调适配器进行函数调用。

我还制作了这个笔记本,实现了本文中描述的代码以进行微调,以及一些推理示例:

获取笔记本 (#89)

LLM 的函数调用:它是如何工作的?

如果你向标准 LLM 发出“给我 3342398 的平方根”的提示,它将一次一位地生成答案,这可能非常不准确。让我们用 Llama 3 Instruct 试试:

import transformers
import torch

model_id = "meta-llama/Meta-Llama-3-8B-Instruct"
pipeline = transformers.pipeline(
    "text-generation",
    model=model_id,
    model_kwargs={"torch_dtype": torch.bfloat16},
    device_map="auto",
)
messages = [
    {"role": "system", "content": "You are a calculator."},
    {"role": "user", "content": "Give me the square root of 3342398"},
]
terminators = [
    pipeline.tokenizer.eos_token_id,
    pipeline.tokenizer.convert_tokens_to_ids("<|eot_id|>")
]
outputs = pipeline(
    messages,
    max_new_tokens=256,
    eos_token_id=terminators,
    do_sample=True,
    temperature=0.6,
    top_p=0.9,
)
print(outputs[0]["generated_text"][-1])

注意:我使用了Meta 提供的推理代码。我只更改了提示。

结果:

The square root of 3342398 is 1833.13

答案很接近,但错了。正确答案是“1828.222634144977”。LLM 无法准确地进行数学运算。它们可以推理数学问题并得出近似结果,但不如计算器那么准确。它们不是为此设计的。但是,它们可以调用计算器。我们只需要模型“理解”我们请求的是数字3342398的平方根。

为此,我们可以对函数调用数据集上的 LLM 进行微调。通常,函数调用数据集至少有两列:

  • 查询(或提示):这是一个标准提示,例如“给我 3342398 的平方根”
  • 工具调用:一般为JSON格式,例如:
{
    "name": "math.sqrt"    
    "description": "Python square root function"
    "tool_id":20
    "arguments": 
    {
        "1": 33423
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值