OASIS Code Embedding 1.5B
模型概述
OASIS是專為代碼檢索系統優化的嵌入模型,擅長語義理解和檢索不同編程環境中的代碼片段。
模型特點
倉庫級程序分析
通過分析整個代碼倉庫來提升對代碼上下文的理解能力
OASIS-instruct數據合成
使用專有算法生成高質量訓練數據,增強模型泛化能力
專用融合損失函數
優化訓練目標函數,提升代碼搜索的準確性
多語言支持
支持多種主流編程語言的代碼嵌入和檢索
模型能力
代碼語義理解
代碼片段檢索
代碼相似度計算
跨語言代碼搜索
使用案例
開發工具
代碼搜索引擎
構建基於語義的代碼搜索系統
在多個基準測試中達到最先進性能
代碼推薦系統
為開發者推薦相關代碼片段
提高開發者工作效率
教育
編程學習輔助
幫助學生查找和理解相關代碼示例
🚀 Kwaipilot OASIS-1.5B
Kwaipilot OASIS-1.5B 是一款先進的代碼嵌入模型,通過獨特的方法在代碼搜索效率和準確性上樹立了新標杆,適用於開發者和研究人員提升代碼檢索系統。
📢 最新消息
- 🔥 [2025/03/12] 我們最新的代碼嵌入模型 OASIS-code-1.5B 現已發佈。
- 🔥 [2025/03/12] 我們的預印本現已在 OASIS-arxiv 上公開。
📚 詳細文檔
模型詳情
模型名稱:OASIS(Order-Augmented Strategy for Improved Code Search)
簡介
OASIS 是 Kwaipilot 開發的一款先進代碼嵌入模型。該模型採用了獨特的專有方法,包括倉庫級程序分析、OASIS 指令數據合成算法和專門的融合損失函數,在代碼搜索效率和準確性方面樹立了新的標杆。
預期用途
該模型非常適合致力於改進代碼檢索系統的開發者和研究人員。OASIS 在需要對不同編程環境中的代碼片段進行語義理解和檢索的場景中表現出色。
訓練與性能
OASIS 在通過倉庫級分析創建的合成數據集上進行訓練,確保對不同編碼風格和語言有廣泛的理解。它在最新的代碼搜索基準測試中展現了先進的性能。
我們的預印本現已在 OASIS-arxiv 上公開。
性能表現
模型 | 大小 | CoSQA | AdvTest | CSN-Py | CSN-Ja | CSN-JS | CSN-PHP | CSN-Go | CSN-Ruby | 平均 |
---|---|---|---|---|---|---|---|---|---|---|
OpenAI-Embedding-Ada-002 | 未知 | 0.4423 | 0.3808 | 0.6802 | 0.7149 | 0.6750 | 0.6062 | 0.8563 | 0.7472 | 0.6378 |
OpenAI-Text-embedding-3-large | 未知 | 0.5538 | 0.4684 | 0.7084 | 0.7292 | 0.6813 | 0.5959 | 0.8764 | 0.7525 | 0.6707 |
jina-embeddings-v2-base-code | 161M | 0.6837 | 0.385 | 0.6634 | 0.6803 | 0.6304 | 0.5701 | 0.8595 | 0.7095 | 0.6477 |
CodeSage-large | 1.3B | 0.4753 | 0.5267 | 0.7077 | 0.7021 | 0.695 | 0.6133 | 0.8371 | 0.7192 | 0.6595 |
CodeFuse-CGE-Small | 3.8B | 0.5619 | 0.4639 | 0.6958 | 0.6863 | 0.6564 | 0.6133 | 0.8637 | 0.7341 | 0.6594 |
OASIS-code-1.5B | 1.5B | 0.5577 | 0.5727 | 0.7369 | 0.7397 | 0.6980 | 0.6384 | 0.8821 | 0.7547 | 0.6975 |
💻 使用示例
基礎用法
pip install -U torch
pip install -U transformers
⚠️ 重要提示
使用 torch_dtype=torch.bfloat16 加載模型時,避免使用 torch=2.5.0。為獲得最佳性能和穩定性,請使用 PyTorch 2.4.1 或更早版本,或升級到 2.5.1 或更高版本。
import torch
import torch.nn.functional as F
from torch import Tensor
from transformers import AutoModel, AutoTokenizer
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]
# Add query prompt
def get_query_prompt(query: str):
query_description = 'Given a code search query, retrieve relevant code snippet that answer the query'
prompt = f'Instruct: {query_description}\nQuery: {query}'
return prompt
query = "How to do quicksort in python?"
code1 = """def bubble_sort(arr):
n = len(arr)
for i in range(n):
swapped = False
for j in range(1, n - i):
if arr[j - 1] > arr[j]:
arr[j - 1], arr[j] = arr[j], arr[j - 1]
swapped = True
if not swapped:
break
return arr"""
code2 = """def quick_sort(arr):
if len(arr) <= 1:
return arr
else:
pivot = arr[0]
less = [x for x in arr[1:] if x <= pivot]
greater = [x for x in arr[1:] if x > pivot]
return quick_sort(less) + [pivot] + quick_sort(greater)"""
model = AutoModel.from_pretrained("Kwaipilot/OASIS-code-1.5B", output_hidden_states=True)
tokenizer = AutoTokenizer.from_pretrained("Kwaipilot/OASIS-code-1.5B")
# Tokenize and inference
inputs = tokenizer([get_query_prompt(query), code1, code2], max_length=1024, padding=True, truncation=True, return_tensors='pt')
outputs = model(**inputs)
# Last token pooling
embeddings = last_token_pool(outputs.hidden_states[-1], inputs['attention_mask'])
print(embeddings.shape)
# torch.Size([3, 1536])
embeddings = F.normalize(embeddings, dim=1, p=2)
similarity = embeddings @ embeddings.T
print(similarity[0, 1:])
# tensor([0.6895, 0.8240])
高級用法(Sentence Transformers)
首先安裝 Sentence Transformers 庫:
pip install -U sentence-transformers
然後你可以加載此模型並進行推理。
from sentence_transformers import SentenceTransformer
# Download from the 🤗 Hub
model = SentenceTransformer("Kwaipilot/OASIS-code-1.5B")#, model_kwargs={"torch_dtype": torch.bfloat16})
query = "How to do quicksort in python?"
code1 = """def bubble_sort(arr):
n = len(arr)
for i in range(n):
swapped = False
for j in range(1, n - i):
if arr[j - 1] > arr[j]:
arr[j - 1], arr[j] = arr[j], arr[j - 1]
swapped = True
if not swapped:
break
return arr"""
code2 = """def quick_sort(arr):
if len(arr) <= 1:
return arr
else:
pivot = arr[0]
less = [x for x in arr[1:] if x <= pivot]
greater = [x for x in arr[1:] if x > pivot]
return quick_sort(less) + [pivot] + quick_sort(greater)"""
# Run inference
query_embedding = model.encode([query], prompt_name="query")
code_embeddings = model.encode([code1, code2])
print(code_embeddings.shape)
# (2, 1536)
# Get the similarity scores for the embeddings
print(model.similarity(query_embedding[0], code_embeddings[0]))
print(model.similarity(query_embedding[0], code_embeddings[1]))
# tensor([[0.6895]])
# tensor([[0.8240]])
BibTeX
@misc{kwaipilotoasis,
title = {Optimized Augmentation Strategy for Improved code Search},
author = {Kwaipilot team},
year = {2024},
}
📄 許可證
本項目採用 MIT 許可證。
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架構的中文抽取式問答模型,適用於從給定文本中提取答案的任務。
問答系統 中文
R
uer
2,694
98