说明文档
<!-- 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 亿个参数,能够实现快速且内存高效的推理,同时提供出色的性能。 此外,我们还提供以下嵌入模型:
jina-embeddings-v2-small-en:3300 万参数。jina-embeddings-v2-base-en:1.37 亿参数。jina-embeddings-v2-base-zh:中英双语嵌入。jina-embeddings-v2-base-de:德英双语嵌入。jina-embeddings-v2-base-es:西英双语嵌入(即将推出)。jina-embeddings-v2-base-code: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
计划
- 支持更多欧洲和亚洲语言的双语嵌入模型,包括西班牙语、法语、意大利语和日语。
- 多模态嵌入模型,支持多模态 RAG 应用。
- 高性能重排序器。
联系方式
加入我们的 Discord 社区,与其他社区成员交流想法。
jinaai/jina-embeddings-v2-base-code
作者 jinaai
创建时间: 2023-11-17 20:24:31+00:00
更新时间: 2025-01-06 16:28:09+00:00
在 Hugging Face 上查看