可用于英日双语场景下的文本生成任务。该项目提供38亿参数的英日双语GPT-NeoX模型,采用36层、2816隐藏维度的Transformer架构,在英日语任务上表现优于同规模模型。【此简介由AI生成】
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
spiece.modelLFS | 1 年前 | |
| 1 年前 | ||
| 1 年前 |
以下内容由 AI 翻译,如有问题请 点此提交 issue 反馈
license: mit language:
- en
- zh pipeline_tag: text-generation frameworks:
- PyTorch hardwares:
- NPU library_name: openmind
bilingual-gpt-neox-4b

概述
本仓库提供了一个参数量为38亿的英日双语GPT-NeoX模型。
-
库
该模型使用基于[EleutherAI/gpt-neox]的代码进行训练。
-
模型架构
一个拥有36层、2816隐藏维度的基于Transformer的语言模型。
-
预训练
该模型在约5240亿个tokens上进行训练,训练数据来自以下语料库的混合:
- [Japanese CC-100]
- [Japanese C4]
- [The Pile]
- [Redpajama]
- [Wikipedia]
-
模型系列
变体 链接 双语4B MiniGPT4 双语4B PPO https://modelers.cn/models/FuJianAscend/bilingual-gpt-neox-4b-instruction-ppo 双语4B SFT https://modelers.cn/models/FuJianAscend/bilingual-gpt-neox-4b-instruction-sft 双语4B 8K 双语4B https://modelers.cn/models/FuJianAscend/bilingual-gpt-neox-4b 日语3.6B PPO 日语3.6B SFT-v2 日语3.6B SFT 日语3.6B -
贡献者
- [Tianyu Zhao]
- [Toshiaki Wakatsuki]
- [Akio Kaga]
- [Koh Mitsuda]
- [Kei Sawada]
基准测试
-
日语基准测试
我们的评估实验表明,bilingual-gpt-neox-4b模型在日语任务上的表现略优于之前的[Japanese GPT-NeoX 3.6B]。
- 4任务平均准确率基于JCommonsenseQA、JNLI、MARC-ja和JSQuAD的结果。
- 6任务平均准确率基于JCommonsenseQA、JNLI、MARC-ja、JSQuAD、XWinograd和JAQKET-v2的结果。
模型 4任务平均准确率 6任务平均准确率 bilingual-gpt-neox-4b-instruction-ppo 61.01 61.16 bilingual-gpt-neox-4b-instruction-sft 61.02 61.69 bilingual-gpt-neox-4b 56.12 51.83 japanese-gpt-neox-3.6b-instruction-ppo 59.86 60.07 japanese-gpt-neox-3.6b 55.07 50.32 -
英语基准测试
使用[EleutherAI Language Model Evaluation Harness],我们发现bilingual-gpt-neox-4b的性能与相似规模的英语/多语言模型相当。
- 平均准确率基于Arc-Challenge、Arc-Easy、BoolQ、COPA、HellaSwag、OpenBookQA、PIQA、PROST、SWAG和WinoGrande的结果。
模型 平均准确率 mpt-7b 59.30 llama-7b 57.35 bloom-7b 51.51 xglm-7.5b 50.96 xglm-4.5b 50.15 bilingual-gpt-neox-4b 49.49 bloom-3b 48.56 xglm-2.9b 47.44 bloom-1.7b 46.54
如何使用
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,以确保上述功能正确运行。