Stella Large Zh V2
模型概述
該模型主要用於句子相似度計算、文本分類、文本聚類和重排序等任務,在多箇中文評估基準上表現出色。
模型特點
多任務評估基準支持
在多箇中文多任務評估基準(如MTEB)上表現優異,涵蓋語義文本相似度、文本分類、文本聚類和重排序等任務。
高性能句子相似度計算
在螞蟻金融問答、ATEC、銀行問答等數據集上,句子相似度計算性能突出,支持多種距離度量(餘弦相似度、歐氏距離、曼哈頓距離)。
強大的重排序能力
在CMedQAv1和CMedQAv2重排序任務中,平均準確率和平均倒數排名均超過85%,表現優異。
模型能力
句子相似度計算
文本分類
文本聚類
重排序
檢索
使用案例
金融領域
金融問答系統
用於金融領域的問答系統,計算用戶問題與候選答案的相似度。
在螞蟻金融問答數據集上,餘弦相似度皮爾遜值為47.34,斯皮爾曼值為49.94。
銀行客服問答
用於銀行客服系統中的問答匹配和相似度計算。
在銀行問答數據集上,餘弦相似度皮爾遜值為62.83,斯皮爾曼值為65.53。
醫療領域
醫療問答重排序
用於醫療問答系統中的答案重排序,提升答案的相關性。
在CMedQAv1和CMedQAv2重排序任務中,平均準確率分別為85.44和85.82。
新冠信息檢索
用於新冠相關信息的檢索和排序。
在新冠檢索任務中,首位平均準確率為68.86,前十平均準確率為77.10。
通用文本處理
文本分類
用於通用文本分類任務,如亞馬遜評論分類。
在亞馬遜評論分類(中文)任務中,準確率為40.81,F1分數為39.02。
文本聚類
用於文本聚類任務,如CLS點對點和句對句聚類。
在CLS點對點聚類任務中,V度量為39.95;在句對句聚類任務中,V度量為38.18。
🚀 stella模型
stella是一個通用的文本編碼模型,可將文本轉換為向量表示,用於檢索、語義匹配等自然語言處理任務。它提供了多種不同版本的模型,以滿足不同的應用場景和需求。
🚀 快速開始
安裝依賴庫
使用stella模型前,需要安裝sentence-transformers
和transformers
庫,可使用以下命令進行安裝:
pip install sentence-transformers transformers
使用示例
以下是使用sentence-transformers
庫調用stella-base-zh-v2
模型的示例代碼:
from sentence_transformers import SentenceTransformer
sentences = ["數據1", "數據2"]
model = SentenceTransformer('infgrad/stella-base-zh-v2')
print(model.max_seq_length)
embeddings_1 = model.encode(sentences, normalize_embeddings=True)
embeddings_2 = model.encode(sentences, normalize_embeddings=True)
similarity = embeddings_1 @ embeddings_2.T
print(similarity)
直接使用transformers庫
from transformers import AutoModel, AutoTokenizer
from sklearn.preprocessing import normalize
model = AutoModel.from_pretrained('infgrad/stella-base-zh-v2')
tokenizer = AutoTokenizer.from_pretrained('infgrad/stella-base-zh-v2')
sentences = ["數據1", "數據ABCDEFGH"]
batch_data = tokenizer(
batch_text_or_text_pairs=sentences,
padding="longest",
return_tensors="pt",
max_length=1024,
truncation=True,
)
attention_mask = batch_data["attention_mask"]
model_output = model(**batch_data)
last_hidden = model_output.last_hidden_state.masked_fill(~attention_mask[..., None].bool(), 0.0)
vectors = last_hidden.sum(dim=1) / attention_mask.sum(dim=1)[..., None]
vectors = normalize(vectors, norm="l2", axis=1, )
print(vectors.shape) # 2,768
✨ 主要特性
- 多語言支持:提供英文和中文版本的模型,滿足不同語言的使用需求。
- 使用簡單:部分模型(如
stella-base-en-v2
、stella-base-zh-v2
和stella-large-zh-v2
)不需要任何前綴文本。 - 向量維度可變:部分模型支持向量可變維度,如
stella-mrl-large-zh-v3.5-1792d
。 - 效果優異:在多個基準測試中表現出色,如C-MTEB和MTEB排行榜。
📦 安裝指南
使用pip
安裝所需的依賴庫:
pip install sentence-transformers transformers numpy torch
💻 使用示例
基礎用法
stella 中文系列模型
stella-base-zh
和stella-large-zh
:用法和piccolo
完全一致,即在檢索重排任務上給query
和passage
加上查詢:
和結果:
。對於短短匹配不需要做任何操作。stella-base-zh-v2
和stella-large-zh-v2
:任何使用場景中都不需要加前綴文本。
from sentence_transformers import SentenceTransformer
sentences = ["數據1", "數據2"]
model = SentenceTransformer('infgrad/stella-base-zh-v2')
print(model.max_seq_length)
embeddings_1 = model.encode(sentences, normalize_embeddings=True)
embeddings_2 = model.encode(sentences, normalize_embeddings=True)
similarity = embeddings_1 @ embeddings_2.T
print(similarity)
高級用法
使用transformers
庫直接調用模型:
from transformers import AutoModel, AutoTokenizer
from sklearn.preprocessing import normalize
model = AutoModel.from_pretrained('infgrad/stella-base-zh-v2')
tokenizer = AutoTokenizer.from_pretrained('infgrad/stella-base-zh-v2')
sentences = ["數據1", "數據ABCDEFGH"]
batch_data = tokenizer(
batch_text_or_text_pairs=sentences,
padding="longest",
return_tensors="pt",
max_length=1024,
truncation=True,
)
attention_mask = batch_data["attention_mask"]
model_output = model(**batch_data)
last_hidden = model_output.last_hidden_state.masked_fill(~attention_mask[..., None].bool(), 0.0)
vectors = last_hidden.sum(dim=1) / attention_mask.sum(dim=1)[..., None]
vectors = normalize(vectors, norm="l2", axis=1, )
print(vectors.shape) # 2,768
stella 英文系列模型
from sentence_transformers import SentenceTransformer
sentences = ["one car come", "one car go"]
model = SentenceTransformer('infgrad/stella-base-en-v2')
print(model.max_seq_length)
embeddings_1 = model.encode(sentences, normalize_embeddings=True)
embeddings_2 = model.encode(sentences, normalize_embeddings=True)
similarity = embeddings_1 @ embeddings_2.T
print(similarity)
直接使用HuggingFace Transformers
from transformers import AutoModel, AutoTokenizer
from sklearn.preprocessing import normalize
model = AutoModel.from_pretrained('infgrad/stella-base-en-v2')
tokenizer = AutoTokenizer.from_pretrained('infgrad/stella-base-en-v2')
sentences = ["one car come", "one car go"]
batch_data = tokenizer(
batch_text_or_text_pairs=sentences,
padding="longest",
return_tensors="pt",
max_length=512,
truncation=True,
)
attention_mask = batch_data["attention_mask"]
model_output = model(**batch_data)
last_hidden = model_output.last_hidden_state.masked_fill(~attention_mask[..., None].bool(), 0.0)
vectors = last_hidden.sum(dim=1) / attention_mask.sum(dim=1)[..., None]
vectors = normalize(vectors, norm="l2", axis=1, )
print(vectors.shape) # 2,768
📚 詳細文檔
模型信息
屬性 | 詳情 |
---|---|
模型類型 | 文本編碼模型 |
支持語言 | 英文、中文 |
模型版本 | stella-base-en-v2、stella-base-zh-v2、stella-large-zh-v2等 |
模型列表
模型名稱 | 模型大小 (GB) | 維度 | 序列長度 | 語言 | 檢索是否需要指令? |
---|---|---|---|---|---|
stella-base-en-v2 | 0.2 | 768 | 512 | 英文 | 否 |
stella-large-zh-v2 | 0.65 | 1024 | 1024 | 中文 | 否 |
stella-base-zh-v2 | 0.2 | 768 | 1024 | 中文 | 否 |
stella-large-zh | 0.65 | 1024 | 1024 | 中文 | 是 |
stella-base-zh | 0.2 | 768 | 1024 | 中文 | 是 |
訓練數據
- 開源訓練數據(
wudao_base_200GB
、m3e
和simclue
),著重挑選了長度大於512的文本。 - 在通用語料庫上使用大語言模型(LLM)構造的一批
(question, paragraph)
和(sentence, paragraph)
數據。
損失函數
- 對比學習損失函數
- 帶有難負例的對比學習損失函數(基於
bm25
和向量構造難負例) - EWC(彈性權重整合)
cosent
損失
模型權重初始化
stella-base-zh
和stella-large-zh
分別以piccolo-base-zh
和piccolo-large-zh
作為基礎模型,512 - 1024的位置嵌入使用層次分解位置編碼進行初始化。
訓練策略
每種類型的數據使用一個迭代器,分別計算損失。
模型改進
基於stella
模型,stella-v2
使用了更多的訓練數據,並通過知識蒸餾去除了指令。
🔧 技術細節
訓練環境
- 硬件:單卡A100 - 80GB
- 環境:
torch1.13.*
;transformers-trainer
+deepspeed
+gradient-checkpointing
- 學習率:1e - 6
- batch_size:
base
模型為1024,額外增加20%的難負例;large
模型為768,額外增加20%的難負例 - 數據量:第一版模型約100萬,其中用LLM構造的數據約有200K。LLM模型大小為13B。
v2
系列模型到了2000萬訓練數據。
評測指標
C-MTEB排行榜(中文)
模型名稱 | 模型大小 (GB) | 維度 | 序列長度 | 平均得分 (35) | 分類得分 (9) | 聚類得分 (4) | 成對分類得分 (2) | 重排得分 (4) | 檢索得分 (8) | STS得分 (8) |
---|---|---|---|---|---|---|---|---|---|---|
stella-large-zh-v2 | 0.65 | 1024 | 1024 | 65.13 | 69.05 | 49.16 | 82.68 | 66.41 | 70.14 | 58.66 |
stella-base-zh-v2 | 0.2 | 768 | 1024 | 64.36 | 68.29 | 49.4 | 79.95 | 66.1 | 70.08 | 56.92 |
stella-large-zh | 0.65 | 1024 | 1024 | 64.54 | 67.62 | 48.65 | 78.72 | 65.98 | 71.02 | 58.3 |
stella-base-zh | 0.2 | 768 | 1024 | 64.16 | 67.77 | 48.7 | 76.09 | 66.95 | 71.07 | 56.54 |
MTEB排行榜(英文)
模型名稱 | 模型大小 (GB) | 維度 | 序列長度 | 平均得分 (56) | 分類得分 (12) | 聚類得分 (11) | 成對分類得分 (3) | 重排得分 (4) | 檢索得分 (15) | STS得分 (10) | 摘要得分 (1) |
---|---|---|---|---|---|---|---|---|---|---|---|
stella-base-en-v2 | 0.2 | 768 | 512 | 62.61 | 75.28 | 44.9 | 86.45 | 58.77 | 50.1 | 83.02 | 32.52 |
長文本評測
現有數據集存在兩個問題:
- 長度大於512的文本過少。
- 即便文本長度大於512,對於檢索而言也只需要前512的文本內容,導致無法準確評估模型的長文本編碼能力。
為了解決這個問題,蒐集了相關開源數據並使用規則進行過濾,最終整理了6份長文本測試集:
- CMRC2018,通用百科
- CAIL,法律閱讀理解
- DRCD,繁體百科,已轉簡體
- Military,軍工問答
- Squad,英文閱讀理解,已轉中文
- Multifieldqa_zh,清華的大模型長文本理解能力評測數據
處理規則是選取答案在512長度之後的文本,短的測試數據會欠採樣,長短文本佔比約為1:2,所以模型既得理解短文本也得理解長文本。除了Military
數據集,提供了其他5個測試數據的下載地址:點擊下載
評測指標為Recall@5
,結果如下:
數據集 | piccolo-base-zh | piccolo-large-zh | bge-base-zh | bge-large-zh | stella-base-zh | stella-large-zh |
---|---|---|---|---|---|---|
CMRC2018 | 94.34 | 93.82 | 91.56 | 93.12 | 96.08 | 95.56 |
CAIL | 28.04 | 33.64 | 31.22 | 33.94 | 34.62 | 37.18 |
DRCD | 78.25 | 77.9 | 78.34 | 80.26 | 86.14 | 84.58 |
Military | 76.61 | 73.06 | 75.65 | 75.81 | 83.71 | 80.48 |
Squad | 91.21 | 86.61 | 87.87 | 90.38 | 93.31 | 91.21 |
Multifieldqa_zh | 81.41 | 83.92 | 83.92 | 83.42 | 79.9 | 80.4 |
平均得分 | 74.98 | 74.83 | 74.76 | 76.15 | 78.96 | 78.24 |
待解決問題
- 評測的穩定性:評測過程中發現
Clustering
任務會和官方的結果不一致,大約有±0.0x的小差距,原因是聚類代碼沒有設置random_seed
,差距可以忽略不計,不影響評測結論。 - 更高質量的長文本訓練和測試數據:訓練數據多是用13B模型構造的,可能存在噪聲。測試數據基本都是從閱讀理解(MRC)數據整理來的,問題都是事實性(factoid)類型,不符合真實分佈。
- OOD的性能:雖然近期出現了很多向量編碼模型,但是對於不是那麼通用的領域,包括
stella
、openai
和cohere
等模型的效果均比不上BM25
。
📄 許可證
文檔中未提及相關許可證信息。
新聞資訊
- [2024-04-06] 開源puff系列模型,專門針對檢索和語義匹配任務,更多地考慮泛化性和私有通用測試集效果,向量維度可變,支持中英雙語。
- [2024-02-27] 開源
stella-mrl-large-zh-v3.5-1792d
模型,支持向量可變維度。 - [2024-02-17] 開源
stella v3
系列、對話編碼模型和相關訓練數據。 - [2023-10-19] 開源
stella-base-en-v2
,使用簡單,不需要任何前綴文本。 - [2023-10-12] 開源
stella-base-zh-v2
和stella-large-zh-v2
,效果更好且使用簡單,不需要任何前綴文本。 - [2023-09-11] 開源
stella-base-zh
和stella-large-zh
歡迎去本人主頁查看最新模型,並提出您的寶貴意見!
參考資料
- https://www.scidb.cn/en/detail?dataSetId=c6a3fe684227415a9db8e21bac4a15ab
- https://github.com/wangyuxinwhy/uniem
- https://github.com/CLUEbenchmark/SimCLUE
- https://arxiv.org/abs/1612.00796
- https://kexue.fm/archives/8847
- https://huggingface.co/sensenova/piccolo-base-zh
- https://kexue.fm/archives/7947
- https://github.com/FlagOpen/FlagEmbedding
- https://github.com/THUDM/LongBench
Jina Embeddings V3
Jina Embeddings V3 是一個多語言句子嵌入模型,支持超過100種語言,專注於句子相似度和特徵提取任務。
文本嵌入
Transformers 支持多種語言

J
jinaai
3.7M
911
Ms Marco MiniLM L6 V2
Apache-2.0
基於MS Marco段落排序任務訓練的交叉編碼器模型,用於信息檢索中的查詢-段落相關性評分
文本嵌入 英語
M
cross-encoder
2.5M
86
Opensearch Neural Sparse Encoding Doc V2 Distill
Apache-2.0
基於蒸餾技術的稀疏檢索模型,專為OpenSearch優化,支持免推理文檔編碼,在搜索相關性和效率上優於V1版本
文本嵌入
Transformers 英語

O
opensearch-project
1.8M
7
Sapbert From PubMedBERT Fulltext
Apache-2.0
基於PubMedBERT的生物醫學實體表徵模型,通過自對齊預訓練優化語義關係捕捉
文本嵌入 英語
S
cambridgeltl
1.7M
49
Gte Large
MIT
GTE-Large 是一個強大的句子轉換器模型,專注於句子相似度和文本嵌入任務,在多個基準測試中表現出色。
文本嵌入 英語
G
thenlper
1.5M
278
Gte Base En V1.5
Apache-2.0
GTE-base-en-v1.5 是一個英文句子轉換器模型,專注於句子相似度任務,在多個文本嵌入基準測試中表現優異。
文本嵌入
Transformers 支持多種語言

G
Alibaba-NLP
1.5M
63
Gte Multilingual Base
Apache-2.0
GTE Multilingual Base 是一個多語言的句子嵌入模型,支持超過50種語言,適用於句子相似度計算等任務。
文本嵌入
Transformers 支持多種語言

G
Alibaba-NLP
1.2M
246
Polybert
polyBERT是一個化學語言模型,旨在實現完全由機器驅動的超快聚合物信息學。它將PSMILES字符串映射為600維密集指紋,以數值形式表示聚合物化學結構。
文本嵌入
Transformers

P
kuelumbus
1.0M
5
Bert Base Turkish Cased Mean Nli Stsb Tr
Apache-2.0
基於土耳其語BERT的句子嵌入模型,專為語義相似度任務優化
文本嵌入
Transformers 其他

B
emrecan
1.0M
40
GIST Small Embedding V0
MIT
基於BAAI/bge-small-en-v1.5模型微調的文本嵌入模型,通過MEDI數據集與MTEB分類任務數據集訓練,優化了檢索任務的查詢編碼能力。
文本嵌入
Safetensors 英語
G
avsolatorio
945.68k
29
精選推薦AI模型
Llama 3 Typhoon V1.5x 8b Instruct
專為泰語設計的80億參數指令模型,性能媲美GPT-3.5-turbo,優化了應用場景、檢索增強生成、受限生成和推理任務
大型語言模型
Transformers 支持多種語言

L
scb10x
3,269
16
Cadet Tiny
Openrail
Cadet-Tiny是一個基於SODA數據集訓練的超小型對話模型,專為邊緣設備推理設計,體積僅為Cosmo-3B模型的2%左右。
對話系統
Transformers 英語

C
ToddGoldfarb
2,691
6
Roberta Base Chinese Extractive Qa
基於RoBERTa架構的中文抽取式問答模型,適用於從給定文本中提取答案的任務。
問答系統 中文
R
uer
2,694
98