#mlx-embeddings:本地运行视觉与语言嵌入模型的强大工具
项目介绍
mlx-embeddings 是一个开源软件包,专为在本地环境中运行视觉与语言嵌入模型而设计。该工具基于 MLX 框架,可以方便地生成文本和图像的嵌入表示,并支持单件和批量处理,同时提供文本相似性比较的实用工具。mlx-embeddings 遵循 GNU 通用公共许可证 v3,用户可以自由地使用和修改。
项目技术分析
mlx-embeddings 的核心是一个功能强大的嵌入模型,能够处理文本和图像数据,生成可用于各种下游任务的嵌入表示。该软件包的架构设计旨在优化本地计算资源的使用,并支持多种模型架构,包括 XLM-RoBERTa、BERT 和 ModernBERT 等。这些模型能够捕捉文本的深层次语义信息,为文本分析和图像描述任务提供强大的支持。
技术亮点包括:
- 多模型支持:mlx-embeddings 支持多种文本嵌入模型,能够满足不同的文本处理需求。
- 单件与批量处理:既可以处理单个文本或图像,也可以批量处理,提高数据处理效率。
- 相似性比较工具:内置工具可以计算文本之间的相似度,为文本分类、检索等任务提供基础。
项目技术应用场景
mlx-embeddings 的应用场景广泛,以下是一些典型场景:
-
文本相似度计算:在搜索引擎、推荐系统、问答系统等领域,文本相似度计算是关键任务。mlx-embeddings 可以快速生成文本的嵌入表示,进而计算相似度,提高系统性能。
-
图像描述匹配:在图像识别和描述任务中,mlx-embeddings 能够将图像和文本描述转化为嵌入表示,并通过计算它们之间的相似度来判断匹配程度。
-
数据挖掘和知识发现:在数据分析和知识发现中,文本和图像的嵌入表示可以用于发现数据中的模式和信息,为决策提供支持。
项目特点
mlx-embeddings 之所以受到开发者和研究者的青睐,主要由于其以下特点:
- 易用性:通过简单的 pip 安装即可使用,API 设计直观,易于集成到现有系统中。
- 高效性:本地运行,减少了对远程服务器的依赖,提高了计算效率和响应速度。
- 灵活性:支持多种模型架构,用户可以根据需求选择适合的模型。
- 开放性:开源项目,遵循 GNU 通用公共许可证 v3,用户可以自由修改和分享。
以下是 mlx-embeddings 的具体安装和使用方式:
安装
使用 pip 命令安装 mlx-embeddings:
pip install mlx-embeddings
使用
单个文本嵌入
from mlx_embeddings.utils import load
# 加载模型和分词器
model_name = "sentence-transformers/all-MiniLM-L6-v2"
model, tokenizer = load(model_name)
# 准备文本
text = "I like reading"
# 分词并生成嵌入
input_ids = tokenizer.encode(text, return_tensors="mlx")
outputs = model(input_ids)
raw_embeds = outputs.last_hidden_state[:, 0, :] # CLS token
text_embeds = outputs.text_embeds # 平均池化和归一化嵌入
批量处理和文本相似度比较
from sklearn.metrics.pairwise import cosine_similarity
import matplotlib.pyplot as plt
import seaborn as sns
import mlx.core as mx
from mlx_embeddings.utils import load
# 加载模型和分词器
model, tokenizer = load("sentence-transformers/all-MiniLM-L6-v2")
def get_embedding(texts, model, tokenizer):
inputs = tokenizer.batch_encode_plus(texts, return_tensors="mlx", padding=True, truncation=True, max_length=512)
outputs = model(
inputs["input_ids"],
attention_mask=inputs["attention_mask"]
)
return outputs.text_embeds # 平均池化和归一化嵌入
def compute_and_print_similarity(embeddings):
B, _ = embeddings.shape
similarity_matrix = cosine_similarity(embeddings)
print("相似度矩阵:")
print(similarity_matrix)
print("\n")
for i in range(B):
for j in range(i+1, B):
print(f"序列 {i+1} 和序列 {j+1} 之间的相似度:{similarity_matrix[i][j]:.4f}")
return similarity_matrix
# 可视化结果
def plot_similarity_matrix(similarity_matrix, labels):
plt.figure(figsize=(5, 4))
sns.heatmap(similarity_matrix, annot=True, cmap='coolwarm', xticklabels=labels, yticklabels=labels)
plt.title('相似度矩阵热图')
plt.tight_layout()
plt.show()
# 示例文本
texts = [
"I like grapes",
"I like fruits",
"The slow green turtle crawls under the busy ant."
]
embeddings = get_embedding(texts, model, tokenizer)
similarity_matrix = compute_and_print_similarity(embeddings)
# 可视化结果
labels = [f"文本 {i+1}" for i in range(len(texts))]
plot_similarity_matrix(similarity_matrix, labels)
mlx-embeddings 是一个功能丰富且易于使用的工具,适用于各种文本和图像处理任务。无论是研究者还是开发者,都可以从中受益,提高工作效率,加速项目进展。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考