quantized_by: Nomic
pipeline_tag: sentence-similarity
base_model: nomic-ai/nomic-embed-code
base_model_relation: quantized
tags:
- sentence-similarity
- feature-extraction
license: apache-2.0
Nomic Embed CodeのLlama.cpp量子化: 最先端のコード検索モデル
ブログ | 技術レポート | AWS SageMaker | Atlas Embeddingと非構造化データ分析プラットフォーム
量子化にはllama.cppのコミット11683f579を使用。
オリジナルモデル: nomic-embed-code
使用方法
このモデルはllama.cppサーバーやllama.cpp埋め込みモデルをサポートする他のソフトウェアで使用可能。
nomic-embed-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 = 'n番目の階乗を計算'
query_embed = embed(['関連するコードを検索するためのクエリを表現: ' + query])[0]
print(f'クエリ: {query!r}')
for d, e in zip(docs, docs_embed):
print(f'\n類似度 {dot(query_embed, e):.2f}:\n{d}')
以下のような出力が得られます:
クエリ: 'n番目の階乗を計算'
類似度 0.49:
def fn(n):
if n < 0:
raise ValueError
return 1 if n == 0 else n * fn(n - 1)
類似度 0.32:
def fn(n):
print(("Fizz" * (n % 3 == 0) + "Buzz" * (n % 5 == 0)) or n)
以下のファイルをダウンロード(ブランチ全体ではなく):
モデル概要
nomic-embed-code
はコード検索タスクで優れた最先端のコード埋め込みモデルです:
- 高性能: CodeSearchNetでVoyage Code 3とOpenAI Embed 3 Largeを上回る
- 多言語コードサポート: 複数のプログラミング言語に対応(Python、Java、Ruby、PHP、JavaScript、Go)
- 先進的アーキテクチャ: 7Bパラメータのコード埋め込みモデル
- 完全オープンソース: モデル重み、トレーニングデータ、評価コードを公開
モデル |
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 |
モデルアーキテクチャ
- 総パラメータ数: 7B
- トレーニング手法: CoRNStackデータセットでデュアル一貫性フィルタリングとプログレッシブハードネガティブマイニングを使用してトレーニング
- 対応言語: Python、Java、Ruby、PHP、JavaScript、Go
CoRNStackデータセットのキュレーション
重複排除されたStackv2から開始し、関数のdocstringと対応するコードからテキスト-コードペアを作成。docstringが英語でない、短すぎる、URLやHTMLタグ、無効な文字を含む低品質ペアを除外。さらに、モデルが長距離依存関係を学習できるように、256トークン以上の長さのdocstringを保持。

初期フィルタリング後、デュアル一貫性フィルタリングを使用して潜在的にノイズの多い例を削除。各docstringとコードペアを埋め込み、各docstringとすべてのコード例の間の類似度を計算。与えられたdocstringに対して、対応するコード例が上位2つの類似例に見つからない場合、そのペアをデータセットから削除。
トレーニング中、モデルが難しい例から学習できるように、新しいカリキュラムベースのハードネガティブマイニング戦略を採用。時間の経過とともに難易度を上げながらハードネガティブをサンプリングするソフトマックスベースのサンプリング戦略を使用。
Nomicコミュニティに参加
引用
モデル、データセット、またはトレーニングコードが役立つ場合は、私たちの研究を引用してください:
@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},
}