Maison > Périphériques technologiques > IA > le corps du texte

Méthodes de construction de systèmes RAG multimodaux : utilisation de CLIP et LLM

WBOY
Libérer: 2024-01-13 22:24:12
avant
773 Les gens l'ont consulté

Nous discuterons des moyens de créer un système de génération augmentée de récupération (RAG) en utilisant le grand langage multimodal open source. Notre objectif est d'y parvenir sans compter sur l'index LangChain ou Lllama pour éviter d'ajouter davantage de dépendances au framework.

Méthodes de construction de systèmes RAG multimodaux : utilisation de CLIP et LLM

Qu'est-ce que RAG

Dans le domaine de l'intelligence artificielle, l'émergence de la technologie de génération augmentée et de récupération (RAG) a apporté des améliorations révolutionnaires aux grands modèles de langage (Large Language Models). L’essence de RAG est d’améliorer la réactivité de l’intelligence artificielle en permettant aux modèles de récupérer dynamiquement des informations en temps réel à partir de sources externes. L’introduction de cette technologie permet à l’IA de répondre plus spécifiquement aux besoins des utilisateurs. En récupérant et en fusionnant des informations provenant de sources externes, RAG est en mesure de générer des réponses plus précises et plus complètes, offrant ainsi aux utilisateurs un contenu plus précieux. Cette amélioration des capacités a ouvert des perspectives plus larges aux domaines d'application de l'intelligence artificielle, notamment le service client intelligent, la recherche intelligente et les systèmes de questions et réponses de connaissances. L'émergence de RAG marque le développement ultérieur des modèles de langage, apportant

à l'intelligence artificielle. Cette architecture combine de manière transparente le processus de récupération dynamique avec des capacités de génération, permettant à l'intelligence artificielle de s'adapter aux informations changeantes dans divers domaines. Contrairement au réglage fin et au recyclage, RAG fournit une solution rentable qui permet à l'IA d'obtenir les informations les plus récentes et pertinentes sans modifier l'ensemble du modèle. Cette combinaison de capacités donne à RAG un avantage pour répondre à des environnements d'information en évolution rapide.

Le rôle de RAG

1. Améliorer la précision et la fiabilité :

résout le problème de l'imprévisibilité des grands modèles de langage (LLM) en les dirigeant vers des sources de connaissances fiables, réduisant ainsi le risque de fournir les informations fausses ou obsolètes rendent les réponses plus précises et plus fiables.

2. Augmenter la transparence et la confiance :

Les modèles d'IA générative comme LLM manquent souvent de transparence, ce qui rend difficile pour les gens de faire confiance à leurs résultats. RAG répond aux préoccupations concernant la partialité, la fiabilité et la conformité en offrant un meilleur contrôle.

3. Réduire les hallucinations :

LLM est sujet à des réactions hallucinatoires - fournissant des informations cohérentes mais inexactes ou fabriquées. RAG réduit le risque de conseils trompeurs aux secteurs clés en s’appuyant sur des sources faisant autorité pour garantir la réactivité.

4. Adaptabilité rentable :

RAG fournit un moyen rentable d'améliorer la production de l'IA sans nécessiter de recyclage/réglage approfondi. Les informations peuvent être maintenues à jour et pertinentes en récupérant dynamiquement des détails spécifiques selon les besoins, garantissant ainsi l'adaptabilité de l'IA à l'évolution des informations.

Modèle modal multimodal

Le multimodal implique d'avoir plusieurs entrées et de les combiner en une seule sortie, en prenant CLIP comme exemple : les données d'entraînement de CLIP sont des paires texte-image, et grâce à l'apprentissage contrastif, le modèle Capacité à apprendre les relations de correspondance entre les paires texte-image.

Ce modèle génère le même vecteur d'intégration (très similaire) pour différentes entrées qui représentent la même chose.

Méthodes de construction de systèmes RAG multimodaux : utilisation de CLIP et LLM


Multi-modal

Méthodes de construction de systèmes RAG multimodaux : utilisation de CLIP et LLM

modal grand langage (grande langue multimodale)

GPT4V et Gemini Vision explorer et intégrer divers types de données (y compris les images, le texte, langage, audio, etc.) modèle de langage multimodal (MLLM). Bien que les grands modèles de langage (LLM) comme GPT-3, BERT et RoBERTa fonctionnent bien sur les tâches basées sur du texte, ils sont confrontés à des défis dans la compréhension et le traitement d'autres types de données. Pour remédier à cette limitation, les modèles multimodaux combinent différentes modalités pour permettre une compréhension plus complète des différentes données.

Grand modèle de langage multimodal Il va au-delà des méthodes traditionnelles basées sur le texte. En prenant GPT-4 comme exemple, ces modèles peuvent traiter de manière transparente divers types de données, notamment des images et du texte, pour comprendre les informations de manière plus complète.

Combiné avec RAG

Ici, nous utiliserons Clip pour intégrer des images et du texte, stockerons ces intégrations dans la base de données vectorielles ChromDB. Le grand modèle sera ensuite exploité pour participer à des sessions de discussion avec les utilisateurs sur la base des informations récupérées.

Méthodes de construction de systèmes RAG multimodaux : utilisation de CLIP et LLM


Nous utiliserons des images de Kaggle et des informations de Wikipédia pour créer un chatbot expert en fleurs

Nous installons d'abord le package :

! pip install -q timm einops wikipedia chromadb open_clip_torch !pip install -q transformers==4.36.0 !pip install -q bitsandbytes==0.41.3 accelerate==0.25.0
Copier après la connexion

Les étapes pour prétraiter les données sont très simples mettez simplement les images et le texte dans un dossier

Méthodes de construction de systèmes RAG multimodaux : utilisation de CLIP et LLM

可以随意使用任何矢量数据库,这里我们使用ChromaDB。

import chromadb  from chromadb.utils.embedding_functions import OpenCLIPEmbeddingFunction from chromadb.utils.data_loaders import ImageLoader from chromadb.config import Settings   client = chromadb.PersistentClient(path="DB")  embedding_function = OpenCLIPEmbeddingFunction() image_loader = ImageLoader() # must be if you reads from URIs
Copier après la connexion

ChromaDB需要自定义嵌入函数

from chromadb import Documents, EmbeddingFunction, Embeddings  class MyEmbeddingFunction(EmbeddingFunction):def __call__(self, input: Documents) -> Embeddings:# embed the documents somehow or imagesreturn embeddings
Copier après la connexion

这里将创建2个集合,一个用于文本,另一个用于图像

collection_images = client.create_collection(name='multimodal_collection_images', embedding_functinotallow=embedding_function, data_loader=image_loader)  collection_text = client.create_collection(name='multimodal_collection_text', embedding_functinotallow=embedding_function, )  # Get the Images IMAGE_FOLDER = '/kaggle/working/all_data'   image_uris = sorted([os.path.join(IMAGE_FOLDER, image_name) for image_name in os.listdir(IMAGE_FOLDER) if not image_name.endswith('.txt')]) ids = [str(i) for i in range(len(image_uris))]  collection_images.add(ids=ids, uris=image_uris) #now we have the images collection
Copier après la connexion

对于Clip,我们可以像这样使用文本检索图像

from matplotlib import pyplot as plt  retrieved = collection_images.query(query_texts=["tulip"], include=['data'], n_results=3) for img in retrieved['data'][0]:plt.imshow(img)plt.axis("off")plt.show()
Copier après la connexion

Méthodes de construction de systèmes RAG multimodaux : utilisation de CLIP et LLM

也可以使用图像检索相关的图像

Méthodes de construction de systèmes RAG multimodaux : utilisation de CLIP et LLM

文本集合如下所示

# now the text DB from chromadb.utils import embedding_functions default_ef = embedding_functions.DefaultEmbeddingFunction()  text_pth = sorted([os.path.join(IMAGE_FOLDER, image_name) for image_name in os.listdir(IMAGE_FOLDER) if image_name.endswith('.txt')])  list_of_text = [] for text in text_pth:with open(text, 'r') as f:text = f.read()list_of_text.append(text)  ids_txt_list = ['id'+str(i) for i in range(len(list_of_text))] ids_txt_list  collection_text.add(documents = list_of_text,ids =ids_txt_list )
Copier après la connexion

然后使用上面的文本集合获取嵌入

results = collection_text.query(query_texts=["What is the bellflower?"],n_results=1 )  results
Copier après la connexion

结果如下:

{'ids': [['id0']],'distances': [[0.6072186183744086]],'metadatas': [[None]],'embeddings': None,'documents': [['Campanula () is the type genus of the Campanulaceae family of flowering plants. Campanula are commonly known as bellflowers and take both their common and scientific names from the bell-shaped flowers—campanula is Latin for "little bell".\nThe genus includes over 500 species and several subspecies, distributed across the temperate and subtropical regions of the Northern Hemisphere, with centers of diversity in the Mediterranean region, Balkans, Caucasus and mountains of western Asia. The range also extends into mountains in tropical regions of Asia and Africa.\nThe species include annual, biennial and perennial plants, and vary in habit from dwarf arctic and alpine species under 5 cm high, to large temperate grassland and woodland species growing to 2 metres (6 ft 7 in) tall.']],'uris': None,'data': None}
Copier après la connexion

或使用图片获取文本

query_image = '/kaggle/input/flowers/flowers/rose/00f6e89a2f949f8165d5222955a5a37d.jpg' raw_image = Image.open(query_image)  doc = collection_text.query(query_embeddings=embedding_function(query_image), n_results=1,  )['documents'][0][0]
Copier après la connexion

Méthodes de construction de systèmes RAG multimodaux : utilisation de CLIP et LLM

上图的结果如下:

A rose is either a woody perennial flowering plant of the genus Rosa (), in the family Rosaceae (), or the flower it bears. There are over three hundred species and tens of thousands of cultivars. They form a group of plants that can be erect shrubs, climbing, or trailing, with stems that are often armed with sharp prickles. Their flowers vary in size and shape and are usually large and showy, in colours ranging from white through yellows and reds. Most species are native to Asia, with smaller numbers native to Europe, North America, and northwestern Africa. Species, cultivars and hybrids are all widely grown for their beauty and often are fragrant. Roses have acquired cultural significance in many societies. Rose plants range in size from compact, miniature roses, to climbers that can reach seven meters in height. Different species hybridize easily, and this has been used in the development of the wide range of garden roses.
Copier après la connexion

这样我们就完成了文本和图像的匹配工作,其实这里都是CLIP的工作,下面我们开始加入LLM。

from huggingface_hub import hf_hub_download  hf_hub_download(repo_, filename="configuration_llava.py", local_dir="./", force_download=True) hf_hub_download(repo_, filename="configuration_phi.py", local_dir="./", force_download=True) hf_hub_download(repo_, filename="modeling_llava.py", local_dir="./", force_download=True) hf_hub_download(repo_, filename="modeling_phi.py", local_dir="./", force_download=True) hf_hub_download(repo_, filename="processing_llava.py", local_dir="./", force_download=True)
Copier après la connexion

我们是用visheratin/LLaVA-3b

from modeling_llava import LlavaForConditionalGeneration import torch  model = LlavaForConditionalGeneration.from_pretrained("visheratin/LLaVA-3b") model = model.to("cuda")
Copier après la connexion

加载tokenizer

from transformers import AutoTokenizer  tokenizer = AutoTokenizer.from_pretrained("visheratin/LLaVA-3b")
Copier après la connexion

然后定义处理器,方便我们以后调用

from processing_llava import LlavaProcessor, OpenCLIPImageProcessor  image_processor = OpenCLIPImageProcessor(model.config.preprocess_config) processor = LlavaProcessor(image_processor, tokenizer)
Copier après la connexion

下面就可以直接使用了

question = 'Answer with organized answers: What type of rose is in the picture? Mention some of its characteristics and how to take care of it ?'  query_image = '/kaggle/input/flowers/flowers/rose/00f6e89a2f949f8165d5222955a5a37d.jpg' raw_image = Image.open(query_image)  doc = collection_text.query(query_embeddings=embedding_function(query_image), n_results=1,  )['documents'][0][0]  plt.imshow(raw_image) plt.show() imgs = collection_images.query(query_uris=query_image, include=['data'], n_results=3) for img in imgs['data'][0][1:]:plt.imshow(img)plt.axis("off")plt.show()
Copier après la connexion

得到的结果如下:

Méthodes de construction de systèmes RAG multimodaux : utilisation de CLIP et LLM

结果还包含了我们需要的大部分信息

Méthodes de construction de systèmes RAG multimodaux : utilisation de CLIP et LLM

这样我们整合就完成了,最后就是创建聊天模板,

prompt = """system A chat between a curious human and an artificial intelligence assistant. The assistant is an exprt in flowers , and gives helpful, detailed, and polite answers to the human's questions. The assistant does not hallucinate and pays very close attention to the details. user <image> {question} Use the following article as an answer source. Do not write outside its scope unless you find your answer better {article} if you thin your answer is better add it after document. assistant """.format(questinotallow='question', article=doc)</image>
Copier après la connexion

如何创建聊天过程我们这里就不详细介绍了,完整代码在这里:

https://www.php.cn/link/71eee742e4c6e094e6af364597af3f05

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:51cto.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!