库名称:transformers
标签:
- gemma2
- instruct
- bggpt
- insait
许可证:gemma
语言:
- 保加利亚语
- 英语
基础模型:
- google/gemma-2-27b-it
- google/gemma-2-27b
任务标签:文本生成
INSAIT-Institute/BgGPT-Gemma-2-27B-IT-v1.0

INSAIT推出BgGPT-Gemma-2-27B-IT-v1.0,这是一款基于google/gemma-2-27b和google/gemma-2-27b-it的先进保加利亚语模型。
BgGPT-Gemma-2-27B-IT-v1.0可免费使用,并遵循Gemma使用条款分发。
该模型由保加利亚索菲亚大学圣克莱门特奥赫里德斯基分校的INSAIT
团队开发。
模型描述
该模型基于谷歌的Gemma 2 27B开源模型构建。
通过INSAIT在EMNLP’24上提出的分支与合并策略,模型在约1000亿token(其中850亿为保加利亚语)上进行了持续预训练,
使其在保留英语能力的同时,获得了卓越的保加利亚文化和语言理解能力。
预训练阶段使用了多种数据集,包括保加利亚语网络爬取数据、维基百科等公开数据集、INSAIT研究所收集的各类专业保加利亚语数据集,
以及热门英语数据集的机器翻译版本。
随后,模型在新构建的保加利亚语指令数据集上进行了指令微调,该数据集基于真实对话生成。
更多信息请参阅我们的博客文章。
基准测试与结果


我们在标准英语基准测试、其保加利亚语翻译版本以及我们收集的保加利亚语特定基准上评估了模型表现:
- Winogrande挑战:测试世界知识和理解
- Hellaswag:测试句子补全能力
- ARC简单/挑战:测试逻辑推理
- TriviaQA:测试常识知识
- GSM-8k:解决高中数学选择题
- 考试题:解决自然科学和社会科学的高中题目
- MON:包含4至12年级多学科考试题目
这些基准测试评估了模型的逻辑推理、数学、知识、语言理解等能力,详见https://github.com/insait-institute/lm-evaluation-harness-bg。
上图展示了BgGPT 9B和BgGPT 27B与其他大型开源模型的对比。结果表明,两款模型在保加利亚语上的表现远超更大规模的模型,
包括阿里巴巴的Qwen 2.5 72B和Meta的Llama3.1 70B。此外,BgGPT 9B和27B较基于Mistral-7B的旧版BgGPT(BgGPT-7B-Instruct-v0.2,图中灰色部分)有显著提升。
同时,我们的模型继承了谷歌Gemma 2原版模型的优异英语性能。
聊天偏好

除基准测试外,我们还针对100多个主题的上千条真实保加利亚语对话评估了BgGPT 27B的聊天表现。
结果显示,我们的模型在保加利亚语聊天场景中显著优于Anthropic的Claude Haiku和OpenAI的GPT-4o-mini等商业小模型,
且与顶级商业模型如Anthropic的Claude Sonnet和OpenAI的GPT-4o表现相当(基于GPT-4o自身评估)。
在🤗 Transformers中使用
首先安装最新版transformers库:
pip install -U 'transformers[torch]'
然后加载模型:
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained(
"INSAIT-Institute/BgGPT-Gemma-2-27B-IT-v1.0",
torch_dtype=torch.bfloat16,
attn_implementation="eager",
device_map="auto",
)
推荐参数
经过充分测试,我们推荐以下文本生成参数:
from transformers import GenerationConfig
generation_params = GenerationConfig(
max_new_tokens=2048,
temperature=0.1,
top_k=25,
top_p=1,
repetition_penalty=1.1,
eos_token_id=[1,107],
do_sample=True
)
理论上,适当提高temperature参数也能获得良好效果。
指令格式
为发挥指令微调效果,提示应以起始符<bos>
开头,并遵循Gemma 2聊天模板。<bos>
应仅作为聊天序列的首个token。
示例:
<bos><start_of_turn>user
Софийският университет е основан кога?<end_of_turn>
<start_of_turn>model
也可通过apply_chat_template()
方法使用聊天模板:
tokenizer = AutoTokenizer.from_pretrained(
"INSAIT-Institute/BgGPT-Gemma-2-27B-IT-v1.0",
use_default_system_prompt=False,
)
messages = [
{"role": "user", "content": "Софийският университет е основан кога?"},
]
input_ids = tokenizer.apply_chat_template(
messages,
return_tensors="pt",
add_generation_prompt=True,
return_dict=True
)
outputs = model.generate(
**input_ids,
generation_config=generation_params
)
print(tokenizer.decode(outputs[0]))
重要提示:基于Gemma 2的模型(如BgGPT-Gemma-2-27B-IT-v1.0)不支持Flash Attention,使用会导致性能下降。
与vLLM配合使用
vLLM调用示例:
from vllm import LLM, SamplingParams
from vllm.inputs import TokensPrompt
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained(
"INSAIT-Institute/BgGPT-Gemma-2-27B-IT-v1.0",
use_default_system_prompt=False,
)
sampling_params = SamplingParams(
max_tokens=2048,
temperature=0.1,
top_k=25,
top_p=1,
repetition_penalty=1.1,
stop_token_ids=[1, 107],
)
llm = LLM(
model="INSAIT-Institute/BgGPT-Gemma-2-27B-IT-v1.0",
dtype="bfloat16",
enforce_eager=True
)
messages = [
{"role": "user", "content": "Софийският университет е основан кога?"},
]
formatted_prompt = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
input_ids = tokenizer(
formatted_prompt,
add_special_tokens=False
).input_ids
prompt = TokensPrompt(prompt_token_ids=input_ids)
output = llm.generate(
prompt,
sampling_params
)
generated_text = output[0].outputs[0].text
print(generated_text)
与GGML/llama.cpp配合使用
GGUF格式模型及使用说明见:INSAIT-Institute/BgGPT-Gemma-2-27B-IT-v1.0-GGUF。
社区反馈
我们欢迎社区反馈以改进BgGPT。如有建议或问题:
- 通过Hugging Face社区讨论功能分享使用体验
- 发送邮件至bggpt@insait.ai
您的实际使用经验和见解对优化模型性能至关重要。
摘要