模型简介
模型特点
模型能力
使用案例
🚀 Llama.cpp量化的Nomic Embed Code:先进的代码检索器
nomic-embed-code
是一款先进的代码嵌入模型,在代码检索任务中表现出色。它具有高性能、支持多语言代码、采用先进架构且完全开源等特点,能为开发者提供强大的代码检索能力。
🚀 快速开始
本模型可与 llama.cpp server 以及其他支持 llama.cpp 嵌入模型的软件一起使用。
使用 nomic-embed-code
进行嵌入的查询必须以以下前缀开头:
Represent this query for searching relevant code:
例如,以下代码展示了如何使用该前缀对用户问题进行嵌入,例如在 RAG 应用程序中:
启动 llama.cpp 服务器:
llama-server -m nomic-embed-code.Q4_0.gguf --embeddings --pooling last
运行以下代码:
import requests
from textwrap import dedent
def dot(va, vb):
return sum(a*b for a, b in zip(va, vb))
def embed(texts):
resp = requests.post('http://localhost:8080/v1/embeddings', json={'input': texts}).json()
return [d['embedding'] for d in resp['data']]
docs = [
dedent("""\
def fn(n):
if n < 0:
raise ValueError
return 1 if n == 0 else n * fn(n - 1)
""").strip(),
dedent("""\
def fn(n):
print(("Fizz" * (n % 3 == 0) + "Buzz" * (n % 5 == 0)) or n)
""").strip(),
]
docs_embed = embed(docs)
query = 'Calculate the n-th factorial'
query_embed = embed(['Represent this query for searching relevant code: ' + query])[0]
print(f'query: {query!r}')
for d, e in zip(docs, docs_embed):
print(f'\nsimilarity {dot(query_embed, e):.2f}:\n{d}')
你应该会看到类似以下的输出:
query: 'Calculate the n-th factorial'
similarity 0.49:
def fn(n):
if n < 0:
raise ValueError
return 1 if n == 0 else n * fn(n - 1)
similarity 0.32:
def fn(n):
print(("Fizz" * (n % 3 == 0) + "Buzz" * (n % 5 == 0)) or n)
✨ 主要特性
- 高性能:在 CodeSearchNet 上的表现优于 Voyage Code 3 和 OpenAI Embed 3 Large。
- 多语言代码支持:针对多种编程语言(Python、Java、Ruby、PHP、JavaScript、Go)进行了训练。
- 先进架构:70 亿参数的代码嵌入模型。
- 完全开源:模型权重、训练数据和 评估代码 均已发布。
📦 安装指南
文档中未提及具体安装步骤,可参考相关软件(如 llama.cpp server)的官方文档进行安装。
💻 使用示例
基础用法
import requests
from textwrap import dedent
def dot(va, vb):
return sum(a*b for a, b in zip(va, vb))
def embed(texts):
resp = requests.post('http://localhost:8080/v1/embeddings', json={'input': texts}).json()
return [d['embedding'] for d in resp['data']]
docs = [
dedent("""\
def fn(n):
if n < 0:
raise ValueError
return 1 if n == 0 else n * fn(n - 1)
""").strip(),
dedent("""\
def fn(n):
print(("Fizz" * (n % 3 == 0) + "Buzz" * (n % 5 == 0)) or n)
""").strip(),
]
docs_embed = embed(docs)
query = 'Calculate the n-th factorial'
query_embed = embed(['Represent this query for searching relevant code: ' + query])[0]
print(f'query: {query!r}')
for d, e in zip(docs, docs_embed):
print(f'\nsimilarity {dot(query_embed, e):.2f}:\n{d}')
高级用法
文档中未提及高级用法相关内容。
📚 详细文档
模型概述
nomic-embed-code
是一款先进的代码嵌入模型,在代码检索任务中表现出色:
模型 | Python | Java | Ruby | PHP | JavaScript | Go |
---|---|---|---|---|---|---|
Nomic Embed Code | 81.7 | 80.5 | 81.8 | 72.3 | 77.1 | 93.8 |
Voyage Code 3 | 80.8 | 80.5 | 84.6 | 71.7 | 79.2 | 93.2 |
OpenAI Embed 3 Large | 70.8 | 72.9 | 75.3 | 59.6 | 68.1 | 87.6 |
Nomic CodeRankEmbed - 137M | 78.4 | 76.9 | 79.3 | 68.8 | 71.4 | 92.7 |
CodeSage Large v2 (1B) | 74.2 | 72.3 | 76.7 | 65.2 | 72.5 | 84.6 |
CodeSage Large (1B) | 70.8 | 70.2 | 71.9 | 61.3 | 69.5 | 83.7 |
Qodo Embed 1 7B | 59.9 | 61.6 | 68.4 | 48.5 | 57.0 | 81.4 |
模型架构
- 总参数:70 亿
- 训练方法:在 CoRNStack 数据集上进行训练,采用双一致性过滤和渐进式难负样本挖掘策略。
- 支持语言:Python、Java、Ruby、PHP、JavaScript 和 Go。
CoRNStack 数据集整理
从去重后的 Stackv2 开始,我们从函数文档字符串和相应代码中创建文本 - 代码对。我们过滤掉了低质量的对,例如文档字符串不是英文、太短或包含 URL、HTML 标签或无效字符的对。此外,我们保留了文本长度为 256 个标记或更长的文档字符串,以帮助模型学习长距离依赖关系。
初始过滤后,我们使用双一致性过滤来去除可能有噪声的示例。我们对每个文档字符串和代码对进行嵌入,并计算每个文档字符串与每个代码示例之间的相似度。如果给定文档字符串的前 2 个最相似示例中未找到相应的代码示例,则从数据集中删除该对。
在训练过程中,我们采用了一种基于课程的新型难负样本挖掘策略,以确保模型从具有挑战性的示例中学习。我们使用基于 softmax 的采样策略,随着时间的推移逐步采样难度不断增加的难负样本。
文件下载
文件名 | 量化类型 | 文件大小 | 描述 |
---|---|---|---|
nomic-embed-code.f32.gguf | f32 | 26.35GiB | 完整的 FP32 权重。 |
nomic-embed-code.f16.gguf | f16 | 13.18GiB | 完整的 FP16 权重。 |
nomic-embed-code.bf16.gguf | bf16 | 13.18GiB | 完整的 BF16 权重。 |
nomic-embed-code.Q8_0.gguf | Q8_0 | 7.00GiB | 极高质量,通常不需要,但有最大可用量化。 |
nomic-embed-code.Q6_K.gguf | Q6_K | 5.41GiB | 非常高质量,接近完美,推荐。 |
nomic-embed-code.Q5_K_M.gguf | Q5_K_M | 4.72GiB | 高质量,推荐。 |
nomic-embed-code.Q5_K_S.gguf | Q5_K_S | 4.60GiB | 高质量,推荐。 |
nomic-embed-code.Q4_1.gguf | Q4_1 | 4.22GiB | 旧格式,性能与 Q4_K_S 相似,但在苹果硅芯片上的每瓦令牌数有所提高。 |
nomic-embed-code.Q4_K_M.gguf | Q4_K_M | 4.08GiB | 质量良好,适用于大多数用例的默认大小,推荐。 |
nomic-embed-code.Q4_K_S.gguf | Q4_K_S | 3.87GiB | 质量略低,但节省更多空间,推荐。 |
nomic-embed-code.Q4_0.gguf | Q4_0 | 3.84GiB | 旧格式,为 ARM 和 AVX CPU 推理提供在线重新打包。 |
nomic-embed-code.Q3_K_L.gguf | Q3_K_L | 3.59GiB | 质量较低但可用,适用于低内存情况。 |
nomic-embed-code.Q3_K_M.gguf | Q3_K_M | 3.33GiB | 低质量。 |
nomic-embed-code.Q3_K_S.gguf | Q3_K_S | 3.03GiB | 低质量,不推荐。 |
nomic-embed-code.Q2_K.gguf | Q2_K | 2.64GiB | 质量非常低,但出人意料地可用。 |
🔧 技术细节
量化信息
使用 llama.cpp 的提交 11683f579 进行量化。
原始模型:nomic-embed-code
社区参与
- Nomic 嵌入生态系统:https://www.nomic.ai/embed
- 网站:https://nomic.ai
- Twitter:https://twitter.com/nomic_ai
- Discord:https://discord.gg/myY5YDR8z8
📄 许可证
本项目采用 Apache 2.0 许可证。
📖 引用
如果你发现该模型、数据集或训练代码有用,请引用我们的工作:
@misc{suresh2025cornstackhighqualitycontrastivedata,
title={CoRNStack: High-Quality Contrastive Data for Better Code Retrieval and Reranking},
author={Tarun Suresh and Revanth Gangi Reddy and Yifei Xu and Zach Nussbaum and Andriy Mulyar and Brandon Duderstadt and Heng Ji},
year={2025},
eprint={2412.01007},
archivePrefix={arXiv},
primaryClass={cs.CL},
url={https://arxiv.org/abs/2412.01007},
}







