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