模型概述
模型特點
模型能力
使用案例
🚀 Salesforce/SFR-Embedding-Code-2B_R
SFR-Embedding 由 Salesforce Research 研發。
Salesforce/SFR-Embedding-Code 是一個通用的嵌入模型家族,用於多語言和多任務的代碼與文本檢索。在多個代碼檢索任務中,與各種開源代碼嵌入模型相比,它表現出了卓越的性能。
查看我們的 論文 以瞭解更多詳情!
我們還提供 400M 規模的模型 Salesforce/SFR-Embedding-Code-400_R
🚀 快速開始
運行示例
本項目提供了使用 Transformers
和 Sentence Transformers
庫運行模型的示例代碼,你可以參考以下代碼進行嘗試。
✨ 主要特性
- 多語言多任務支持:適用於多語言和多任務的代碼與文本檢索。
- 性能卓越:在多個代碼檢索任務中,相比各種開源代碼嵌入模型表現更優。
📚 詳細文檔
倫理考量
本版本僅用於支持學術論文的研究目的。我們的模型、數據集和代碼並非專門為所有下游用途而設計或評估。我們強烈建議用戶在部署此模型之前,評估並解決與準確性、安全性和公平性相關的潛在問題。我們鼓勵用戶考慮人工智能的常見侷限性,遵守適用法律,並在選擇用例時採用最佳實踐,特別是在錯誤或濫用可能對人們的生活、權利或安全產生重大影響的高風險場景中。有關用例的進一步指導,請參考我們的 AUP 和 AI AUP。
許可證聲明
用戶需要自行評估與原始數據集和數據對應的許可證或條款和條件下的任何義務或責任。本版本僅用於支持學術論文的研究目的。
此發佈的模型是 Gemma 的微調版本,Gemma 是根據 ai.google.dev/gemma/terms 中的 Gemma 使用條款提供並受其約束。此外,此模型的使用受到 ai.google.dev/gemma/prohibited_use_policy(“禁止使用政策”)中規定的限制,該政策特此通過引用併入本協議。
CoIR 基準測試性能
模型 | 模型大小 | CoIR AVG (NDCG@10) |
---|---|---|
SFR-Embedding-Code | 2B | 67.4 |
CodeSage-Large-v2 | 1.3B | 64.2 |
CodeSage-Large | 1.3B | 61.0 |
SFR-Embedding-Code | 400M | 61.9 |
CodeRankEmbed | 137M | 60.1 |
CodeSage-Base | 356M | 57.5 |
Voyage-Code-002 | - | 56.3 |
CodeSage-Small | 130M | 54.4 |
團隊成員
SFR-Embedding 團隊(† 表示聯合負責人)
- Ye Liu
- Rui Meng
- Shafiq Rayhan Joty
- Silvio Savarese
- Caiming Xiong †
- Yingbo Zhou †
- Semih Yavuz †
💻 使用示例
基礎用法
Transformers
import torch.nn.functional as F
from transformers import AutoTokenizer, AutoModel
# Each query needs to be accompanied by an corresponding instruction describing the task.
query_instruction_example = "Given Code or Text, retrieval relevant content"
queries = [
"how to implement quick sort in Python?"
]
# No instruction needed for retrieval passages
passages = [
"def quick_sort(arr):\n if len(arr) <= 1:\n return arr\n pivot = arr[len(arr) // 2]\n left = [x for x in arr if x < pivot]\n middle = [x for x in arr if x == pivot]\n right = [x for x in arr if x > pivot]\n return quick_sort(left) + middle + quick_sort(right)",
"def bubble_sort(arr):\n n = len(arr)\n for i in range(n):\n for j in range(0, n-i-1):\n if arr[j] > arr[j+1]:\n arr[j], arr[j+1] = arr[j+1], arr[j]\n return arr"
]
# load model with tokenizer
model = AutoModel.from_pretrained('Salesforce/SFR-Embedding-Code-2B_R', trust_remote_code=True)
# get the embeddings
max_length = 32768
query_embeddings = model.encode_queries(queries, instruction=query_instruction_example, max_length=max_length)
passage_embeddings = model.encode_corpus(passages, max_length=max_length)
# normalize embeddings
query_embeddings = F.normalize(query_embeddings, p=2, dim=1)
passage_embeddings = F.normalize(passage_embeddings, p=2, dim=1)
scores = (query_embeddings @ passage_embeddings.T) * 100
print(scores.tolist())
# [[69.26929473876953, 58.41606903076172]]
Sentence Transformers
from sentence_transformers import SentenceTransformer
# Each query needs to be accompanied by an corresponding instruction describing the task.
query_instruction_example = "Instruct: Given Code or Text, retrieval relevant content\nQuery: "
queries = ["how to implement quick sort in Python?"]
# No instruction needed for retrieval passages
passages = [
"def quick_sort(arr):\n if len(arr) <= 1:\n return arr\n pivot = arr[len(arr) // 2]\n left = [x for x in arr if x < pivot]\n middle = [x for x in arr if x == pivot]\n right = [x for x in arr if x > pivot]\n return quick_sort(left) + middle + quick_sort(right)",
"def bubble_sort(arr):\n n = len(arr)\n for i in range(n):\n for j in range(0, n-i-1):\n if arr[j] > arr[j+1]:\n arr[j], arr[j+1] = arr[j+1], arr[j]\n return arr"
]
# Load the Sentence Transformer model, including pooling
model = SentenceTransformer('Salesforce/SFR-Embedding-Code-2B_R', trust_remote_code=True)
# Compute the embeddings for both queries and passages. Use 'prompt' for queries only
query_embeddings = model.encode(queries, prompt=query_instruction_example)
passage_embeddings = model.encode(passages)
# Compute the similarities between the queries and passages
similarities = model.similarity(query_embeddings, passage_embeddings)
print(similarities)
# tensor([[0.6927, 0.5842]])
引用
@article{liu2024codexembed,
title={CodeXEmbed: A Generalist Embedding Model Family for Multiligual and Multi-task Code Retrieval},
author={Liu, Ye and Meng, Rui and Jot, Shafiq and Savarese, Silvio and Xiong, Caiming and Zhou, Yingbo and Yavuz, Semih},
journal={arXiv preprint arXiv:2411.12644},
year={2024}
}
📄 許可證
本項目採用 CC BY-NC 4.0 許可證。用戶需要自行評估與原始數據集和數據對應的許可證或條款和條件下的任何義務或責任。此發佈的模型是 Gemma 的微調版本,Gemma 是根據 ai.google.dev/gemma/terms 中的 Gemma 使用條款提供並受其約束。此外,此模型的使用受到 ai.google.dev/gemma/prohibited_use_policy(“禁止使用政策”)中規定的限制。







