一篇吃透模型:all-MiniLM-L6-v2

MiniLM 是什么?

MiniLM 是微软研究院开发的一种轻量级的语言模型,旨在以较小的参数量和计算成本实现与大型语言模型(如 BERT)相当的性能。它是基于 Transformer 架构的预训练模型,通过深度自注意力蒸馏(Deep Self-Attention Distillation)等技术进行压缩和优化,使其能够在资源受限的环境下高效运行。

主要特点

  1. 轻量级:MiniLM 显著减少了模型的参数量和计算成本,使其能够在移动设备、嵌入式系统等资源受限的环境下运行。
  2. 高性能:尽管参数量大幅减少,MiniLM 仍然保持了较高的性能,能够在多种自然语言处理(NLP)任务中取得优异的表现。
  3. 通用性:MiniLM 是一种通用的语言模型,适用于各种 NLP 任务,如文本分类、命名实体识别、问答系统、语言生成等。
  4. 灵活性:MiniLM 的学生模型(即压缩后的模型)无需与教师模型(即原始的大型模型)在层数或隐藏维度上严格匹配,实现了更高的灵活性。

all-MiniLM-L6-v2 是什么样的模型?

all-MiniLM-L6-v2 是一个小型语言模型,属于 MiniLM 系列,它通过知识蒸馏技术从更大的模型中压缩而来,旨在保持较高性能的同时减少计算资源需求。

all-MiniLM-L6-v2 是一个高效的轻量级语言模型,适合资源有限的环境,能够胜任多种 NLP 任务。

主要特点
  1. 模型结构
    • 层数:6 层 Transformer。
    • 参数量:约 22M,属于轻量级模型。
  2. 训练方法
    • 知识蒸馏:从更大的模型(如 BERT 或 RoBERTa)中提取知识,保留大部分性能。
    • 任务:支持多种 NLP 任务,如文本分类、语义相似度计算等。
  3. 性能
    • 在多个基准测试中表现良好,尤其在语义相似度和文本分类任务上接近大模型。
    • 适合资源有限的环境。
  4. 应用场景
    • 语义搜索:用于计算文本相似度。
    • 文本分类:如情感分析、垃圾邮件检测。
    • 问答系统:用于理解问题和检索答案。
    • 嵌入式系统:适合部署在计算资源有限的设备上。
优点
  • 高效:计算速度快,适合实时应用。
  • 轻量:参数量少,易于部署。
  • 多功能:适用于多种 NLP 任务。
缺点
  • 性能限制:在处理复杂任务时可能不如大模型。
  • 知识局限:依赖蒸馏过程,可能丢失部分知识。

all-MiniLM-L6-v2 是基于微软研发的 MiniLM 架构进行微调或进一步开发的句子嵌入模型,而 sentence-transformers 是一个集成了多种预训练句子嵌入模型的库,包括 all-MiniLM-L6-v2。

sentence-transformers 是一个基于 PyTorch 的 Python 库,专门用于处理和生成句子嵌入(sentence embeddings)。它提供了多种预训练的句子嵌入模型,这些模型能够将句子或文本片段转换为固定长度的向量表示,从而方便地进行向量分析、处理和比较.

在 Hugging Face 或者 ModelScope 可以找到属于 sentence-transformers 的 all-MiniLM-L6-v2 模型。

使用示例

通过 Hugging Face 的 transformers 库可以加载和使用该模型:

from transformers import AutoModel, AutoTokenizer

model_name = "sentence-transformers/all-MiniLM-L6-v2"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModel.from_pretrained(model_name)

inputs = tokenizer("Hello, world!", return_tensors="pt")
outputs = model(**inputs)

Xenova/all-MiniLM-L6-v2 模型又是什么?

Xenova/all-MiniLM-L6-v2 是基于 all-MiniLM-L6-v2 的一个变体,由 Xenova 团队优化和发布。它继承了原版的高效和轻量特性,并针对特定任务或场景进行了改进。

主要特点
  1. 优化点
    • 性能提升:在特定任务上表现更优。
    • 兼容性:支持多种 NLP 任务,如文本分类、语义相似度计算等。

在 Hugging Face 或者 ModelScope 可以找到属于Xenova 的 all-MiniLM-L6-v2 模型。

使用示例

通过 Hugging Face 的 transformers 库可以轻松加载和使用该模型:

from transformers import AutoModel, AutoTokenizer

model_name = "Xenova/all-MiniLM-L6-v2"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModel.from_pretrained(model_name)

inputs = tokenizer("Hello, world!", return_tensors="pt")
outputs = model(**inputs)

all-MiniLM-L6-v2 实战

不管是all-MiniLM-L6-v2 的那种变种,效果上大同小异。接下来实际的来调用这种模型。

上面有介绍Hugging Face的使用方式,但是Hugging Face可能无法访问,接下来使用国内的ModelScope(魔搭)来下载和使用模型。

关于 ModelScope的详细介绍,可以参考:

AI模型平台之——ModelScope(魔搭)

这里使用Python调用模型

具体步骤:

  1. 安装ModelScope

2. 配置环境变量: MODELSCOPE_CACHE

这里配置为: D:\ai\modelscope\cache

默认是下载到C盘个人账号路径的 C:\Users\Administrator.cache\modelscope

(这里考虑C盘的空间不够,将模型相关的文件下载到D盘)

  1. 使用ModelScope的库下载模型
from modelscope import AutoModel, AutoTokenizer


# 指定模型名称
model_name = "sentence-transformers/all-MiniLM-L6-v2"

# 加载分词器和模型
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModel.from_pretrained(model_name)

运行Python后就开始下载模型文件,过程如下图:

上面提到 all-MiniLM-L6-v2 有一个作用是可以比较文本的相似度, 这里给出一个完整的示例:

from modelscope import AutoModel, AutoTokenizer

import torch
import numpy as np

# 指定模型名称
model_name = "sentence-transformers/all-MiniLM-L6-v2"

# 加载分词器和模型
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModel.from_pretrained(model_name)



sentences = ["Hello, world!", "Hi there!"]

# 编码文本
inputs = tokenizer(sentences, padding=True, truncation=True, return_tensors="pt")
with torch.no_grad():
    outputs = model(**inputs)

# 提取句嵌入(均值池化)
embeddings = outputs.last_hidden_state.mean(dim=1).numpy()

# 计算余弦相似度
similarity = np.dot(embeddings[0], embeddings[1]) / (
    np.linalg.norm(embeddings[0]) * np.linalg.norm(embeddings[1])
)
print(f"相似度: {similarity:.4f}")  # 示例输出: 相似度: 0.5033

在VS Code运行结果的画面如下:

单独下载模型: 也可以使用命令行单独下载模型文件, 比如下载 Xenova/all-MiniLM-L6-v2。

modelscope download --model Xenova/all-MiniLM-L6-v2

下载后的模型文件不大,整个目录 174M,和动则几个G乃至几十个G 的模型来说, 的确是轻量级。

模型及关系的总结

  1. MiniLM 是微软研发的一种轻量级的语言模型
  2. all-MiniLM-L6-v2 是基于 MiniLM 架构进行微调,是 sentence-transformers 的开发者或社区基于 MiniLM 架构进行微调或进一步开发的。

sentence-transformers/all-MiniLM-L6-v2 用于Python 语言。

  1. Xenova/all-MiniLM-L6-v2 是基于 all-MiniLM-L6-v2 的一个变体,由 Xenova 团队优化和发布。

Xenova/all-MiniLM-L6-v2 用于NodeJS语言。

本篇为什么要介绍all-MiniLM-L6-v2 呢?

最后,给出笔者这一篇介绍 all-MiniLM-L6-v2的目的: 因为知名的AI编码工具Continue(Copilot的平替版)就是用了 all-MiniLM-L6-v2 用来搜索。



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/980879.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue3之echarts仪表盘

vue3之echarts仪表盘 效果如下&#xff1a; 版本 "echarts": "^5.5.1" 核心代码&#xff1a; <template><div ref"chartRef" class"circle"></div> </template> <script lang"ts" setup>…

【C语言初阶】操作符_作业详解的一些疑问

前言&#xff1a; b站鹏哥视频&#xff0c;来源以下链接 76. 【C语言初阶】操作符_作业讲解_哔哩哔哩_bilibili 目的&#xff1a; 记录视频里面没有理解的相关知识 疑惑的地方&#xff1a; 对c语言的那个&#xff0c;\n不是特别了解&#xff0c;就是输入了一个字符&#x…

本地部署 DeepSeek:从 Ollama 配置到 Spring Boot 集成

前言 随着人工智能技术的迅猛发展&#xff0c;越来越多的开发者希望在本地环境中部署和调用 AI 模型&#xff0c;以满足特定的业务需求。本文将详细介绍如何在本地环境中使用 Ollama 配置 DeepSeek 模型&#xff0c;并在 IntelliJ IDEA 中创建一个 Spring Boot 项目来调用该模型…

【网络编程】之TCP实现客户端远程控制服务器端及断线重连

【网络编程】之TCP实现客户端远程控制服务器端及断线重连 TCP网络通信实现客户端简单远程控制主机基本功能演示通信过程代码实现服务器模块执行命令模块popen系列函数 客户端模块服务器主程序 windows作为客户端与服务器通信#pragma comment介绍 客户端使用状态机断线重连代码实…

ROS环境搭建

ROS首次搭建环境 注&#xff1a;以下内容都是在已经安装好ros的情况下如何搭建workplace 一、创建工作空间二、创建ROS包三、注意 注&#xff1a;以下内容都是在已经安装好ros的情况下如何搭建workplace 如果没有安装好&#xff0c;建议鱼香ros一步到位:鱼香ROS 我也是装了好久…

centos7操作系统下安装docker,及查看docker进程是否启动

centos7下安装docker&#xff0c;需要用到的yun命令 &#xff08;yum命令用于添加卸载程序&#xff09; 1.设置仓库&#xff1a; yum-config-manager \--add-repo \http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 2.安装 Docker Engine-Community yum in…

IO基础知识和练习

一、思维导图 二、练习 1.使用标准IO函数&#xff0c;实现文件的拷贝 #include <head.h> int main(int argc, const char *argv[]) {FILE *pfopen("./one.txt","r");FILE *fpfopen("./two.txt","r");if(pNULL)PRINT_ERROR(&qu…

Linux驱动开发之串口驱动移植

原理图 从上图可以看到RS232的串口接的是UART3&#xff0c;接下来我们需要使能UART3的收发功能。一般串口的驱动程序在内核中都有包含&#xff0c;我们配置使能适配即可。 设备树 复用功能配置 查看6ull如何进行uart3的串口复用配置&#xff1a; 设备树下添加uart3的串口复用…

2.css简介

什么是css&#xff1a; CSS (Cascading Style Sheets&#xff0c;层叠样式表&#xff09;&#xff0c;是一种用来为结构化文档&#xff08;如 HTML 文档或 XML 应用&#xff09;添加样式&#xff08;字体、间距和颜色等&#xff09;的计算机语言&#xff0c;CSS 文件扩展名为 .…

数据可视化02-PCA降维

一、PCA PCA做什么&#xff1f;找坐标系。 目标&#xff1f;二维降到一维&#xff0c;信息保留最多。 怎么样最好&#xff1f;数据分布最分散的方向&#xff08;方差最大&#xff09;&#xff0c;作为主成分&#xff08;坐标轴&#xff09;。 二、怎么找主成分&#xff1f; …

TVbox蜂蜜影视:智能电视观影新选择,简洁界面与强大功能兼具

蜂蜜影视是一款基于猫影视开源项目 CatVodTVJarLoader 开发的智能电视软件&#xff0c;专为追求简洁与高效观影体验的用户设计。该软件从零开始编写&#xff0c;界面清爽&#xff0c;操作流畅&#xff0c;特别适合在智能电视上使用。其最大的亮点在于能够自动跳过失效的播放地址…

【word】电子签名设置、保存和调用

设置电子签名&#xff1a;将扫描版或照片 转化为 word的电子签名 保存电子签名&#xff1a;将上述电子签名 存储到 word资料库中 调用电子签名&#xff1a;在正文中使用 快捷键 快速调用word电子签名 1. 设置电子签名 1.1 手写版签名 1.2 插入到word 插入 - 图片 1.3 着色效…

KVM虚拟机磁盘创建探究-1

在使用 virt-install 命令时&#xff0c;像 --disk path/var/lib/libvirt/images/vm1.qcow2,size20 这样的参数配置会自动创建指定路径和大小的磁盘镜像文件&#xff0c;不需要再单独使用 qemu-img 去创建。 详细解释 当你使用 virt-install 并指定 --disk 参数时&#xff0c…

第三十三:6.3. 【mitt】 任意组件通讯

概述&#xff1a;与消息订阅与发布&#xff08;pubsub&#xff09;功能类似&#xff0c;可以实现任意组件间通信。 // 引入mitt import mitt from "mitt";// 创建emitter const emitter mitt()/*// 绑定事件emitter.on(abc,(value)>{console.log(abc事件被触发,…

Android Stuido 调整左侧文件导航栏文字大小

Android Studio左侧文件导航栏文字大小默认比较小&#xff0c;这里记录下调整的路径&#xff1a; File-->Settings-->Appearance & Behavior-->Appearance-->勾上“Use custom font:” 就可以调整文字大小了&#xff0c;然后确定就好了。

大模型学习笔记------LLM模型开发流程

大模型学习笔记------LLM模型开发流程 1、总体开发流程2、各部分说明3、总结 LLM(Large Language Model)模型&#xff0c;即大型语言模型是大模型中极其重要的分支。它包含了GPT、BERT、Gemini、Qwen、Llama等&#xff0c;这些大模型衍生了相当多的各种改进版本。这些大模型的开…

剑指 Offer II 040. 矩阵中最大的矩形

comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20040.%20%E7%9F%A9%E9%98%B5%E4%B8%AD%E6%9C%80%E5%A4%A7%E7%9A%84%E7%9F%A9%E5%BD%A2/README.md 剑指 Offer II 040. 矩阵中最大的矩形 题目描述 给定一个由 …

【含文档+PPT+源码】基于SpringBoot+Vue医药知识学习与分享平台的设计与实现

项目介绍 本课程演示的是一款 基于SpringBootVue医药知识学习与分享平台的设计与实现&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运…

基于提示驱动的潜在领域泛化的医学图像分类方法(Python实现代码和数据分析)

摘要 医学图像分析中的深度学习模型易受数据集伪影偏差、相机差异、成像设备差异等导致的分布偏移影响&#xff0c;导致在真实临床环境中诊断不可靠。领域泛化&#xff08;Domain Generalization, DG&#xff09;方法旨在通过多领域训练提升模型在未知领域的性能&#xff0c;但…

【监督学习】支持向量机步骤及matlab实现

支持向量机 &#xff08;四&#xff09;支持向量机1.算法步骤2. MATLAB 实现参考资料 &#xff08;四&#xff09;支持向量机 支持向量机&#xff08;Support Vector Machine, SVM&#xff09;是一种用于分类、回归分析以及异常检测的监督学习模型。SVM特别擅长处理高维空间的…