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

bilingual-gpt-neox-4b-instruction-ppo

rinna-icon


概述

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

该模型基于rinna/bilingual-gpt-neox-4b-instruction-sft构建,并已对齐为一个遵循指令的对话代理。

  • 模型架构

    一个拥有36层、2816隐藏维度的基于Transformer的语言模型。

  • RLHF

    遵循OpenAI InstructGPT论文,基于人类反馈的强化学习(RLHF)已被用于使模型行为与输入指令对齐。具体而言,模型训练分为两个阶段,即有监督微调(SFT)和基于PPO的强化学习(RL)。

    • 第一个SFT阶段生成rinna/bilingual-gpt-neox-4b-instruction-sft。
    • 第二个RL阶段生成本模型。
  • 强化学习

    我们在RL阶段使用了[CarperAI/trlx]及其PPO算法实现。

    RL数据是以下数据集的子集,并已被翻译成日语。

    • [Anthropic HH RLHF data]
  • 模型系列

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

    [Tianyu Zhao] 和 [Kei Sawada]


基准测试

我们的评估实验表明,与双语GPT-NeoX 4B SFT相比,PPO并未显著提升模型在日语LLM基准测试中的性能,但我们观察到PPO模型的对话体验优于其SFT版本。

  • 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

如何使用

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,以确保上述功能正确运行。