Bge Code V1
BGE-Code-v1はLLMベースのコード埋め込みモデルで、コード検索、テキスト検索、多言語検索をサポートし、コード検索とテキスト検索タスクで優れた性能を発揮します。
ダウンロード数 103
リリース時間 : 5/15/2025
モデル概要
BGE-Code-v1は多機能なコード埋め込みモデルで、主にコード検索、テキスト検索、多言語検索タスクに使用されます。中英自然言語クエリと20のプログラミング言語をサポートし、複数のベンチマークテストで最先端の性能を達成しました。
モデル特徴
卓越したコード検索性能
中英自然言語クエリと20のプログラミング言語をサポートし、コード検索タスクで優れた性能を発揮
強力なテキスト検索能力
同規模のテキスト埋め込みモデルと同等の強力なテキスト検索能力を保持
広範な多言語サポート
英語、中国語、日本語、フランス語など多言語で優れた性能を発揮
効率的な推論
FP16加速計算をサポートし、推論効率を向上
モデル能力
コード検索
テキスト検索
多言語検索
SQLクエリ生成
コードドキュメント生成
コード類似性比較
使用事例
コード開発
コード検索
自然言語記述に基づいて関連するコードスニペットを検索
CoIRベンチマークテストで98.08%の精度を達成
SQLクエリ生成
テキスト質問に基づいて対応するSQLクエリを生成
Text2SQLタスクで64.35%の精度を達成
ドキュメント生成
コードドキュメント生成
コードスニペットに基づいて対応するドキュメント文字列を生成
CSNタスクで89.53%の精度を達成
language:
- zh
- en tags:
- sentence-transformers
- sentence-similarity
- feature-extraction
- transformers pipeline_tag: sentence-similarity library_name: sentence-transformers license: apache-2.0
FlagEmbedding
詳細はGitHubをご参照ください: FlagEmbedding.
BGE-Code-v1は、LLMベースのコード埋め込みモデルで、コード検索、テキスト検索、多言語検索をサポートしています。主に以下の能力を示します:
- 優れたコード検索性能: このモデルは卓越したコード検索能力を示し、英語と中国語の自然言語クエリ、および20のプログラミング言語をサポートします。
- 強力なテキスト検索能力: 同規模のテキスト埋め込みモデルに匹敵する強力なテキスト検索能力を維持しています。
- 広範な多言語サポート: BGE-Code-v1は包括的な多言語検索能力を提供し、英語、中国語、日本語、フランス語などの言語で優れた性能を発揮します。
使用方法
FlagEmbeddingの使用
git clone https://github.com/FlagOpen/FlagEmbedding.git
cd FlagEmbedding
pip install -e .
from FlagEmbedding import FlagLLMModel
queries = [
"「Staff」テーブルからIDが4のレコードを削除してください。",
'「Livestock」テーブルから年齢が5歳以上のすべてのレコードを削除してください'
]
documents = [
"DELETE FROM Staff WHERE StaffID = 4;",
"DELETE FROM Livestock WHERE age > 5;"
]
model = FlagLLMModel('BAAI/bge-code-v1',
query_instruction_format="<instruct>{}\n<query>{}",
query_instruction_for_retrieval="テキスト内の質問に対して、その質問に適切な応答となるSQLクエリを検索してください。",
trust_remote_code=True,
use_fp16=True) # use_fp16をTrueに設定すると計算が速くなりますが、性能がわずかに低下します
embeddings_1 = model.encode_queries(queries)
embeddings_2 = model.encode_corpus(documents)
similarity = embeddings_1 @ embeddings_2.T
print(similarity)
デフォルトでは、FlagLLMModelはエンコード時に利用可能なすべてのGPUを使用します。特定のGPUを選択するには、os.environ["CUDA_VISIBLE_DEVICES"]
を設定してください。また、os.environ["CUDA_VISIBLE_DEVICES"]=""
を設定してすべてのGPUを無効にすることもできます。
Sentence Transformersの使用
from sentence_transformers import SentenceTransformer
import torch
# モデルをロードします。オプションでfloat16精度で高速化できます
model = SentenceTransformer(
"BAAI/bge-code-v1",
trust_remote_code=True,
model_kwargs={"torch_dtype": torch.float16},
)
# 指示文に基づいてプロンプトを準備します
instruction = 'テキスト内の質問に対して、その質問に適切な応答となるSQLクエリを検索してください。'
prompt = f'<instruct>{instruction}\n<query>'
# クエリとドキュメントを準備します
queries = [
"「Staff」テーブルからIDが4のレコードを削除してください。",
'「Livestock」テーブルから年齢が5歳以上のすべてのレコードを削除してください'
]
documents = [
"DELETE FROM Staff WHERE StaffID = 4;",
"DELETE FROM Livestock WHERE age > 5;"
]
# クエリとドキュメントの埋め込みを計算します
query_embeddings = model.encode(queries, prompt=prompt)
document_embeddings = model.encode(documents)
# クエリとドキュメントの埋め込み間のコサイン類似度を計算します
similarities = model.similarity(query_embeddings, document_embeddings)
print(similarities)
HuggingFace Transformersの使用
import torch
import torch.nn.functional as F
from torch import Tensor
from transformers import AutoTokenizer, AutoModel
def last_token_pool(last_hidden_states: Tensor,
attention_mask: Tensor) -> Tensor:
left_padding = (attention_mask[:, -1].sum() == attention_mask.shape[0])
if left_padding:
return last_hidden_states[:, -1]
else:
sequence_lengths = attention_mask.sum(dim=1) - 1
batch_size = last_hidden_states.shape[0]
return last_hidden_states[torch.arange(batch_size, device=last_hidden_states.device), sequence_lengths]
def get_detailed_instruct(task_description: str, query: str) -> str:
return f'<instruct>{task_description}\n<query>{query}'
instruction = 'テキスト内の質問に対して、その質問に適切な応答となるSQLクエリを検索してください。'
queries = [
"「Staff」テーブルからIDが4のレコードを削除してください。",
'「Livestock」テーブルから年齢が5歳以上のすべてのレコードを削除してください'
]
documents = [
"DELETE FROM Staff WHERE StaffID = 4;",
"DELETE FROM Livestock WHERE age > 5;"
]
input_texts = queries + documents
tokenizer = AutoTokenizer.from_pretrained('BAAI/bge-code-v1', trust_remote_code=True)
model = AutoModel.from_pretrained('BAAI/bge-code-v1', trust_remote_code=True)
model.eval()
max_length = 4096
# 入力テキストをトークン化します
batch_dict = tokenizer(input_texts, max_length=max_length, padding=True, truncation=True, return_tensors='pt', pad_to_multiple_of=8)
with torch.no_grad():
outputs = model(**batch_dict)
embeddings = last_token_pool(outputs.last_hidden_state, batch_dict['attention_mask'])
# 埋め込みを正規化します
embeddings = F.normalize(embeddings, p=2, dim=1)
scores = (embeddings[:2] @ embeddings[2:].T) * 100
print(scores.tolist())
評価
BGE-Code-v1は、CoIRとCodeRAGのベンチマークで最先端の性能を達成しています。
- CoIR
CodeXEmbed-2B | CodeXEmbed-7B | Voyage-Code-002 | Voyage-Code-003 | BGE-Code-v1 | |
---|---|---|---|---|---|
Apps | 76.86 | 85.38 | 26.52 | 93.62 | 98.08 |
CosQA | 40.47 | 42.47 | 29.79 | 34.45 | 46.72 |
Text2SQL | 78.42 | 78.94 | 69.26 | 62.87 | 64.35 |
CSN | 87.87 | 89.67 | 81.79 | 89.35 | 89.53 |
CSN-CCR | 97.66 | 97.95 | 73.45 | 90.05 | 98.30 |
CodeTrans-Contest | 90.30 | 94.45 | 72.77 | 94.96 | 94.38 |
CodeTrans-DL | 38.57 | 40.46 | 27.48 | 38.57 | 46.13 |
StackOverFlow-QA | 94.47 | 96.33 | 67.68 | 97.17 | 95.35 |
CodeFeedBack-ST | 86.36 | 87.53 | 65.35 | 90.67 | 90.56 |
CodeFeedBack-MT | 65.51 | 68.83 | 28.74 | 93.58 | 94.38 |
AVG | 75.65 | 78.20 | 56.26 | 78.53 | 81.77 |
- CodedRAG
HummanEval | MBPP | DS-1000 | ODEX | RepoEval | SWE-bench-Lite | AVG | |
---|---|---|---|---|---|---|---|
SFR | 100.0 | 99.0 | 19.3 | 37.1 | 83.8 | 62.7 | 67.0 |
Jina-v2-code | 100.0 | 97.7 | 26.2 | 19.9 | 90.5 | 58.3 | 65.4 |
CodeXEmbed-2B | 100.0 | 97.4 | 25.4 | 23.9 | 88.7 | 52.4 | 64.6 |
Voyage-Code-002 | 100.0 | 99.0 | 33.1 | 26.6 | 94.3 | 29.1 | 63.7 |
BGE-Code-v1 | 100.0 | 99.2 | 40.9 | 36.1 | 93.1 | 67.4 | 72.8 |
評価の指示
{
"Apps": "コードコンテストの問題説明が与えられた場合、その問題を解決するのに役立つ関連コードを検索してください。",
"CosQA": "ウェブ検索クエリが与えられた場合、そのクエリに答えるのに役立つ関連コードを検索してください。",
"Text2SQL": "テキスト内の質問が与えられた場合、その質問に適切な応答となるSQLクエリを検索してください。",
"CSN": "コード片が与えられた場合、そのコードを要約するドキュメント文字列を検索してください。",
"CSN-CCR": "コードセグメントが与えられた場合、そのコードの後半部分となるコードセグメントを検索してください。",
"CodeTrans-DL": "コード片が与えられた場合、入力コードと意味的に等価なコードを検索してください。",
"CodeTrans-Contest": "Pythonコードが与えられた場合、入力コードと意味的に等価なC++コードを検索してください。",
"StackOverFlow-QA": "テキストとコードスニペットが混在した質問が与えられた場合、その質問に答えるのに役立つ、テキストとコードスニペットが混在した関連回答を検索してください。",
"CodeFeedBack-ST": "テキストとコードスニペットが混在した質問が与えられた場合、その質問に答えるのに役立つ、テキストとコードスニペットが混在した関連回答を検索してください。",
"CodeFeedBack-MT": "テキストとコードスニペットが混在したマルチターン会話履歴が与えられた場合、その質問に答えるのに役立つ、テキストとコードスニペットが混在した関連回答を検索してください。",
"HummanEval": "テキストとコードスニペットが混在した質問が与えられた場合、その質問に答えるのに役立つ、テキストとコードスニペットが混在した関連回答を検索してください。",
"MBPP": "コード機能のテキスト説明が与えられた場合、対応するコード実装を検索してください。",
"DS-1000": "テキストとコードスニペットが混在した質問が与えられた場合、その質問に答えるのに役立つ、テキストとコードスニペットが混在した関連回答を検索してください。",
"ODEX": "質問が与えられた場合、その質問に答えるのに役立つ、テキストとコードスニペットが混在した関連回答を検索してください。",
"RepoEval": "コードセグメントが与えられた場合、そのコードの後半部分となるコードセグメントを検索してください。",
"SWE-bench-Lite": "バグを含むコードスニペットとそのバグまたはエラーの自然言語説明が与えられた場合、類似のバグまたはエラーに対する解決策や修正を示すコードスニペット(望ましいドキュメント)を検索してください。"
}
引用
このリポジトリが役に立った場合は、スター:star:と引用を検討してください
@article{bge-llm,
title={Making text embedders few-shot learners},
author={Li, Chaofan and Qin, MingHao and Xiao, Shitao and Chen, Jianlyu and Luo, Kun and Shao, Yingxia and Lian, Defu and Liu, Zheng},
journal={arXiv preprint arXiv:2409.15700},
year={2024}
}
@misc{bge-m3,
title={BGE M3-Embedding: Multi-Lingual, Multi-Functionality, Multi-Granularity Text Embeddings Through Self-Knowledge Distillation},
author={Jianlv Chen and Shitao Xiao and Peitian Zhang and Kun Luo and Defu Lian and Zheng Liu},
year={2024},
eprint={2402.03216},
archivePrefix={arXiv},
primaryClass={cs.CL}
}
@misc{bge_embedding,
title={C-Pack: Packaged Resources To Advance General Chinese Embedding},
author={Shitao Xiao and Zheng Liu and Peitian Zhang and Niklas Muennighoff},
year={2023},
eprint={2309.07597},
archivePrefix={arXiv},
primaryClass={cs.CL}
}
Jina Embeddings V3
Jina Embeddings V3 は100以上の言語をサポートする多言語文埋め込みモデルで、文の類似度と特徴抽出タスクに特化しています。
テキスト埋め込み
Transformers 複数言語対応

J
jinaai
3.7M
911
Ms Marco MiniLM L6 V2
Apache-2.0
MS Marcoパッセージランキングタスクで訓練されたクロスエンコーダモデル、情報検索におけるクエリ-パッセージ関連性スコアリング用
テキスト埋め込み 英語
M
cross-encoder
2.5M
86
Opensearch Neural Sparse Encoding Doc V2 Distill
Apache-2.0
蒸留技術に基づくスパース検索モデルで、OpenSearch向けに最適化されており、推論不要のドキュメントエンコーディングをサポートし、検索関連性と効率性においてV1版を上回ります
テキスト埋め込み
Transformers 英語

O
opensearch-project
1.8M
7
Sapbert From PubMedBERT Fulltext
Apache-2.0
PubMedBERTに基づく生物医学エンティティ表現モデルで、自己アライメント事前学習により意味関係の捕捉を最適化します。
テキスト埋め込み 英語
S
cambridgeltl
1.7M
49
Gte Large
MIT
GTE-Largeは強力なセンテンストランスフォーマーモデルで、文の類似度とテキスト埋め込みタスクに特化しており、複数のベンチマークテストで優れた性能を発揮します。
テキスト埋め込み 英語
G
thenlper
1.5M
278
Gte Base En V1.5
Apache-2.0
GTE-base-en-v1.5 は英語の文章変換モデルで、文章類似度タスクに特化しており、複数のテキスト埋め込みベンチマークで優れた性能を発揮します。
テキスト埋め込み
Transformers 複数言語対応

G
Alibaba-NLP
1.5M
63
Gte Multilingual Base
Apache-2.0
GTE Multilingual Base は50以上の言語をサポートする多言語文埋め込みモデルで、文類似度計算などのタスクに適しています。
テキスト埋め込み
Transformers 複数言語対応

G
Alibaba-NLP
1.2M
246
Polybert
polyBERTは、完全に機械駆動の超高速ポリマー情報学を実現するための化学言語モデルです。PSMILES文字列を600次元の密なフィンガープリントにマッピングし、ポリマー化学構造を数値形式で表現します。
テキスト埋め込み
Transformers

P
kuelumbus
1.0M
5
Bert Base Turkish Cased Mean Nli Stsb Tr
Apache-2.0
トルコ語BERTベースの文埋め込みモデルで、意味的類似性タスクに最適化
テキスト埋め込み
Transformers その他

B
emrecan
1.0M
40
GIST Small Embedding V0
MIT
BAAI/bge-small-en-v1.5モデルを微調整したテキスト埋め込みモデルで、MEDIデータセットとMTEB分類タスクデータセットで訓練され、検索タスクのクエリエンコーディング能力を最適化しました。
テキスト埋め込み
Safetensors 英語
G
avsolatorio
945.68k
29
おすすめAIモデル
Llama 3 Typhoon V1.5x 8b Instruct
タイ語専用に設計された80億パラメータの命令モデルで、GPT-3.5-turboに匹敵する性能を持ち、アプリケーションシナリオ、検索拡張生成、制限付き生成、推論タスクを最適化
大規模言語モデル
Transformers 複数言語対応

L
scb10x
3,269
16
Cadet Tiny
Openrail
Cadet-TinyはSODAデータセットでトレーニングされた超小型対話モデルで、エッジデバイス推論向けに設計されており、体積はCosmo-3Bモデルの約2%です。
対話システム
Transformers 英語

C
ToddGoldfarb
2,691
6
Roberta Base Chinese Extractive Qa
RoBERTaアーキテクチャに基づく中国語抽出型QAモデルで、与えられたテキストから回答を抽出するタスクに適しています。
質問応答システム 中国語
R
uer
2,694
98