标签:
- 句子转换器
- 句子相似度
- 特征提取
基础模型: Shuu12121/CodeModernBERT-Snake
管道标签: 句子相似度
库名称: sentence-transformers
指标:
- 代码评估
模型索引:
- 名称: 基于Shuu12121/CodeModernBERT-Snake的SentenceTransformer
结果:
- 任务:
类型: 语义相似度
名称: 语义相似度
数据集:
名称: 代码文档字符串开发集
类型: 代码-文档字符串-开发集
指标:
- 类型: 皮尔逊余弦
值: 空
名称: 皮尔逊余弦
- 类型: 斯皮尔曼余弦
值: 空
名称: 斯皮尔曼余弦
许可证: apache-2.0
数据集:
- code-search-net/code_search_net
语言:
- 英语
基于Shuu12121/CodeModernBERT-Snake🐍的SentenceTransformer
该模型是一个句子转换器模型,基于**Shuu12121/CodeModernBERT-Snake微调而来,后者是一个专为代码设计的ModernBERT模型,由我从零开始预训练**。
它专为代码搜索设计,能高效计算代码片段与文档之间的语义相似度。
该模型的一个关键特点是其最大序列长度可达8192个标记,使其能够处理极长的代码片段和文档,非常适合全面的代码搜索任务。
尽管这是一个非常小的模型,仅有约7500万参数,但它在代码搜索任务中表现出色。
模型评估
CoIR评估结果
尽管模型规模小,但在CodeSearchNet基准测试中取得了令人印象深刻的72.12分。
这一性能与拥有4亿参数的Salesforce/SFR-Embedding-Code-400M_R模型相当。
由于专注于代码搜索,该模型不支持其他任务,因此未提供其他任务的评估分数。
下表展示了与知名模型的对比,表明该模型在紧凑的尺寸下仍能取得高分。
模型名称 |
CodeSearchNet 评分 |
Shuu12121/CodeModernBERT-Snake |
72.12 |
Salesforce/SFR-Embedding-Code-2B_R |
73.5 |
CodeSage-large-v2 |
94.26 |
Salesforce/SFR-Embedding-Code-400M_R |
72.53 |
CodeSage-large |
90.58 |
Voyage-Code-002 |
81.79 |
E5-Mistral |
54.25 |
E5-Base-v2 |
67.99 |
OpenAI-Ada-002 |
74.21 |
BGE-Base-en-v1.5 |
69.6 |
BGE-M3 |
43.23 |
UniXcoder |
60.2 |
GTE-Base-en-v1.5 |
43.35 |
Contriever |
34.72 |
模型详情
使用方法
安装
要安装Sentence Transformers,请运行以下命令:
pip install -U sentence-transformers
模型加载与推理
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("Shuu12121/CodeSearch-ModernBERT-Snake")
sentences = [
'加密zip文件',
'def freeze_encrypt(dest_dir, zip_filename, config, opt):\n \n pgp_keys = grok_keys(config)\n icefile_prefix = "aomi-%s" % \\\n os.path.basename(os.path.dirname(opt.secretfile))\n if opt.icefile_prefix:\n icefile_prefix = opt.icefile_prefix\n\n timestamp = time.strftime("%H%M%S-%m-%d-%Y",\n datetime.datetime.now().timetuple())\n ice_file = "%s/%s-%s.ice" % (dest_dir, icefile_prefix, timestamp)\n if not encrypt(zip_filename, ice_file, pgp_keys):\n raise aomi.exceptions.GPG("Unable to encrypt zipfile")\n\n return ice_file',
'def transform(self, sents):\n \n\n def convert(tokens):\n return torch.tensor([self.vocab.stoi[t] for t in tokens], dtype=torch.long)\n\n if self.vocab is None:\n raise Exception(\n "Must run .fit() for .fit_transform() before " "calling .transform()."\n )\n\n seqs = sorted([convert(s) for s in sents], key=lambda x: -len(x))\n X = torch.LongTensor(pad_sequence(seqs, batch_first=True))\n return X',
]
embeddings = model.encode(sentences)
print(embeddings.shape)
similarities = model.similarity(embeddings, embeddings)
print(similarities.shape)
库版本
- Python: 3.11.11
- Sentence Transformers: 3.4.1
- Transformers: 4.50.0
- PyTorch: 2.6.0+cu124
- Accelerate: 1.5.2
- Datasets: 3.4.1
- Tokenizers: 0.21.1
引用信息
Sentence Transformers
@inproceedings{reimers-2019-sentence-bert,
title = "Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks",
author = "Reimers, Nils and Gurevych, Iryna",
booktitle = "Proceedings of the 2019 Conference on Empirical Methods in Natural Language Processing",
month = "11",
year = "2019",
publisher = "Association for Computational Linguistics",
url = "https://arxiv.org/abs/1908.10084",
}
MultipleNegativesRankingLoss
@misc{henderson2017efficient,
title={Efficient Natural Language Response Suggestion for Smart Reply},
author={Matthew Henderson and Rami Al-Rfou and Brian Strope and Yun-hsuan Sung and Laszlo Lukacs and Ruiqi Guo and Sanjiv Kumar and Balint Miklos and Ray Kurzweil},
year={2017},
eprint={1705.00652},
archivePrefix={arXiv},
primaryClass={cs.CL}
}