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/}
}







