Radient est une bibliothèque légère conviviale pour les développeurs pour les données non structurées ETL, c'est-à-dire transformant l'audio, les graphiques, les images, les molécules, le texte et d'autres types de données en intégres. Radient prend en charge une vectorisation simple ainsi que des workflows complexes centrés sur les vecteurs.
$ pip install radientSi vous trouvez ce projet utile ou intéressant, envisagez de lui donner une étoile.
La vectorisation de base peut être effectuée comme suit:
from radient import text_vectorizer
vz = text_vectorizer ()
vz . vectorize ( "Hello, world!" )
# Vector([-3.21440510e-02, -5.10351397e-02, 3.69579718e-02, ...]) L'extrait ci-dessus vectorise la chaîne "Hello, world!" À l'aide d'un modèle par défaut, à savoir bge-small-en-v1.5 à partir de sentence-transformers . Si votre environnement Python ne contient pas la bibliothèque sentence-transformers , Radient vous invitera:
vz = text_vectorizer ()
# Vectorizer requires sentence-transformers. Install? [Y/n]Vous pouvez taper "Y" pour que Radient l'installe automatiquement pour vous.
Chaque vectorisateur peut prendre un paramètre method ainsi que des arguments de mots clés facultatifs qui sont transmis directement à la bibliothèque de vectorisation sous-jacente. Par exemple, nous pouvons choisir le modèle mxbai-embed-large-v1 de Mixbread AI en utilisant la bibliothèque sentence-transformers via:
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, ...])Avec RADIENT, vous n'êtes pas limité au texte. L'audio, les graphiques, les images et les molécules peuvent également être vectorisés:
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" )Une liste partielle des méthodes et des KWargs en option pris en charge par chaque modalité peut être trouvé ici.
Pour les cas d'utilisation de production avec de grandes quantités de données, les performances sont essentielles. Radient fournit également une fonction accelerate pour optimiser les vectorieurs à la volée:
import numpy as np
vz = text_vectorizer ()
vec0 = vz . vectorize ( "Hello, world!" )
vz . accelerate ()
vec1 = vz . vectorize ( "Hello, world!" )
np . allclose ( vec0 , vec1 )
# TrueSur un quad-core à 2,3 GHz Intel Core i7, le vectorisateur d'origine revient en ~ 32 ms, tandis que le vecctizer accéléré revient en ~ 17 ms.
En plus d'exécuter des expériences, la vectorisation pure n'est pas particulièrement utile. Réfléchissant sur les pipelines ETL de données strurées, les charges de travail ETL de données non structurées nécessitent souvent une combinaison de quatre composants: une source de données où des données non structurées sont stockées, un plus de modules de transformation qui effectuent des conversions de données et un prétraitement, un vectorisateur qui transforme les données en calcul sémèrement riches, et un puits pour persister les vecteurs une fois qu'ils ont été calculés.
Radient fournit un objet Workflow spécifiquement pour la construction d'applications ETL centrées sur les vecteurs. Avec les workflows, vous pouvez combiner n'importe quel nombre de chacun de ces composants dans un graphique dirigé. Par exemple, un flux de travail pour lire en continu des documents texte de Google Drive, les vectoriser avec un voyage AI, et les vectoriser dans Milvus pourrait ressembler:
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" )
) Vous pouvez utiliser des vecteurs accélérés et se transformer dans un flux de travail en spécifiant accelerate=True pour tous les opérateurs pris en charge.
Radient construit au sommet des travaux de la communauté ML plus large. La plupart des vecteurs proviennent d'autres bibliothèques:
L'accélération du modèle à la volée se fait via ONNX.
Un grand merci à tous les créateurs et maintenateurs de ces bibliothèques.
Quelques fonctionnalités prévues à court terme (espérons-le):
Les connecteurs LLM ne seront pas une fonctionnalité que Radient fournit. La construction de systèmes de contexte autour des LLM est une tâche complexe, et non celle que Radient a l'intention de résoudre. Des projets tels que Haystack et Llamaindex sont deux des nombreuses grandes options à considérer si vous cherchez à extraire des performances de chiffon maximum.
Un article complet sur Radient viendra plus tard, ainsi que plus d'applications d'échantillons, alors restez à l'écoute.