OpenChat 是一系列基于多轮对话的高质量数据集微调的开源语言模型。通过仅从约 9 万条 ShareGPT 对话中筛选出约 6 千条 GPT-4 对话,OpenChat 旨在以有限的数据实现高性能。
通用模型:
代码模型:
注意: 请使用 bfloat16 加载预训练模型
我们在 OpenChat GitHub 仓库中提供了完整的源代码,包括兼容 "ChatCompletions" API 的推理服务器。
OpenChat 还包含一个网页界面,以提升用户体验。请参阅 GitHub 仓库中的说明。
对话模板涉及拼接标记。
除了基础模型词汇外,还添加了回合结束标记 <|end_of_turn|>,其 id 为 eot_token_id。
# OpenChat
[bos_token_id] + tokenize("Human: ") + tokenize(user_question) + [eot_token_id] + tokenize("Assistant: ")
# OpenCoder
tokenize("User:") + tokenize(user_question) + [eot_token_id] + tokenize("Assistant:")提示:在 BPE 中,tokenize(A) + tokenize(B) 并不总是等于 tokenize(A + B)
以下是生成对话模板的代码:
@dataclass
class ModelConfig:
# Prompt
system: Optional[str]
role_prefix: dict
ai_role: str
eot_token: str
bos_token: Optional[str] = None
# Get template
def generate_conversation_template(self, tokenize_fn, tokenize_special_fn, message_list):
tokens = []
masks = []
# begin of sentence (bos)
if self.bos_token:
t = tokenize_special_fn(self.bos_token)
tokens.append(t)
masks.append(False)
# System
if self.system:
t = tokenize_fn(self.system) + [tokenize_special_fn(self.eot_token)]
tokens.extend(t)
masks.extend([False] * len(t))
# Messages
for idx, message in enumerate(message_list):
# Prefix
t = tokenize_fn(self.role_prefix[message["from"]])
tokens.extend(t)
masks.extend([False] * len(t))
# Message
if "value" in message:
t = tokenize_fn(message["value"]) + [tokenize_special_fn(self.eot_token)]
tokens.extend(t)
masks.extend([message["from"] == self.ai_role] * len(t))
else:
assert idx == len(message_list) - 1, "Empty message for completion must be on the last."
return tokens, masks
MODEL_CONFIG_MAP = {
# OpenChat / OpenChat-8192
"openchat": ModelConfig(
# Prompt
system=None,
role_prefix={
"human": "Human: ",
"gpt": "Assistant: "
},
ai_role="gpt",
eot_token="<|end_of_turn|>",
bos_token="<s>",
),
# OpenCoder / OpenCoderPlus
"opencoder": ModelConfig(
# Prompt
system=None,
role_prefix={
"human": "User:",
"gpt": "Assistant:"
},
ai_role="gpt",
eot_token="<|end_of_turn|>",
bos_token=None,
)
}我们的权重许可证取决于其对应的基础模型。例如,OpenChat 和 OpenChat-8192 的许可证与 LLaMA 模型的 许可证 相同,仅限非商业用途,而 OpenCoderPlus 则遵循 StarCoder 的 许可证。此外,我们应遵守 ShareGPT 的 隐私实践。在 GitHub 上发布的 代码 遵循 Apache License 2.0。
@software{openllms23,
title = {{OpenLLMs: Less is More for Open-source Models}},
author = {Wang, Guan and Cheng, Sijie and Yu, Qiying and Liu, Changling},
doi = {10.5281/zenodo.8105775},
url = {https://github.com/imoneoi/openchat},
version = {pre-release},
year = {2023},
month = {7},
}统计推断是数据科学的核心组成部分,涉及从样本数据中得出关于总体的结论。它包括估计参数和检验假设,这些是构建预测模型和理解数据的基础。
参数估计涉及使用样本数据来估计总体参数。常见的估计方法包括:
点估计的一个常见例子是样本均值,它用于估计总体均值。
置信区间是区间估计的一种形式,提供了参数真实值的可能范围。例如,95% 置信区间意味着如果我们多次重复实验,95% 的置信区间将包含真实的总体参数。
假设检验用于评估关于总体参数的假设。它涉及以下步骤:
贝叶斯推断是一种基于贝叶斯定理的统计推断方法。它涉及更新先验概率以获得后验概率。
贝叶斯定理表示为:
其中:
贝叶斯推断广泛应用于机器学习和数据科学中,特别是在需要更新模型参数的情况下。
统计推断是数据科学中不可或缺的工具,使我们能够从数据中提取有意义的见解。无论是通过参数估计、假设检验还是贝叶斯推断,统计推断都为我们提供了强大的方法来理解和解释数据。