Analyser les publications de visages câlins avec des graphiques et des agents

DEV - 21/11
txtai est une base de données d'intégration tout-en-un pour la recherche sémantique, l'orchestration LLM et le langage...

txtai est une base de données d'intégration tout-en-un pour les workflows de recherche sémantique, d'orchestration LLM et de modèles de langage.

Les bases de données Embeddings peuvent éventuellement créer un réseau de graphiques aux côtés des vecteurs stockés. Le graphique déduit automatiquement les relations du contenu à l'aide des plongements vectoriels calculés. Cela fournit un moyen supplémentaire d’explorer et d’analyser le contenu.

txtai 8.0 a été récemment publié et a ajouté la possibilité d'exécuter des agents. Les agents créent automatiquement des flux de travail pour répondre aux demandes des utilisateurs à multiples facettes.

Cet article montrera comment utiliser ces concepts avec l'ensemble de données Hugging Face Posts. Si vous n'êtes pas familier avec les graphes sémantiques, le parcours de graphes et les agents dans txtai, consultez les articles ci-dessous avant de continuer.

Articles à revoir :

  • Présentation du graphe sémantique
  • RAG avancé avec parcours de chemin graphique
  • Quoi de neuf dans txtai 8.0

Installer les dépendances

Installertxtaiet toutes les dépendances.

pip install txtai[graph] ensembles de données autoawq
Entrer en mode plein écran Quitter le mode plein écran

Messages sur le visage câlin

Hugging Face Posts est un site de microblog. Il comptait plus de 2 000 publications uniques en novembre 2024. La section suivante définit les méthodes permettant de générer des enregistrements à partir de cet ensemble de données.

De plus, il charge un LLM pour déduire les titres de chaque article.

from datasets import load_dataset from txtai import LLM llm = LLM("hugging-quants/Meta-Llama-3.1-8B-Instruct-AWQ-INT4") def title(text): prompt = f""" Créer un sujet simple et concis pour le texte suivant. Renvoie uniquement le nom du sujet : {text} """ return llm([{"role": "user", "content": prompt}], maxlength=2048) def hfposts() : ds = load_dataset("maxiw/hf-posts", split="train") pour la ligne dans ds : rendement { "id": title(row["rawContent"]), "text ": row["rawContent"], "author": row["author"]["name"], "date": row["publishedAt"], "url": f"https://hf.co{row['url']}", "reactions": sum(x["count"] pour x dans la ligne["reactions"]), "views": row["totalUniqueImpressions "], "comments": row["numComments"] }
Entrer en mode plein écran Quitter le mode plein écran

Maintenant, construisons un index Embeddings. Nous stockerons des vecteurs, du contenu et construirons un réseau de graphiques. Le réseau graphique construit automatiquement des relations entre les enregistrements en utilisant la similarité vectorielle.

depuis tqdm import tqdm depuis txtai import Embeddings embeddings = Embeddings( autoid="uuid5", path="intfloat/e5-large", instructions={"query": "query: ", "data": "passage: "}, content=True, graph={"approximate": False, "minscore": 0.7}, ) embeddings.index(tqdm(hfposts()))
Entrer en mode plein écran Quitter le mode plein écran

Avec un GPU moderne, cette étape ne devrait pas prendre longtemps. La partie la plus longue du processus consiste à exécuter plus de 2 000 invites LLM pour générer des titres. Sans cela, la création de l’index d’intégration ne prendrait que quelques secondes.

Si vous souhaitez ignorer cette étape, vous pouvez à la place charger un index d'intégration précalculé à partir du Hugging Face Hub comme suit.

embeddings = Embeddings() embeddings.load(provider="huggingface-hub", conteneur="neuml/txtai-hfposts")
Entrer en mode plein écran Quitter le mode plein écran

Lançons un exemple de recherche pour vérifier que l'index fonctionne.

embeddings.search("transformateurs")
Entrer en mode plein écran Quitter le mode plein écran
[{'id' : 'AI Music Generation', 'text' : 'J'adore ce nouvel espace construit par @enzostvs + @Xenova pour Transformers.js : générez votre propre musique IA (génération dans le navigateur) avec AI Jukebox \n\ nhttps://huggingfac...
[Courte citation de 8% de l'article original]
Loading...