🚀 Nomic Embed Code: 最先端のコード検索モデル
Nomic Embed Codeは、コード検索タスクに特化した最先端のコード埋め込みモデルです。高性能、多言語対応、完全オープンソースといった特長を備えています。
ブログ | 技術レポート | AWS SageMaker | Atlas埋め込みと非構造化データ分析プラットフォーム
nomic-embed-code
は、コード検索タスクで優れた性能を発揮する最先端のコード埋め込みモデルです。
- 高性能: CodeSearchNetでVoyage Code 3やOpenAI Embed 3 Largeを上回る性能を発揮します。
- 多言語コード対応: 複数のプログラミング言語(Python、Java、Ruby、PHP、JavaScript、Go)に対応しています。
- 高度なアーキテクチャ: 70億パラメータのコード埋め込みモデルです。
- 完全オープンソース: モデルの重み、学習データ、評価コードが公開されています。
モデル |
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 |
🚀 クイックスタート
✨ 主な機能
- 高性能: CodeSearchNetでVoyage Code 3やOpenAI Embed 3 Largeを上回る性能を発揮します。
- 多言語コード対応: 複数のプログラミング言語(Python、Java、Ruby、PHP、JavaScript、Go)に対応しています。
- 高度なアーキテクチャ: 70億パラメータのコード埋め込みモデルです。
- 完全オープンソース: モデルの重み、学習データ、評価コードが公開されています。
📦 インストール
必要な依存関係を以下のコマンドでインストールできます。
pip install transformers sentence-transformers torch
💻 使用例
基本的な使用法
Transformers
import torch
import torch.nn.functional as F
from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained("nomic-ai/nomic-embed-code")
model = AutoModel.from_pretrained("nomic-ai/nomic-embed-code")
def last_token_pooling(hidden_states, attention_mask):
sequence_lengths = attention_mask.sum(-1) - 1
return hidden_states[torch.arange(hidden_states.shape[0]), sequence_lengths]
queries = ['Represent this query for searching relevant code: Calculate the n-th factorial']
codes = ['def fact(n):\n if n < 0:\n raise ValueError\n return 1 if n == 0 else n * fact(n - 1)']
code_snippets = queries + codes
encoded_input = tokenizer(code_snippets, padding=True, truncation=True, return_tensors='pt')
model.eval()
with torch.no_grad():
model_output = model(**encoded_input)[0]
embeddings = last_token_pooling(model_output, encoded_input['attention_mask'])
embeddings = F.normalize(embeddings, p=2, dim=1)
print(embeddings.shape)
similarity = F.cosine_similarity(embeddings[0], embeddings[1], dim=0)
print(similarity)
SentenceTransformers
from sentence_transformers import SentenceTransformer
queries = ['Calculate the n-th factorial']
code_snippets = ['def fact(n):\n if n < 0:\n raise ValueError\n return 1 if n == 0 else n * fact(n - 1)']
model = SentenceTransformer("nomic-ai/nomic-embed-code")
query_emb = model.encode(queries, prompt_name="query")
code_emb = model.encode(code_snippets)
similarity = model.similarity(query_emb[0], code_emb[0])
print(similarity)
📚 ドキュメント
モデルアーキテクチャ
- 総パラメータ数: 70億
- 学習アプローチ: CoRNStackデータセットを使用し、二重整合性フィルタリングと段階的なハードネガティブマイニングで学習されました。
- サポートされる言語: Python、Java、Ruby、PHP、JavaScript、Go
CoRNStackデータセットの作成
重複排除されたStackv2から、関数のドキュメント文字列とそれに対応するコードからテキスト - コードのペアを作成しました。ドキュメント文字列が英語でない、短すぎる、またはURL、HTMLタグ、無効な文字を含む低品質のペアを除外しました。さらに、モデルが長距離依存関係を学習できるように、256トークン以上のドキュメント文字列を残しました。

初期フィルタリングの後、二重整合性フィルタリングを使用して潜在的にノイズの多い例を削除しました。各ドキュメント文字列とコードのペアを埋め込み、各ドキュメント文字列とすべてのコード例の間の類似度を計算します。特定のドキュメント文字列に対して、対応するコード例が最も類似する上位2つの例に含まれない場合、そのペアをデータセットから削除します。
学習中は、新しいカリキュラムベースのハードネガティブマイニング戦略を採用して、モデルが難しい例から学習できるようにします。ソフトマックスベースのサンプリング戦略を使用して、時間とともに難易度を増しながらハードネガティブを段階的にサンプリングします。
🔧 技術詳細
- モデルは70億パラメータのコード埋め込みモデルで、高性能なコード検索を実現します。
- CoRNStackデータセットを使用して学習され、多言語のコードに対応しています。
- 二重整合性フィルタリングと段階的なハードネガティブマイニングを用いた学習アプローチにより、精度が向上しています。
📄 ライセンス
このプロジェクトはApache-2.0ライセンスの下で公開されています。
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},
}