HuggingFace镜像/bilingual-gpt-neox-4b-instruction-sft
模型介绍文件和版本分析
下载使用量0

bilingual-gpt-neox-4b-instruction-sft

rinna-icon


更新

  • 2023/08/02 我们上传了新训练的 rinna/bilingual-gpt-neox-4b-instruction-sft,该模型采用 MIT 许可证。
    • 若您已下载 2023/07/31 日发布的旧模型,请避免将其用于商业用途。
    • 2023/08/02 日发布的新模型基于许可限制较宽松的数据集构建,且评估性能更优,因此建议使用新模型。
    • 供参考,我们提供了旧模型与当前模型的 pytorch_model.bin 文件的 MD5 校验和值。
      • 2023/07/31 模型:edf190a323c0ae63f71476700fb0b462
      • 2023/08/02 模型:de72aa5b66beee7b65783c96f687d186
  • 2023/07/31 在先前发布的 rinna/bilingual-gpt-neox-4b-instruction-sft 中,我们发现部分训练数据采用非商业性许可证,因此该模型不符合 MIT 许可证的要求。我们决定移除旧版本,并基于许可限制较宽松的数据集重新构建一个新的 SFT 模型。新模型将在数日内上传。对于此次疏忽造成的错误,我们深表歉意。

概述

本仓库提供一个参数规模为 38 亿的英日双语 GPT-NeoX 模型。

该模型基于 rinna/bilingual-gpt-neox-4b 构建,并通过微调使其成为一个遵循指令的对话代理。

  • 模型架构

    一个包含 36 层、隐藏层大小为 2816 的基于Transformer的语言模型。

  • 微调

    微调数据为以下数据集的子集。

    • [Anthropic HH RLHF 数据] 及其日语翻译
    • [FLAN 指令微调数据] 及其日语翻译
  • 模型系列

    变体链接
    Bilingual 4B MiniGPT4
    Bilingual 4B PPOhttps://modelers.cn/models/FuJianAscend/bilingual-gpt-neox-4b-instruction-ppo
    Bilingual 4B SFThttps://modelers.cn/models/FuJianAscend/bilingual-gpt-neox-4b-instruction-sft
    Bilingual 4B 8K
    Bilingual 4Bhttps://modelers.cn/models/FuJianAscend/bilingual-gpt-neox-4b
    Japanese 3.6B PPO
    Japanese 3.6B SFT-v2
    Japanese 3.6B SFT
    Japanese 3.6B
  • 贡献者

    [Tianyu Zhao] 与 [Kei Sawada]


基准测试

我们的评估实验表明,bilingual-gpt-neox-4b-instruction-sft模型在日语任务上的表现略优于之前的[Japanese GPT-NeoX 3.6B PPO]。

  • 4任务平均准确率基于JCommonsenseQA、JNLI、MARC-ja和JSQuAD的结果。
    • 6任务平均准确率基于JCommonsenseQA、JNLI、MARC-ja、JSQuAD、XWinograd和JAQKET-v2的结果。
模型4任务平均准确率6任务平均准确率
bilingual-gpt-neox-4b-instruction-ppo61.0161.16
bilingual-gpt-neox-4b-instruction-sft61.0261.69
bilingual-gpt-neox-4b56.1251.83
japanese-gpt-neox-3.6b-instruction-ppo59.8660.07
japanese-gpt-neox-3.6b55.0750.32

模型使用方法

注意: 由于模型对解码超参数(例如 temperature、top_p、top_k、repetition_penalty)敏感,建议针对您的任务探索最佳设置。

import argparse
from openmind import AutoModel, AutoTokenizer
from openmind import is_torch_npu_available

def parse_args():
    parser = argparse.ArgumentParser()
    parser.add_argument("--model_name_or_path",type=str,help="Path to model",default=None,)
    args = parser.parse_args()
    return args


if __name__ == '__main__':
    if is_torch_npu_available():
        device = "npu:0"
    else:
        device = "cpu"
    args = parse_args()
    model_path = args.model_name_or_path

    # Note: CodeSage requires adding eos token at the end of
    # each tokenized sequence to ensure good performance
    tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True, add_eos_token=True)

    model = AutoModel.from_pretrained(model_path, trust_remote_code=True).to(device)

    inputs = tokenizer.encode("def print_hello_world():\tprint('Hello World!')", return_tensors="pt").to(device)
    embedding = model(inputs)[0]
    print(f'Dimension of the embedding: {embedding[0].size()}')
    print(embedding)

分词

该模型使用基于[sentencepiece]的分词器。

  • 分词器的词汇量为65,536。
  • 它采用字节回退机制,将未知文本片段分解为UTF-8字节片段,以避免生成<UNK>标记。
  • 它能够识别连续空格、换行符和制表符,从而更好地处理结构化文本。
  • 我们关闭了默认的前置空格行为,因为这对日语处理没有帮助。
  • 具体来说,单个空格始终被处理为一个标记,这样任何英语单词都不会像许多其他分词器那样带有前导空格(例如_Hello)。
    • 这一决策以牺牲英语处理效率为代价,换取了统一的空格处理方式。
    • 由于空格易于预测,这显著降低了英语数据的下一个标记预测损失。
  • 不要忘记设置use_fast=False,以确保上述功能正确运行。