模型简介
模型特点
模型能力
使用案例
🚀 all-MiniLM-L6-v2 GGUF模型
all-MiniLM-L6-v2 GGUF模型是基于sentence-transformers库的模型,它能够将句子和段落映射到384维的密集向量空间,可用于聚类、语义搜索等任务。
🚀 快速开始
安装依赖
若要使用此模型,需安装sentence-transformers
库:
pip install -U sentence-transformers
代码示例
from sentence_transformers import SentenceTransformer
sentences = ["This is an example sentence", "Each sentence is converted"]
model = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2')
embeddings = model.encode(sentences)
print(embeddings)
若未安装sentence-transformers
库,可按以下方式使用模型:
from transformers import AutoTokenizer, AutoModel
import torch
import torch.nn.functional as F
#Mean Pooling - Take attention mask into account for correct averaging
def mean_pooling(model_output, attention_mask):
token_embeddings = model_output[0] #First element of model_output contains all token embeddings
input_mask_expanded = attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float()
return torch.sum(token_embeddings * input_mask_expanded, 1) / torch.clamp(input_mask_expanded.sum(1), min=1e-9)
# Sentences we want sentence embeddings for
sentences = ['This is an example sentence', 'Each sentence is converted']
# Load model from HuggingFace Hub
tokenizer = AutoTokenizer.from_pretrained('sentence-transformers/all-MiniLM-L6-v2')
model = AutoModel.from_pretrained('sentence-transformers/all-MiniLM-L6-v2')
# Tokenize sentences
encoded_input = tokenizer(sentences, padding=True, truncation=True, return_tensors='pt')
# Compute token embeddings
with torch.no_grad():
model_output = model(**encoded_input)
# Perform pooling
sentence_embeddings = mean_pooling(model_output, encoded_input['attention_mask'])
# Normalize embeddings
sentence_embeddings = F.normalize(sentence_embeddings, p=2, dim=1)
print("Sentence embeddings:")
print(sentence_embeddings)
✨ 主要特性
- 多场景适用:可用于聚类、语义搜索、信息检索、句子相似度计算等多种自然语言处理任务。
- 高效映射:能将句子和段落快速映射到384维的密集向量空间,有效捕捉语义信息。
- 多种格式支持:提供BF16、F16、量化模型等多种格式,可根据硬件和内存情况灵活选择。
📦 安装指南
使用此模型,需安装sentence-transformers
库:
pip install -U sentence-transformers
💻 使用示例
基础用法
from sentence_transformers import SentenceTransformer
sentences = ["This is an example sentence", "Each sentence is converted"]
model = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2')
embeddings = model.encode(sentences)
print(embeddings)
高级用法
若未安装sentence-transformers
库,可按以下方式使用模型:
from transformers import AutoTokenizer, AutoModel
import torch
import torch.nn.functional as F
#Mean Pooling - Take attention mask into account for correct averaging
def mean_pooling(model_output, attention_mask):
token_embeddings = model_output[0] #First element of model_output contains all token embeddings
input_mask_expanded = attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float()
return torch.sum(token_embeddings * input_mask_expanded, 1) / torch.clamp(input_mask_expanded.sum(1), min=1e-9)
# Sentences we want sentence embeddings for
sentences = ['This is an example sentence', 'Each sentence is converted']
# Load model from HuggingFace Hub
tokenizer = AutoTokenizer.from_pretrained('sentence-transformers/all-MiniLM-L6-v2')
model = AutoModel.from_pretrained('sentence-transformers/all-MiniLM-L6-v2')
# Tokenize sentences
encoded_input = tokenizer(sentences, padding=True, truncation=True, return_tensors='pt')
# Compute token embeddings
with torch.no_grad():
model_output = model(**encoded_input)
# Perform pooling
sentence_embeddings = mean_pooling(model_output, encoded_input['attention_mask'])
# Normalize embeddings
sentence_embeddings = F.normalize(sentence_embeddings, p=2, dim=1)
print("Sentence embeddings:")
print(sentence_embeddings)
📚 详细文档
选择合适的模型格式
选择正确的模型格式取决于你的硬件能力和内存限制。
BF16(Brain Float 16) – 若支持BF16加速则使用
- 一种16位浮点格式,旨在实现更快的计算,同时保持良好的精度。
- 提供与FP32 相似的动态范围,但内存使用更低。
- 若你的硬件支持BF16加速(请查看设备规格),建议使用。
- 与FP32相比,适用于高性能推理,且内存占用减少。
📌 使用BF16的情况: ✔ 你的硬件具有原生BF16支持(例如,较新的GPU、TPU)。 ✔ 你希望在节省内存的同时获得更高的精度。 ✔ 你计划将模型重新量化为其他格式。
📌 避免使用BF16的情况: ❌ 你的硬件不支持BF16(可能会回退到FP32并运行较慢)。 ❌ 你需要与缺乏BF16优化的旧设备兼容。
F16(Float 16) – 比BF16更广泛支持
- 一种16位浮点格式,精度较高,但取值范围小于BF16。
- 适用于大多数支持FP16加速的设备(包括许多GPU和一些CPU)。
- 数值精度略低于BF16,但通常足以进行推理。
📌 使用F16的情况: ✔ 你的硬件支持FP16但不支持BF16。 ✔ 你需要在速度、内存使用和准确性之间取得平衡。 ✔ 你在GPU或其他针对FP16计算优化的设备上运行。
📌 避免使用F16的情况: ❌ 你的设备缺乏原生FP16支持(可能会比预期运行得慢)。 ❌ 你有内存限制。
量化模型(Q4_K、Q6_K、Q8等) – 用于CPU和低显存推理
量化可在尽可能保持准确性的同时减小模型大小和内存使用。
- 低比特模型(Q4_K) → 内存使用最少,但精度可能较低。
- 高比特模型(Q6_K、Q8_0) → 准确性更好,但需要更多内存。
📌 使用量化模型的情况: ✔ 你在CPU上进行推理,需要优化的模型。 ✔ 你的设备显存较低,无法加载全精度模型。 ✔ 你希望在保持合理准确性的同时减少内存占用。
📌 避免使用量化模型的情况: ❌ 你需要最高的准确性(全精度模型更适合这种情况)。 ❌ 你的硬件有足够的显存用于更高精度的格式(BF16/F16)。
极低比特量化(IQ3_XS、IQ3_S、IQ3_M、Q4_K、Q4_0)
这些模型针对极端内存效率进行了优化,非常适合低功耗设备或内存是关键限制因素的大规模部署。
-
IQ3_XS:超低比特量化(3位),具有极高的内存效率。
- 使用场景:最适合超低内存设备,即使Q4_K也太大的情况。
- 权衡:与高比特量化相比,准确性较低。
-
IQ3_S:小块大小,以实现最大内存效率。
- 使用场景:最适合低内存设备,当IQ3_XS过于激进时。
-
IQ3_M:中等块大小,比IQ3_S具有更好的准确性。
- 使用场景:适用于低内存设备,当IQ3_S限制过多时。
-
Q4_K:4位量化,具有逐块优化,以提高准确性。
- 使用场景:最适合低内存设备,当Q6_K太大时。
-
Q4_0:纯4位量化,针对ARM设备进行了优化。
- 使用场景:最适合基于ARM的设备或低内存环境。
模型格式选择总结表
模型格式 | 精度 | 内存使用 | 设备要求 | 最佳使用场景 |
---|---|---|---|---|
BF16 | 最高 | 高 | 支持BF16的GPU/CPU | 减少内存的高速推理 |
F16 | 高 | 高 | 支持FP16的设备 | BF16不可用时的GPU推理 |
Q4_K | 中低 | 低 | CPU或低显存设备 | 内存受限的环境 |
Q6_K | 中等 | 适中 | 内存较多的CPU | 量化模型中准确性较好的情况 |
Q8_0 | 高 | 适中 | 有足够显存的CPU或GPU | 量化模型中准确性最高的情况 |
IQ3_XS | 非常低 | 非常低 | 超低内存设备 | 极端内存效率和低准确性 |
Q4_0 | 低 | 低 | ARM或低内存设备 | llama.cpp可针对ARM设备进行优化 |
包含的文件及详情
all-MiniLM-L6-v2-bf16.gguf
- 模型权重以BF16格式保存。
- 若你想将模型重新量化为不同格式,可使用此文件。
- 若你的设备支持BF16加速,效果最佳。
all-MiniLM-L6-v2-f16.gguf
- 模型权重以F16格式存储。
- 若你的设备支持FP16,尤其是在BF16不可用时,可使用此文件。
all-MiniLM-L6-v2-bf16-q8_0.gguf
- 输出和嵌入保持为BF16。
- 所有其他层量化为Q8_0。
- 若你的设备支持BF16,且你想要一个量化版本,可使用此文件。
all-MiniLM-L6-v2-f16-q8_0.gguf
- 输出和嵌入保持为F16。
- 所有其他层量化为Q8_0。
all-MiniLM-L6-v2-q4_k.gguf
- 输出和嵌入量化为Q8_0。
- 所有其他层量化为Q4_K。
- 适用于内存有限的CPU推理。
all-MiniLM-L6-v2-q4_k_s.gguf
- 最小的Q4_K变体,以牺牲准确性为代价,使用更少的内存。
- 最适合极低内存设置。
all-MiniLM-L6-v2-q6_k.gguf
- 输出和嵌入量化为Q8_0。
- 所有其他层量化为Q6_K。
all-MiniLM-L6-v2-q8_0.gguf
- 完全Q8量化的模型,以获得更好的准确性。
- 需要更多内存,但提供更高的精度。
all-MiniLM-L6-v2-iq3_xs.gguf
- IQ3_XS量化,针对极端内存效率进行了优化。
- 最适合超低内存设备。
all-MiniLM-L6-v2-iq3_m.gguf
- IQ3_M量化,提供中等块大小以提高准确性。
- 适用于低内存设备。
all-MiniLM-L6-v2-q4_0.gguf
- 纯Q4_0量化,针对ARM设备进行了优化。
- 最适合低内存环境。
- 若追求更好的准确性,可优先选择IQ4_NL。
测试模型
如果你觉得这些模型有用,请点赞 ❤。此外,如果你能测试我的网络监控助手,我将不胜感激。点击👉 网络监控助手。
💬 点击聊天图标(主页和仪表盘页面的右下角)。选择一个大语言模型;在大语言模型类型之间切换:TurboLLM -> FreeLLM -> TestLLM。
测试内容
我正在针对我的网络监控服务进行函数调用实验。使用小型开源模型。我关注的问题是“模型可以多小,仍能正常工作”。
🟡 TestLLM – 使用llama.cpp在CPU虚拟机的6个线程上运行当前测试模型(加载大约需要15秒。推理速度相当慢,并且一次只处理一个用户提示 — 仍在努力扩展!)。如果你感兴趣,我很乐意分享其工作原理!
其他可用的AI助手
🟢 TurboLLM – 使用gpt-4o-mini,速度快!注意:由于OpenAI模型价格昂贵,令牌有限,但你可以登录或下载免费的网络监控代理以获取更多令牌,或者使用TestLLM。
🔵 HugLLM – 运行开源Hugging Face模型,速度快,运行小型模型(≈8B),因此质量较低,可获得2倍的令牌(取决于Hugging Face API的可用性)。
🔧 技术细节
背景
该项目旨在使用自监督对比学习目标,在非常大的句子级数据集上训练句子嵌入模型。我们使用了预训练的nreimers/MiniLM-L6-H384-uncased
模型,并在10亿个句子对的数据集上进行了微调。我们使用对比学习目标:给定一对句子中的一个句子,模型应该预测在一组随机采样的其他句子中,哪个句子实际上是与它在数据集中配对的。
我们在由Hugging Face组织的使用JAX/Flax进行NLP和CV的社区周期间开发了这个模型。我们将此模型作为项目使用10亿个训练对训练有史以来最好的句子嵌入模型的一部分进行开发。我们受益于高效的硬件基础设施来运行该项目:7个TPU v3-8,以及谷歌Flax、JAX和云团队成员在高效深度学习框架方面的指导。
预期用途
我们的模型旨在用作句子和短段落编码器。给定输入文本,它输出一个捕获语义信息的向量。句子向量可用于信息检索、聚类或句子相似度任务。
默认情况下,输入文本长度超过256个词块时会被截断。
训练过程
预训练
我们使用预训练的nreimers/MiniLM-L6-H384-uncased
模型。有关预训练过程的更多详细信息,请参考模型卡片。
微调
我们使用对比目标对模型进行微调。形式上,我们计算批次中每个可能句子对的余弦相似度。然后,通过与真实对进行比较,应用交叉熵损失。
超参数
我们在TPU v3-8上训练模型。我们使用1024的批次大小(每个TPU核心128),训练100k步。我们使用500的学习率预热。序列长度限制为128个令牌。我们使用AdamW优化器,学习率为2e-5。完整的训练脚本可在当前存储库中找到:train_script.py
。
训练数据
我们使用多个数据集的组合来微调模型。句子对的总数超过10亿个句子。我们根据加权概率对每个数据集进行采样,配置详情见data_config.json
文件。
数据集 | 论文 | 训练元组数量 |
---|---|---|
Reddit comments (2015-2018) | paper | 726,484,430 |
S2ORC Citation pairs (Abstracts) | paper | 116,288,806 |
WikiAnswers Duplicate question pairs | paper | 77,427,422 |
PAQ (Question, Answer) pairs | paper | 64,371,441 |
S2ORC Citation pairs (Titles) | paper | 52,603,982 |
S2ORC (Title, Abstract) | paper | 41,769,185 |
Stack Exchange (Title, Body) pairs | - | 25,316,456 |
Stack Exchange (Title+Body, Answer) pairs | - | 21,396,559 |
Stack Exchange (Title, Answer) pairs | - | 21,396,559 |
MS MARCO triplets | paper | 9,144,553 |
GOOAQ: Open Question Answering with Diverse Answer Types | paper | 3,012,496 |
Yahoo Answers (Title, Answer) | paper | 1,198,260 |
Code Search | - | 1,151,414 |
COCO Image captions | paper | 828,395 |
SPECTER citation triplets | paper | 684,100 |
Yahoo Answers (Question, Answer) | paper | 681,164 |
Yahoo Answers (Title, Question) | paper | 659,896 |
SearchQA | paper | 582,261 |
Eli5 | paper | 325,475 |
Flickr 30k | paper | 317,695 |
Stack Exchange Duplicate questions (titles) | 304,525 | |
AllNLI (SNLI and MultiNLI | paper SNLI, paper MultiNLI | 277,230 |
Stack Exchange Duplicate questions (bodies) | 250,519 | |
Stack Exchange Duplicate questions (titles+bodies) | 250,460 | |
Sentence Compression | paper | 180,000 |
Wikihow | paper | 128,542 |
Altlex | paper | 112,696 |
Quora Question Triplets | - | 103,663 |
Simple Wikipedia | paper | 102,225 |
Natural Questions (NQ) | paper | 100,231 |
SQuAD2.0 | paper | 87,599 |
TriviaQA | - | 73,346 |
总计 | 1,170,060,424 |
📄 许可证
本项目采用Apache-2.0许可证。







