HuggingFace镜像/openchat
模型介绍文件和版本分析
下载使用量0

OpenChat: 开源模型的精简之道

OpenChat 是一系列基于多轮对话的高质量数据集微调的开源语言模型。通过仅从约 9 万条 ShareGPT 对话中筛选出约 6 千条 GPT-4 对话,OpenChat 旨在以有限的数据实现高性能。

通用模型:

  • OpenChat: 基于 LLaMA-13B (2048 上下文长度)
    • 🚀 105.7% ChatGPT 在 Vicuna GPT-4 评估中的得分
    • 🔥 80.9% 在 AlpacaEval 中的胜率
    • 🤗 仅使用 6K 数据进行微调!!!
  • OpenChat-8192: 基于 LLaMA-13B (扩展至 8192 上下文长度)
    • 106.6% ChatGPT 在 Vicuna GPT-4 评估中的得分
    • 79.5% 在 AlpacaEval 中的胜率

代码模型:

  • OpenCoderPlus: 基于 StarCoderPlus (原生 8192 上下文长度)
    • 102.5% ChatGPT 在 Vicuna GPT-4 评估中的得分
    • 78.7% 在 AlpacaEval 中的胜率

注意: 请使用 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% 的置信区间将包含真实的总体参数。

假设检验

假设检验用于评估关于总体参数的假设。它涉及以下步骤:

  1. 陈述原假设和备择假设:原假设通常是关于参数的默认假设,而备择假设是与之相反的假设。
  2. 选择显著性水平:显著性水平(通常表示为 α)是拒绝原假设的阈值概率。
  3. 计算检验统计量:使用样本数据计算检验统计量。
  4. 确定 p 值:p 值是观察到的数据在原假设为真时发生的概率。
  5. 做出决策:如果 p 值小于显著性水平,则拒绝原假设。

常见检验

  • t 检验:用于比较两个样本均值。
  • 卡方检验:用于检验观察频数与期望频数之间的差异。
  • ANOVA:用于比较三个或更多组的均值。

贝叶斯推断

贝叶斯推断是一种基于贝叶斯定理的统计推断方法。它涉及更新先验概率以获得后验概率。

贝叶斯定理

贝叶斯定理表示为:

P(A∣B)=P(B∣A)P(A)P(B)P(A|B) = \frac{P(B|A)P(A)}{P(B)}P(A∣B)=P(B)P(B∣A)P(A)​

其中:

  • P(A∣B)P(A|B)P(A∣B) 是给定 B 时 A 的后验概率。
  • P(B∣A)P(B|A)P(B∣A) 是给定 A 时 B 的概率。
  • P(A)P(A)P(A) 是 A 的先验概率。
  • P(B)P(B)P(B) 是 B 的边际概率。

应用

贝叶斯推断广泛应用于机器学习和数据科学中,特别是在需要更新模型参数的情况下。

结论

统计推断是数据科学中不可或缺的工具,使我们能够从数据中提取有意义的见解。无论是通过参数估计、假设检验还是贝叶斯推断,统计推断都为我们提供了强大的方法来理解和解释数据。