Stella Base Zh V2
模型简介
该模型主要用于中文文本的语义相似度计算、特征提取和多任务评估,适用于金融问答、自然语言推理等多种场景。
模型特点
多任务评估支持
支持多种中文文本相似度任务和评估基准,包括蚂蚁金融问答、ATEC、BQ等。
高性能语义相似度计算
在多个数据集上表现出色,特别是在金融问答和自然语言推理任务中。
多种距离度量支持
支持余弦相似度、欧氏距离和曼哈顿距离等多种相似度度量方式。
模型能力
语义文本相似度计算
文本特征提取
文本对分类
文本聚类
检索任务
重排序任务
使用案例
金融领域
金融问答系统
用于金融领域的问答系统,计算问题与答案之间的语义相似度。
在蚂蚁金融问答数据集上表现良好
医疗领域
医疗问答检索
用于医疗领域的问答检索系统。
在CMedQA数据集上平均准确率达到84.69%
电商领域
商品评论分类
用于电商平台的商品评论分类。
在亚马逊中文评论分类任务中准确率为39.64%
🚀 stella模型
stella是一个通用的文本编码模型,可用于文本编码、检索和语义匹配等任务。它有多种版本,能适应不同的应用场景和需求。
🚀 快速开始
安装依赖
运行以下代码前,请确保你已经安装了必要的库:
pip install torch numpy mteb sentence-transformers transformers sklearn
代码示例
以下是使用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-large-zh-v2
、stella-base-zh-v2
、stella-large-zh
和stella-base-zh
等多种模型,以满足不同的需求。 - 无需前缀文本:
stella-base-zh-v2
和stella-large-zh-v2
模型使用简单,在任何使用场景中都不需要加前缀文本。 - 支持向量可变维度:部分模型支持向量可变维度,如
stella-mrl-large-zh-v3.5-1792d
模型。 - 中英双语支持:部分模型支持中英双语,如puff系列模型。
📦 安装指南
使用sentence-transformers
库加载模型:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer('infgrad/stella-base-zh-v2')
💻 使用示例
基础用法
from sentence_transformers import SentenceTransformer
sentences = ["这是一个示例句子", "这是另一个示例句子"]
model = SentenceTransformer('infgrad/stella-base-zh-v2')
embeddings = model.encode(sentences)
print(embeddings)
高级用法
from transformers import AutoModel, AutoTokenizer
from sklearn.preprocessing import normalize
import torch
model = AutoModel.from_pretrained('infgrad/stella-base-zh-v2')
tokenizer = AutoTokenizer.from_pretrained('infgrad/stella-base-zh-v2')
sentences = ["高级用法示例句子", "用于演示更复杂的场景"]
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)
📚 详细文档
模型信息
属性 | 详情 |
---|---|
模型类型 | 通用的文本编码模型 |
支持模型 | stella-large-zh-v2、stella-base-zh-v2、stella-large-zh、stella-base-zh等 |
训练数据 | 开源训练数据(wudao_base_200GB、m3e和simclue),并使用LLM在通用语料库上构造了一批(question, paragraph)和(sentence, paragraph)数据 |
损失函数 | 对比学习损失函数、带有难负例的对比学习损失函数(基于bm25和向量难负例)、EWC(Elastic Weights Consolidation)、cosent loss |
模型权重初始化 | stella-base-zh和stella-large-zh分别以piccolo-base-zh和piccolo-large-zh作为基础模型,512 - 1024的位置嵌入使用层次分解位置编码的初始化策略 |
训练策略 | 每种类型的数据使用一个迭代器,分别计算损失 |
模型参数
模型名称 | 模型大小 (GB) | 维度 | 序列长度 | 语言 | 检索是否需要指令? |
---|---|---|---|---|---|
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 | 中文 | 是 |
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 |
长文本评测
现有数据集存在长度大于512的文本过少,且即便大于512,对于检索而言也只需要前512的文本内容的问题,导致无法准确评估模型的长文本编码能力。为了解决这个问题,整理了6份长文本测试集:
- CMRC2018,通用百科
- CAIL,法律阅读理解
- DRCD,繁体百科,已转简体
- Military,军工问答
- Squad,英文阅读理解,已转中文
- Multifieldqa_zh,清华的大模型长文本理解能力评测数据[9]
除了Military数据集,提供了其他5个测试数据的下载地址:https://drive.google.com/file/d/1WC6EWaCbVgz-vPMDFH4TwAMkLyh5WNcN/view?usp=sharing
评测指标为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 |
Average | 74.98 | 74.83 | 74.76 | 76.15 | 78.96 | 78.24 |
新闻动态
- [2024-04-06] 开源puff系列模型,专门针对检索和语义匹配任务,更多的考虑泛化性和私有通用测试集效果,向量维度可变,中英双语。
- [2024-02-27] 开源stella-mrl-large-zh-v3.5-1792d模型,支持向量可变维度。
- [2024-02-17] 开源stella v3系列、dialogue编码模型和相关训练数据。
- [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
欢迎去本人主页查看最新模型,并提出您的宝贵意见!
🔧 技术细节
训练环境
- 硬件:单卡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万训练数据。
📄 许可证
文档中未提及许可证相关信息。
📋 ToDoList
- 评测的稳定性:评测过程中发现Clustering任务会和官方的结果不一致,大约有±0.0x的小差距,原因是聚类代码没有设置random_seed,差距可以忽略不计,不影响评测结论。
- 更高质量的长文本训练和测试数据:训练数据多是用13b模型构造的,肯定会存在噪声。测试数据基本都是从mrc数据整理来的,所以问题都是factoid类型,不符合真实分布。
- OOD的性能:虽然近期出现了很多向量编码模型,但是对于不是那么通用的domain,这一众模型包括stella、openai和cohere,它们的效果均比不上BM25。
📖 参考资料
- 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
⚠️ 重要提示
因为长文本评测数据数量稀少,所以构造时也使用了train部分,如果自行评测,请注意模型的训练数据以免数据泄露。
💡 使用建议
stella-base-zh和stella-large-zh用法和piccolo完全一致,即在检索重排任务上给query和passage加上
查询:
和结果:
。对于短短匹配不需要做任何操作。stella-base-zh-v2和stella-large-zh-v2使用简单,任何使用场景中都不需要加前缀文本。
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