Linq Embed Mistral Bnb 4bit
模型简介
模型特点
模型能力
使用案例
🚀 Linq-AI-Research/Linq-Embed-Mistral (量化版)
本模型是原始模型Linq-AI-Research/Linq-Embed-Mistral
的量化版本。它使用BitsAndBytes
库将模型量化为4位,借助了bnb-my-repo空间完成量化操作。
🚀 快速开始
模型量化详情
- 量化类型:int4
- bnb_4bit_quant_type:nf4
- bnb_4bit_use_double_quant:True
- bnb_4bit_compute_dtype:bfloat16
- bnb_4bit_quant_storage:uint8
原始模型信息
Linq-Embed-Mistral
Linq-Embed-Mistral 基于E5-mistral-7b-instruct和Mistral-7B-v0.1模型构建而成。我们专注于通过先进的数据精炼方法来改进文本检索,这些方法包括精心的数据设计、数据过滤,以及在教师模型指导下进行的负样本挖掘,并且高度针对每个任务进行定制,以提高大语言模型生成的合成数据的质量。这些方法被应用于现有的基准数据集和通过大语言模型生成的高度定制化的合成数据集。我们的主要目标是创建高质量的三元组数据集(查询、正例、负例),从而显著提高文本检索性能。
截至2024年5月29日,Linq-Embed-Mistral在MTEB基准测试中表现出色。该模型在检索任务中表现卓越,在MTEB排行榜列出的所有模型中排名第1
,性能得分达到60.2
。这一出色表现凸显了其在提高搜索精度和可靠性方面的卓越能力。该模型在MTEB基准测试的56个数据集中平均得分达到68.2
,成为排名最高的公开可用模型,总体排名第三。(请注意,截至5月29日,排名第1和第2的NV-Emb-v1和voyage-large-2-instruct在报告其性能时并未发布其模型。)
本项目仅用于研究目的。第三方数据集可能需要遵循其相关许可证下的其他条款和条件。有关更多详细信息,请参考以下具体论文:
✨ 主要特性
- 基于先进模型构建,结合了
E5-mistral-7b-instruct
和Mistral-7B-v0.1
的优势。 - 采用先进的数据精炼方法,提高合成数据质量,进而提升文本检索性能。
- 在MTEB基准测试中表现优异,尤其在检索任务中排名领先。
📦 安装指南
文档中未提及具体安装步骤,可参考相关依赖库的官方文档进行安装,如sentence-transformers
、transformers
等。
💻 使用示例
基础用法
使用Sentence Transformers
from sentence_transformers import SentenceTransformer
# 加载模型
model = SentenceTransformer("Linq-AI-Research/Linq-Embed-Mistral")
# 每个查询必须附带一个描述任务的单句指令
task = 'Given a question, retrieve Wikipedia passages that answer the question'
prompt = f"Instruct: {task}\nQuery: "
queries = [
"최초의 원자력 발전소는 무엇인가?",
"Who invented Hangul?"
]
passages = [
"현재 사용되는 핵분열 방식을 이용한 전력생산은 1948년 9월 미국 테네시주 오크리지에 설치된 X-10 흑연원자로에서 전구의 불을 밝히는 데 사용되면서 시작되었다. 그리고 1954년 6월에 구소련의 오브닌스크에 건설된 흑연감속 비등경수 압력관형 원자로를 사용한 오브닌스크 원자력 발전소가 시험적으로 전력생산을 시작하였고, 최초의 상업용 원자력 엉더이로를 사용한 영국 셀라필드 원자력 단지에 위치한 콜더 홀(Calder Hall) 원자력 발전소로, 1956년 10월 17일 상업 운전을 시작하였다.",
"Hangul was personally created and promulgated by the fourth king of the Joseon dynasty, Sejong the Great.[1][2] Sejong's scholarly institute, the Hall of Worthies, is often credited with the work, and at least one of its scholars was heavily involved in its creation, but it appears to have also been a personal project of Sejong."
]
# 对查询和段落进行编码。我们仅对查询使用提示
query_embeddings = model.encode(queries, prompt=prompt)
passage_embeddings = model.encode(passages)
# 计算(余弦)相似度得分
scores = model.similarity(query_embeddings, passage_embeddings) * 100
print(scores.tolist())
# [[73.72908782958984, 30.122787475585938], [29.15508460998535, 79.25375366210938]]
使用Transformers
import torch
import torch.nn.functional as F
from torch import Tensor
from transformers import AutoTokenizer, AutoModel
def last_token_pool(last_hidden_states: Tensor,
attention_mask: Tensor) -> Tensor:
left_padding = (attention_mask[:, -1].sum() == attention_mask.shape[0])
if left_padding:
return last_hidden_states[:, -1]
else:
sequence_lengths = attention_mask.sum(dim=1) - 1
batch_size = last_hidden_states.shape[0]
return last_hidden_states[torch.arange(batch_size, device=last_hidden_states.device), sequence_lengths]
def get_detailed_instruct(task_description: str, query: str) -> str:
return f'Instruct: {task_description}\nQuery: {query}'
# 每个查询必须附带一个描述任务的单句指令
task = 'Given a question, retrieve Wikipedia passages that answer the question'
queries = [
get_detailed_instruct(task, '최초의 원자력 발전소는 무엇인가?'),
get_detailed_instruct(task, 'Who invented Hangul?')
]
# 检索文档无需添加指令
passages = [
"현재 사용되는 핵분열 방식을 이용한 전력생산은 1948년 9월 미국 테네시주 오크리지에 설치된 X-10 흑연원자로에서 전구의 불을 밝히는 데 사용되면서 시작되었다. 그리고 1954년 6월에 구소련의 오브닌스크에 건설된 흑연감속 비등경수 압력관형 원자로를 사용한 오브닌스크 원자력 발전소가 시험적으로 전력생산을 시작하였고, 최초의 상업용 원자력 엉더이로를 사용한 영국 셀라필드 원자력 단지에 위치한 콜더 홀(Calder Hall) 원자력 발전소로, 1956년 10월 17일 상업 운전을 시작하였다.",
"Hangul was personally created and promulgated by the fourth king of the Joseon dynasty, Sejong the Great.[1][2] Sejong's scholarly institute, the Hall of Worthies, is often credited with the work, and at least one of its scholars was heavily involved in its creation, but it appears to have also been a personal project of Sejong."
]
# 加载模型和分词器
tokenizer = AutoTokenizer.from_pretrained('Linq-AI-Research/Linq-Embed-Mistral')
model = AutoModel.from_pretrained('Linq-AI-Research/Linq-Embed-Mistral')
max_length = 4096
input_texts = [*queries, *passages]
# 对输入文本进行分词
batch_dict = tokenizer(input_texts, max_length=max_length, padding=True, truncation=True, return_tensors="pt")
outputs = model(**batch_dict)
embeddings = last_token_pool(outputs.last_hidden_state, batch_dict['attention_mask'])
# 归一化嵌入向量
embeddings = F.normalize(embeddings, p=2, dim=1)
scores = (embeddings[:2] @ embeddings[2:].T) * 100
print(scores.tolist())
# [[73.72909545898438, 30.122783660888672], [29.155078887939453, 79.25374603271484]]
高级用法
MTEB基准测试评估
参考unilm/e5来复现BEIR和MTEB基准测试的评估结果。
🔧 技术细节
Linq-Embed-Mistral通过先进的数据精炼方法来改进文本检索。具体包括精心的数据设计、数据过滤,以及在教师模型指导下进行的负样本挖掘。这些方法被应用于现有的基准数据集和通过大语言模型生成的高度定制化的合成数据集,旨在创建高质量的三元组数据集(查询、正例、负例),从而显著提高文本检索性能。
📚 详细文档
评估结果
MTEB(截至2024年5月29日)
模型名称 | 检索(15个数据集) | 平均(56个数据集) |
---|---|---|
Linq-Embed-Mistral | 60.2 | 68.2 |
NV-Embed-v1 | 59.4 | 69.3 |
SFR-Embedding-Mistral | 59.0 | 67.6 |
voyage-large-2-instruct | 58.3 | 68.3 |
GritLM-7B | 57.4 | 66.8 |
voyage-lite-02-instruct | 56.6 | 67.1 |
gte-Qwen1.5-7B-instruct | 56.2 | 67.3 |
e5-mistral-7b-instruct | 56.9 | 66.6 |
google-gecko.text-embedding-preview-0409 | 55.7 | 66.3 |
text-embedding-3-large | 55.4 | 64.6 |
Cohere-embed-english-v3.0 | 55.0 | 64.5 |
📄 许可证
本项目采用CC BY-NC 4.0
许可证。
研究团队
- Junseong Kim
- Seolhwa Lee
- Jihoon Kwon
- Sangmo Gu
- Yejin Kim
- Minkyung Cho
- Jy-yong Sohn
- Chanyeol Choi
引用
@misc{LinqAIResearch2024,
title={Linq-Embed-Mistral:Elevating Text Retrieval with Improved GPT Data Through Task-Specific Control and Quality Refinement},
author={Junseong Kim, Seolhwa Lee, Jihoon Kwon, Sangmo Gu, Yejin Kim, Minkyung Cho, Jy-yong Sohn, Chanyeol Choi},
howpublished={Linq AI Research Blog},
year={2024},
url={https://getlinq.com/blog/linq-embed-mistral/}
}







