ONNX 模型库
返回模型

说明文档

<!-- TODO: add evaluation results here --> <br><br>

<p align="center"> <img src="https://huggingface.co/datasets/jinaai/documentation-images/resolve/main/logo.webp" alt="Jina AI: Your Search Foundation, Supercharged!" width="150px"> </p>

<p align="center"> <b>由 <a href="https://jina.ai/"><b>Jina AI</b></a> 训练的文字嵌入模型。</b> </p>

快速开始

使用 jina-embeddings-v2-base-code 最简单的方式是使用 Jina AI 的 Embedding API

预期用途与模型信息

jina-embeddings-v2-base-code 是一种多语言嵌入模型,支持英语和 30 种广泛使用的编程语言。 与其他 jina-embeddings-v2 系列模型一样,它支持 8192 的序列长度。

jina-embeddings-v2-base-code 基于 Bert 架构 (JinaBert),支持 ALiBi 的对称双向变体,以支持更长的序列长度。 骨干网络 jina-bert-v2-base-code 是在 github-code 数据集上预训练的。 该模型进一步在 Jina AI 收集的超过 1.5 亿个编程问答和文档字符串源代码对上进行训练。 这些对来自各种领域,并通过严格的清洗过程精心筛选。

该嵌入模型使用 512 的序列长度进行训练,但由于 ALiBi 的特性,可以外推到 8k 序列长度(甚至更长)。 这使我们的模型适用于各种用例,特别是需要处理长文档的场景,包括技术问答和代码搜索。

该模型有 1.61 亿个参数,能够实现快速且内存高效的推理,同时提供出色的性能。 此外,我们还提供以下嵌入模型:

<details><summary>支持的(编程)语言</summary> <p>

  • 英语
  • 汇编
  • 批处理文件
  • C
  • C#
  • C++
  • CMake
  • CSS
  • Dockerfile
  • FORTRAN
  • Go
  • Haskell
  • HTML
  • Java
  • JavaScript
  • Julia
  • Lua
  • Makefile
  • Markdown
  • PHP
  • Perl
  • PowerShell
  • Python
  • Ruby
  • Rust
  • SQL
  • Scala
  • Shell
  • TypeScript
  • TeX
  • Visual Basic </p> </details>

数据与参数

Jina Embeddings V2 技术报告

使用方法

<details><summary>集成模型时请使用 mean pooling。</summary> <p>

为什么使用 mean pooling?

mean pooling 从模型输出中获取所有 token 嵌入,并在句子/段落级别对它们进行平均。 已被证明是生成高质量句子嵌入的最有效方法。 我们提供了一个 encode 函数来处理这个问题。

但是,如果您想不使用默认的 encode 函数:

import torch
import torch.nn.functional as F
from transformers import AutoTokenizer, AutoModel

def mean_pooling(model_output, attention_mask):
    token_embeddings = model_output[0]
    input_mask_expanded = attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float()
    return torch.sum(token_embeddings * input_mask_expanded, 1) / torch.clamp(input_mask_expanded.sum(1), min=1e-9)

sentences = [
    'How do I access the index while iterating over a sequence with a for loop?',
    '# Use the built-in enumerator\nfor idx, x in enumerate(xs):\n    print(idx, x)',
]

tokenizer = AutoTokenizer.from_pretrained('jinaai/jina-embeddings-v2-base-code')
model = AutoModel.from_pretrained('jinaai/jina-embeddings-v2-base-code', trust_remote_code=True)

encoded_input = tokenizer(sentences, padding=True, truncation=True, return_tensors='pt')

with torch.no_grad():
    model_output = model(**encoded_input)

embeddings = mean_pooling(model_output, encoded_input['attention_mask'])
embeddings = F.normalize(embeddings, p=2, dim=1)

</p> </details>

您可以直接从 transformers 包使用 Jina Embedding 模型:

!pip install transformers
from transformers import AutoModel
from numpy.linalg import norm

cos_sim = lambda a,b: (a @ b.T) / (norm(a)*norm(b))
model = AutoModel.from_pretrained('jinaai/jina-embeddings-v2-base-code', trust_remote_code=True)
embeddings = model.encode(
    [
        'How do I access the index while iterating over a sequence with a for loop?',
        '# Use the built-in enumerator\nfor idx, x in enumerate(xs):\n    print(idx, x)',
    ]
)
print(cos_sim(embeddings[0], embeddings[1]))
>>> tensor([[0.7282]])

如果您只想处理较短的序列,例如 2k,请将 max_length 参数传递给 encode 函数:

embeddings = model.encode(
    ['Very long ... code'],
    max_length=2048
)

使用其最新版本 (v2.3.0) 的 sentence-transformers 也支持 Jina 嵌入(请确保您已登录 huggingface):

!pip install -U sentence-transformers
from sentence_transformers import SentenceTransformer
from sentence_transformers.util import cos_sim

model = SentenceTransformer(
    "jinaai/jina-embeddings-v2-base-code",
    trust_remote_code=True
)

# 控制您的输入序列长度,最高可达 8192
model.max_seq_length = 1024

embeddings = model.encode([
    'How do I access the index while iterating over a sequence with a for loop?',
    '# Use the built-in enumerator\nfor idx, x in enumerate(xs):\n    print(idx, x)',
])
print(cos_sim(embeddings[0], embeddings[1]))

您还可以使用 Transformers.js 库在 JavaScript 中计算嵌入。

// npm i @xenova/transformers
import { pipeline, cos_sim } from '@xenova/transformers';

const extractor = await pipeline('feature-extraction', 'jinaai/jina-embeddings-v2-base-code', {
    quantized: false, // 注释掉此行以使用 8 位量化版本
});

const texts = [
    'How do I access the index while iterating over a sequence with a for loop?',
    '# Use the built-in enumerator\nfor idx, x in enumerate(xs):\n    print(idx, x)',
]
const embeddings = await extractor(texts, { pooling: 'mean' });

const score = cos_sim(embeddings[0].data, embeddings[1].data);
console.log(score);
// 0.7281748759529421

计划

  1. 支持更多欧洲和亚洲语言的双语嵌入模型,包括西班牙语、法语、意大利语和日语。
  2. 多模态嵌入模型,支持多模态 RAG 应用。
  3. 高性能重排序器。

联系方式

加入我们的 Discord 社区,与其他社区成员交流想法。

jinaai/jina-embeddings-v2-base-code

作者 jinaai

feature-extraction sentence-transformers
↓ 364.2K ♥ 136

创建时间: 2023-11-17 20:24:31+00:00

更新时间: 2025-01-06 16:28:09+00:00

在 Hugging Face 上查看

文件 (18)

.gitattributes
1_Pooling/config.json
README.md
config.json
generation_config.json
model.safetensors
modules.json
onnx/model.onnx ONNX
onnx/model_fp16.onnx ONNX
onnx/model_quantized.onnx ONNX
pytorch_model.bin
sentence_bert_config.json
special_tokens_map.json
tokenizer.json
tokenizer_config.json
train_results.json
trainer_state.json
vocab.json