Radient
Radient 是一个对开发者友好的轻量级库,用于非结构化数据的 ETL,即将音频、图形、图像、分子、文本和其他数据类型转换为嵌入向量。Radient 支持简单的向量化以及复杂的以向量为中心的工作流程。
$ pip install radient
如果您觉得这个项目有帮助或有趣,请考虑给它一个星标。:star:
入门
基本的向量化可以按以下方式进行:
from radient import text_vectorizer
vz = text_vectorizer()
vz.vectorize("Hello, world!")
# Vector([-3.21440510e-02, -5.10351397e-02, 3.69579718e-02, ...])
上面的代码片段使用默认模型(即来自 sentence-transformers
的 bge-small-en-v1.5
)将字符串 "Hello, world!"
向量化。如果您的 Python 环境中没有 sentence-transformers
库,Radient 会提示您安装:
vz = text_vectorizer()
# Vectorizer requires sentence-transformers. Install? [Y/n]
您可以输入 "Y",让 Radient 自动为您安装。
每个向量化器都可以接受 method
参数以及可选的关键字参数,这些参数会直接传递给底层的向量化库。例如,我们可以通过以下方式使用 Mixbread AI 的 mxbai-embed-large-v1
模型和 sentence-transformers
库:
vz_mbai = text_vectorizer(method="sentence-transformers", model_name_or_path="mixedbread-ai/mxbai-embed-large-v1")
vz_mbai.vectorize("Hello, world!")
# Vector([ 0.01729078, 0.04468533, 0.00055427, ...])
不仅仅是文本
使用 Radient,您不仅限于文本。音频、图形、图像和分子也可以被向量化:
from radient import (
audio_vectorizer,
graph_vectorizer,
image_vectorizer,
molecule_vectorizer,
)
avec = audio_vectorizer().vectorize(str(Path.home() / "audio.wav"))
gvec = graph_vectorizer().vectorize(nx.karate_club_graph())
ivec = image_vectorizer().vectorize(str(Path.home() / "image.jpg"))
mvec = molecule_vectorizer().vectorize("O=C=O")
每种模态支持的方法和可选参数的部分列表可以在这里找到。
对于处理大量数据的生产用例,性能至关重要。Radient 还提供了 accelerate
函数来即时优化向量化器:
import numpy as np
vz = text_vectorizer()
vec0 = vz.vectorize("Hello, world!")
vz.accelerate()
vec1 = vz.vectorize("Hello, world!")
np.allclose(vec0, vec1)
# True
在 2.3 GHz 四核 Intel Core i7 上,原始向量化器需要约 32 毫秒,而加速后的向量化器只需约 17 毫秒。
构建非结构化数据 ETL
除了运行实验外,单纯的向量化用处不大。与结构化数据 ETL 管道类似,非结构化数据 ETL 工作负载通常需要四个组件的组合:存储非结构化数据的__数据源__、执行数据转换和预处理的一个或多个__转换__模块、将数据转换为语义丰富的嵌入向量的__向量化器__,以及用于持久化计算得到的向量的__接收器__。
Radient 提供了一个 Workflow
对象,专门用于构建以向量为中心的 ETL 应用程序。使用 Workflow,您可以将任意数量的这些组件组合成一个有向图。例如,一个从 Google Drive 持续读取文本文档、使用 Voyage AI 进行向量化,然后将向量存入 Milvus 的工作流可能如下所示:
from radient import make_operator
from radient import Workflow
extract = make_operator("source", method="google-drive", task_params={"folder": "My Files"})
transform = make_operator("transform", method="read-text", task_params={})
vectorize = make_operator("vectorizer", method="voyage-ai", modality="text", task_params={})
load = make_operator("sink", method="milvus", task_params={"operation": "insert"})
wf = (
Workflow()
.add(extract, name="extract")
.add(transform, name="transform")
.add(vectorize, name="vectorize")
.add(load, name="load")
)
您可以通过为所有支持的操作符指定 accelerate=True
来在 Workflow 中使用加速的向量化器和转换器。
支持的向量化引擎
Radient 建立在更广泛的 ML 社区的工作基础之上。大多数向量化器来自其他库:
即时模型加速通过 ONNX 实现。
非常感谢这些库的所有创建者和维护者。
即将推出™
近期计划的一些功能(希望如此):
- 稀疏向量、二进制向量和多向量支持
- 支持 Huggingface 上所有相关的嵌入模型
LLM 连接器将不会是 Radient 提供的功能。围绕 LLM 构建上下文感知系统是一项复杂的任务,不是 Radient 打算解决的问题。如果您想要提取最大的 RAG 性能,可以考虑 Haystack 和 Llamaindex 等许多优秀选项中的两个。
关于 Radient 的完整介绍将在稍后发布,届时还会附带更多示例应用,敬请期待。