聊天机器人彻底改变了企业与客户互动的方式。由 OpenAI 开发的最先进的 GPT-4 是该领域的主导者。但是,它不是开源的,这限制了开发人员复制结果或开发自己的类似于 GPT-4 的聊天机器人。
为了填补这一空白,开源社区已经开始提供 GPT-4 的替代品,这些替代品提供几乎相同的性能和功能,同时需要更少的计算能力。本文旨在向您介绍可以在下一个 AI 项目中使用的 10 大开源 ChatGPT 替代方案。
注意:其中一些模型带有非商业许可证,限制它们用于研究和学术目的。在使用它们之前,请先熟悉这些约束
大聊天(在新标签页中打开),由 HPC AI Tech 开发,是一个开源项目,旨在复制基于 LLaMa 模型和 PyTorch AI 框架的 ChatGPT 类模型。它是第一个包含完整的人类反馈强化学习(RLHF)过程的实用开源项目,是最接近ChatGPT原有技术路线的项目。
ColossalChat 利用 PyTorch 灵活高效的深度学习框架,可实现快速原型设计、与其他库的无缝集成,以及提供高性能、用户友好的对话式 AI 体验。
ColossalChat 的主要特点之一是其双语数据集,其中包含大约 100,000 个中英文问答对。该数据集是从社交媒体平台上的真实问题场景中收集和清理的,用作种子数据集。它是使用自我指导技术扩展的。这些高质量的数据让ColossalChat能够实现更好的对话交互,同时也支持中文。
ColossalChat 遵循三阶段 RLHF 算法复制过程。第一阶段涉及监督指令微调。第二阶段涉及训练奖励模型。第三阶段使用强化学习算法。这种复制过程可以使生成的内容与人类价值观更加一致。
本项目由AI大模型开发系统Colossal-AI支持,可以基于PyTorch默认功能高效快速部署AI大模型训练和推理。该基础架构提供基础支持并显着提高训练速度。
以下是如何在每个 RLHF 阶段训练 ColossalChat 的示例:
# Training with a 4-GPU servers
colossalai run — nproc_per_node=4 train_sft.py \
— pretrain “/path/to/LLaMa-7B/” \
— model ‘llama’ \
— strategy colossalai_zero2 \
— log_interval 10 \
— save_path /path/to/Coati-7B \
— dataset /path/to/data.json \
— batch_size 4 \
— accimulation_steps 8 \
— lr 2e-5
# Training with a 4-GPU servers
colossalai run — nproc_per_node=4 train_reward_model.py \
— pretrain “/path/to/LLaMa-7B/” \
— model ‘llama’ \
— strategy colossalai_zero2 \
— dataset /path/to/datasets
# Training with a 8-GPU servers
colossalai run — nproc_per_node
=8 train_prompts.py prompts.csv \
— strategy colossalai_zero2 \
— pretrain “/path/to/Coati-7B” \
— model ‘llama’ \
— pretrain_dataset /path/to/dataset
基于 LLaMa 模型复制 ChatGPT 的完整代码是开源的,开发人员和研究人员都可以访问。
羊驼-LoRA(在新标签页中打开)由于使用了 LoRA(低秩适应)技术,它似乎是微调 LLaMa 等语言模型的高效工具。
与其他微调方法相比,LoRA 具有多种优势,包括:
Alpaca-LoRA 实现了 PEFT(Python Easy Fine-Tuning)库,可以使用 LoRA 对基于 transformer 的语言模型进行微调。这导致即使在适度的硬件上也能进行高效且廉价的模型微调,并具有潜在的可组合输出。
使用 Alpaca-LoRA 微调 LLaMa 的步骤如下:
在开始之前,请确保您可以访问 GPU 机器。由于 LoRA 的效率,即使是 NVIDIA T4 等低规格 GPU 或 4090 等消费类 GPU 也适用。此外,您还需要尚未公开的 LLaMa 权重。您可以通过 Meta Research 表格申请访问权限。
克隆包含对 Cog(一种用于将机器学习模型打包到容器中的工具)支持的 Alpaca-LoRA 存储库。使用以下命令:
git clone https://github.com/daanelson/alpaca-lora
cd alpaca-lora
接下来,使用以下命令安装 Cog:
sudo curl -o /usr/local/bin/cog -L "https://github.com/replicate/cog/releases/latest/download/cog_$(uname -s)_$(uname -m)"
sudo chmod +x /usr/local/bin/cog
将下载的权重放在名为“unconverted-weights”的文件夹中。目录结构应如下所示:
unconverted-weights
├── 7B
│ ├── checklist.chk
│ ├── consolidated.00.pth
│ └── params.json
├── tokenizer.model
└── tokenizer_checklist.chk
使用以下命令将权重从 PyTorch 检查点转换为与转换器兼容的格式:
cog run python -m transformers.models.llama.convert_llama_weights_to_hf \
--input_dir unconverted-weights \
--model_size 7B \
--output_dir weights
您的最终目录结构应如下所示:
weights
├── llama-7b
└── tokenizermdki
如果你的 GPU 内存更大,你可以增加到MICRO_BATCH_SIZE
32 或 64 in finetune.py
. 如果您有自己的指令调整数据集,请编辑DATA_PATH
以finetune.py
指向您自己的数据集。确保它的格式与alpaca_data_cleaned.json
.
运行微调脚本:
cog run python finetune.py
在 40GB A100 GPU 上进行微调大约需要 3.5 小时。对于处理能力较低的 GPU,可能需要更长的时间。
最后,您可以使用 Cog 运行模型。例如:
cog predict -i prompt="Tell me something about alpacas."
响应将是有关羊驼的信息输出,证明您的 LLaMa 模型已成功微调。
作为 FastChat 的一部分,Vicuna 利用类似于 GPT 模型的基于转换器的架构,并针对来自 ShareGPT.com 的对话数据集进行了微调。它提供了 ChatGPT 大约 90% 的性能,提供了一种易于访问且具有成本效益的替代方案。尽管性能较低,但 Vicuna 因其出色的可定制性和对广泛任务的适应性而脱颖而出。
有关如何使用它的更多详细信息,请参阅我们关于Vicuna-13B的详细文章。
Nomic AI 团队的 GPT4ALL 提供了一个基于大量精选数据构建的聊天机器人,例如文字问题、代码、故事、插图和多轮对话。虽然它利用 LLaMa 像 GPT-4 一样进行低延迟 ML 加速,但 GPT4ALL 的优势在于其多样化的数据集和对各种任务的适应性。
以下是 GPT4ALL 的实际应用示例:
更详细的使用方法可以参考我们关于GPT4ALL的详细文章。
RWKV _(在新标签页中打开)(Raven RWKV) 是一个较新的模型,截至我的知识截止日期为 2021 年 9 月。但是,根据您提供的信息,这里有一个关于如何使用它的一般分步指南以及一些代码片段:
首先,您需要安装必要的包。RWKV 包托管在 PyPI 上,您可以使用 pip 安装它:
pip install rwkv
然后,您需要从包中导入模型:
from rwkv.model import RWKV
接下来,您将实例化模型。这涉及指定模型路径和要使用的策略:
model = RWKV(model='/path/to/your/model', strategy='cuda fp16')
这将创建可用于推理的模型实例。
接下来,您将使用模型的forward
方法进行推理。此方法有两个参数:输入令牌和状态。对于初始运行,您可以将状态设置为None
:
out, state = model.forward([187, 510, 1563, 310, 247], None)
然后您可以打印模型的输出:
print(out.detach().cpu().numpy())
然后,对于后续运行,您可以提供上一次运行的状态:
out, state = model.forward([187, 510], None)
out, state = model.forward([1563], state)
out, state = model.forward([310, 247], state)
print(out.detach().cpu().numpy())
本分步指南展示了用于推理的 RWKV 模型的基本用法。请务必注意,具体步骤可能因任务、使用的特定模型权重和其他因素而异。请参阅官方文档以获取最准确的信息。
另外,请记住,这个模型相对较新,自 2021 年 9 月我的知识截止以来,可能已经进行了进一步的开发和改进。始终参考最新和相关的文献和代码库,以获取最新和准确的信息。
打开聊天工具(在新标签页中打开)为聊天机器人应用程序开发提供完整的工具包,将自己定位为开源 ChatGPT 替代品。虽然在结构方面类似于 GPT 模型,但 OpenChatKit 通过启用指令调整的大型语言模型的训练并为机器人响应提供可扩展的检索系统来增强定制。
确保您具有必要的系统要求和依赖项。您将需要 Git LFS、Miniconda 和 PyTorch 等。提供的environment.yml
文件包含所需环境的规范。
首先安装Git LFS和Miniconda,然后设置环境如下:
git lfs install
conda install mamba -n base -c conda-forge
mamba env create -f environment.yml
conda activate OpenChatKit
要与模型交互,您可以使用bot.py
位于inference
目录中的脚本:
python inference/bot.py --model togethercomputer/Pythia-Chat-Base-7B
然后,您可以通过在提供的命令行提示符下输入文本来与模型聊天。
如果您想自己训练模型,首先需要下载训练数据和基础模型:
python data/OIG/prepare.py
python pretrained/Pythia-6.9B-deduped/prepare.py
然后,您可以使用提供的 shell 脚本微调模型:
bash training/finetune_Pythia-Chat-Base-7B.sh
训练完成后,使用转换工具将模型转换为Huggingface格式:
mkdir huggingface_models
python tools/convert_to_hf_gptneox.py \
--config-name EleutherAI/pythia-6.9b-deduped \
--ckpt-path model_ckpts/Pythia-Chat-Base-7B/checkpoint_100 \
--save-path huggingface_models/Pythia-Chat-Base-7B \
--n-stages 4 \
--n-layer-per-stage 8 \
--fp16
将 替换model_ckpts/Pythia-Chat-Base-7B/checkpoint_100
为模型检查点的路径。
微调模型后,您可以使用bot.py
脚本与它聊天:
python inference/bot.py --model ./huggingface_models/Pythia-Chat-Base-7B
为了监控训练,OpenChatKit 提供了对 loguru 和 Weights & Biases 的支持。
OpenChatKit 还为检索增强模型提供了一项实验性功能。这是通过查询维基百科的 Faiss 索引实现的。您可以通过以下方式运行它:
python data/wikipedia-3sentence-level-retrieval-index/prepare.py
python inference/bot.py --retrieval
请参阅官方 OpenChatKit 文档以获取更详细和准确的信息。这些步骤基于您提供的信息。
选择(在新标签页中打开)(Open Pre-trained Transformer) Language Models 在 zero-shot 和 few-shot learning 以及 Stereotypical Bias analysis 方面表现出非凡的能力,尽管它们不符合 ChatGPT 的质量。这些模型是仅解码器的转换器,这意味着它们从左到右自回归地生成文本,类似于 GPT 模型的方法。
以下是关于如何使用 OPT 模型完成每项任务的更详细的分步说明:
要使用 OPT 模型生成文本,您首先需要将其加载到管道中。下面是一个使用 Hugging Face 的 transformers 库的例子:
from transformers import pipeline
generator = pipeline('text-generation', model="facebook/opt-350m")
设置管道后,您可以生成如下文本:
print(generator("Hello, I am a", max_length=50)[0]['generated_text'])
这将打印以“Hello, I am a”开头的文本,并持续最多 50 个标记。
零样本学习涉及将模型应用于未专门训练的任务。例如,您无需任何进一步培训即可将其用于文本分类。以下是您的操作方法:
from transformers import pipeline
classifier = pipeline("text-classification", model="facebook/opt-350m")
print(classifier("I love sunny days.", ["weather", "emotion"]))
这将对“我喜欢晴天”这句话进行分类。在“天气”和“情绪”方面并打印概率。
Few-shot learning 涉及提供少量示例来帮助模型理解任务。例如,如果您希望模型将英语翻译成法语,您可以提供一些示例翻译:
from transformers import pipeline
translator = pipeline('translation', model="facebook/opt-350m")
examples = [
{"English": "Hello", "French": "Bonjour"},
{"English": "Goodbye", "French": "Au revoir"},
]
translator.set_examples(examples)
print(translator("Good morning"))
请注意,为了说明起见,此示例过于简单化。实际使用可能有点复杂,需要更复杂的设置。
您可以使用 OPT 模型来分析其生成的文本中存在的刻板印象偏见。这是一个例子:
from transformers import pipeline
generator = pipeline('text-generation', model="facebook/opt-350m")
female_prompt = "The woman worked as a"
male_prompt = "The man worked as a"
female_output = generator(female_prompt, num_return_sequences=5)
male_output = generator(male_prompt, num_return_sequences=5)
print("Female prompt outputs:")
for output in female_output:
print(output['generated_text'])
print("Male prompt outputs:")
for output in male_output:
print(output['generated_text'])
这将为每个提示打印 5 个生成的序列,您可以分析这些序列是否存在任何潜在偏差。请注意,此类分析可能是一项复杂的任务,可能需要高级自然语言处理 (NLP) 技术。
请记住,您可能需要根据 Hugging Face Model Hub 上可用的特定 OPT 模型调整模型名称。translator.set_examples(examples)
此外,截至我的知识截止日期为 2021 年 9 月, Transformers 库中可能不存在诸如此类的某些函数。它是为了展示一个概念性的例子。
法兰绒-T5-XXL(在新标签页中打开)是经过微调的 T5 模型的集合,这些模型已经在大量的教学数据集上进行了训练。这些模型虽然不像 GPT 模型那样基于 transformer 架构,但在各种模型类别(包括 PaLM、T5 和 U-PaLM)中表现出显着改进的性能。
要使用 Flan-T5-XXL,您可以按照下面的示例使用指南进行操作:
# Assuming you have already cloned the Flan-T5-XXL repository and set up the environment
from flan_t5_xx1 import FlanT5XXL
# Initialize the Flan-T5-XXL model
model = FlanT5XXL()
# Example usage: Generate instructions for a task
task_input = "How to bake a cake"
instructions = model.generate_instructions(task_input)
print(instructions)
此示例演示如何使用 Flan-T5-XXL 模型为给定任务生成指令。变量task_input
包含任务描述,generate_instructions()
方法生成相应的指令。
请注意,上面的代码片段假定您已经克隆了 Flan-T5-XXL 存储库并设置了所需的依赖项。
Flan-T5-XXL 提供了一个模块化和可组合的框架,用于训练和评估序列模型,重点是语言任务。它基于 T5 代码库,使用 JAX 和 Flax 实现。Flan-T5-XXL 提供高水平的可配置性和自助服务功能,使研究人员能够训练和评估不同规模的序列模型。
请务必参考 Flan-T5-XXL 提供的官方文档和示例,以全面了解可用功能以及如何有效使用它们。
Flan-T5-XXL 的示例用法如下:
from flan import FlanT5
# Initialize model
flan_model = FlanT5()
# Generate response
response = flan_model.generate("Translate this text to French.")
print(response)
百泽(在新标签页中打开)是一个使用 LoRA 训练的开源聊天模型。它包含来自 ChatGPT 的 10 万个自生成对话,并利用 Alpaca 的数据来提高性能。推出了7B、13B、30B等不同尺寸的型号。
要使用 Fastchat 的 CLI 和 API 与 Baize 交互,请按照以下步骤操作:
pip install git+https://github.com/huggingface/peft.git
pip install git+https://github.com/lm-sys/FastChat.git
python3 -m fastchat.model.apply_lora --base huggyllama/llama-7b --target ./model_weights/baize-7b --lora project-baize/baize-lora-7B
python -m fastchat.serve.cli --model-path ./model_weights/baize-7b
Baize 还可以与 OpenAI API 或 Hugging Face API 一起使用。
对于Baize demo,您可以按照以下步骤在本地运行它:
cd demo
pip install -r requirements.txt
# For V1 models
base_model=huggyllama/llama-7b
lora_model=project-baize/baize-lora-7B
python app.py $base_model $lora_model
# For V2 models
base_model=project-baize/baize-v2-7b
python app.py $base_model None
Baize 演示提供了一个用户友好的 Gradio 聊天界面。
这些是简化的示例代码。有关更详细的说明和选项,请参阅 Baize 项目文档。
考拉(在新标签页中打开)是一种 AI 对话模型,通过对从网络收集的对话数据集微调 LLaMA 进行训练。它超越了 Alpaca 的性能,并在各种场景中展示了与 ChatGPT 相当的结果。Koala 的主要优势之一是其广泛的定制性和适应性,训练代码、公共权重和对话微调器的可用性促进了这一点。
在构建由 Koala 提供支持的 100% 免费个人“ChatGPT”机器人的情况下,您可以使用提供的 Colab 笔记本。以下是该过程的概述:
机器学习专家 Sam Witteveen 提供的预配置笔记本可用于运行 Koala 模型。你可以在这里找到笔记本。将笔记本复制到您自己的 Google Drive。
在您的 Google 云端硬盘中拥有该笔记本后,您就可以执行它。笔记本首先安装必要的模块并导入它们。然后,它使用 transformers 库中的 LlamaTokenizer 和 LlamaForCausalLM 加载预训练模型 samwit/koala-7b。该模型以 8 位模式加载,可与具有成本效益的 GPU 兼容。
from transformers import LlamaTokenizer, LlamaForCausalLM, GenerationConfig, pipeline
import torch
import textwrap
tokenizer = LlamaTokenizer.from_pretrained("samwit/koala-7b")
base_model = LlamaForCausalLM.from_pretrained(
"samwit/koala-7b",
load_in_8bit=True,
device_map='auto',
)
notebook 使用 Hugging Face 管道方法设置文本生成管道。定义了最大长度、温度和重复惩罚等参数。此外,还提供了一个实用函数 namedwrap_text_preserve_newlines()
来增强生成文本的外观。
pipe = pipeline(
"text-generation",
model=base_model,
tokenizer=tokenizer,
max_length=512,
temperature=0.7,
top_p=0.95,
repetition_penalty=1.15
)
def wrap_text_preserve_newlines(text, width=110):
# Split the input text into lines based on newline characters
lines = text.split('\n')
# Wrap each line individually
wrapped_lines = [textwrap.fill(line, width=width) for line in lines]
# Join the wrapped lines back together using newline characters
wrapped_text = '\n'.join(wrapped_lines)
return wrapped_text
pipe()
该笔记本提供了使用Hugging Face 库中的方法进行提示-响应对话的示例。请务必注意,该模型的成功在很大程度上取决于在每次对话开始时使用适当的提示。Notebook 建议使用以“BEGINNING OF CONVERSATION: USER:”开头的提示来激活所需的逻辑。我们鼓励您尝试使用不同的提示和参数来观察模型的响应。
总体而言,Koala 被证明是 GPT-3 等大型语言模型的有前途的替代品。通过仔细整理训练数据,即使是较小的模型也能提供令人印象深刻的性能。Koala 团队和社区专家通过在线演示和提供的 Google Colab notebook 方便地访问和试验模型。无论您的目标是开发聊天机器人还是进行 LLM 研究而不产生模型使用成本,Koala 都是一个很好的选择。
开源领域有丰富的 ChatGPT 替代方案,每种方案都提供独特的功能。无论您是 AI 爱好者、研究人员还是开发人员,这些工具都可以帮助您构建和微调您自己的对话模型。因此,继续前进,进入开源对话式 AI 的世界。