🚀 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をベースにした最先端のブルガリア語モデルです。このモデルは無料で利用可能で、Gemma利用規約の下で配布されています。このモデルは、ブルガリアのソフィアにあるソフィア大学スト・クリメント・オヒリスキ校の一部であるINSAIT
によって作成されました。
🚀 クイックスタート
まずは、transformersライブラリの最新バージョンをインストールします。
pip install -U 'transformers[torch]'
次に、transformersでモデルをロードします。
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",
)
✨ 主な機能
- GoogleのGemma 2 27Bオープンモデルをベースに構築されています。
- 約1000億トークン(うち850億はブルガリア語)で継続的に事前学習され、ブルガリア語の文化や言語能力を獲得しつつ、英語の性能も維持しています。
- 実世界の会話を用いて作成された新しいブルガリア語命令データセットで命令微調整されています。
- 標準的な英語ベンチマーク、それらのブルガリア語翻訳版、および独自収集したブルガリア語固有のベンチマークで評価され、多くの大規模オープンモデルを上回る性能を発揮します。
- 数千の実世界のブルガリア語会話に基づくチャット性能評価で、商用モデルの小型バリアントを大きく上回り、最良の商用モデルと同等の性能を発揮します。
📦 インストール
まずは、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
)
from transformers import AutoTokenizer
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]))
📚 ドキュメント
モデルの説明
このモデルはGoogleのGemma 2 27Bオープンモデルをベースに構築されています。INSAITがEMNLP’24で発表したBranch-and-Merge戦略を用いて、約1000億トークン(うち850億はブルガリア語)で継続的に事前学習され、ブルガリア語の文化や言語能力を獲得しつつ、英語の性能も維持しています。事前学習段階では、ブルガリア語のウェブクロールデータ、Wikipediaなどの無料で利用可能なデータセット、INSAIT研究所が収集したさまざまな専門的なブルガリア語データセット、および人気のある英語データセットの機械翻訳を使用しています。その後、実世界の会話を用いて作成された新しいブルガリア語命令データセットで命令微調整されています。詳細については、ブログ記事をご覧ください。
ベンチマークと結果

モデルは、標準的な英語ベンチマーク、それらのブルガリア語翻訳版、および独自収集したブルガリア語固有のベンチマークで評価されています。
- Winogrande challenge:世界知識と理解能力のテスト
- Hellaswag:文章の完成度のテスト
- ARC Easy/Challenge:論理的推論能力のテスト
- TriviaQA:雑学知識のテスト
- GSM-8k:高校数学の選択問題の解決
- Exams:自然科学と社会科学の高校問題の解決
- MON:4年生から12年生までの様々な科目の試験を含む
これらのベンチマークは、モデルの論理的推論、数学、知識、言語理解などのスキルをテストしており、https://github.com/insait-institute/lm-evaluation-harness-bg で提供されています。上のグラフは、BgGPT 9BとBgGPT 27Bの他の大規模オープンモデルとの性能比較を示しています。結果は、9Bと27Bの両方のモデルがブルガリア語で優れた能力を持っており、アリババのQwen 2.5 72BやMetaのLlama3.1 70Bなどのはるかに大きなモデルを上回ることを示しています。さらに、BgGPT 9BとBgGPT 27Bの両方が、Mistral-7Bをベースにした前バージョンのBgGPT(BgGPT-7B-Instruct-v0.2、図では灰色で表示)を大幅に改善しています。最後に、これらのモデルは、ベースとなっている元のGoogle Gemma 2モデルから引き継いだ優れた英語性能を維持しています。
チャットの好み

ベンチマーク評価に加えて、BgGPT 27Bモデルを約100の異なるトピックにまたがる数千の実世界のブルガリア語会話に基づいてチャット性能で評価しました。結果は、このモデルがブルガリア語のチャット性能で、AnthropicのClaude HaikuやOpenAIのGPT-4o-miniなどの商用モデルの小型バリアントの性能を大きく上回り、GPT-4o自身によると、AnthropicのClaude SonnetやOpenAIのGPT-4oなどの最良の商用モデルと同等の性能を発揮することを示しています。
推奨パラメータ
最適な性能を得るために、以下のテキスト生成パラメータを推奨します。これらのパラメータは、モデルを広範囲にテストした結果です。
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>
はチャットシーケンスの最初のトークンのみにする必要があります。
例:
<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]))
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 までご連絡いただく
実世界での使用と洞察は、さまざまなユースケースに対するモデルの性能と動作を最適化するのに役立ちます。
概要
重要提示
⚠️ 重要提示
Gemma 2をベースにしたモデル(BgGPT-Gemma-2-27B-IT-v1.0など)は、フラッシュアテンションをサポートしていません。使用すると性能が低下します。
使用建议
💡 使用建议
最適な性能を得るために、推奨されるパラメータを使用することをおすすめします。また、命令形式に従ってプロンプトを作成することで、命令微調整の恩恵を最大限に享受できます。