Разблокировка LangChain & Flan-T5 XXL | Руководство по эффективному запросу документов

Unlocking LangChain & Flan-T5 XXL | Guide to Efficient Document Requests

Введение

Одна из конкретных категорий моделей искусственного интеллекта, известных как большие языковые модели (LLM), создана для понимания и генерации текста, схожего с человеческим. Термин “большой” часто определяется количеством параметров, которыми они обладают. Например, модель GPT-3 от OpenAI имеет 175 миллиардов параметров. Ее можно использовать для различных задач, таких как перевод текста, ответы на вопросы, написание эссе, краткое изложение текста. Несмотря на обилие ресурсов, демонстрирующих возможности LLM и предоставляющих руководство по настройке чат-приложений с их использованием, существует немного предприятий, которые тщательно изучают их пригодность для реальных деловых сценариев. В этой статье вы узнаете, как создать систему запросов документов с использованием LangChain & Flan-T5 XXL для построения приложений, основанных на больших языковых моделях.

Цели обучения

Прежде чем погрузиться в технические тонкости, давайте установим цели обучения этой статьи:

  • Понимание того, как LangChain может быть использован для создания приложений, основанных на больших языковых моделях
  • Краткий обзор фреймворка текст-к-текст и модели Flan-T5
  • Как создать систему запросов документов с использованием LangChain & любой модели LLM

Теперь давайте перейдем к изучению каждого из этих понятий в этих разделах.

Эта статья была опубликована в рамках Data Science Blogathon.

Роль LangChain в создании приложений на основе LLM

Фреймворк LangChain был разработан для разработки различных приложений, таких как чат-боты, генеративное вопросно-ответное моделирование (GQA) и резюмирование, использующих возможности больших языковых моделей (LLM). LangChain предоставляет комплексное решение для создания систем запросов документов. Это включает предварительную обработку корпуса путем разбиения на части, преобразование этих частей в векторное пространство, идентификацию подобных частей при постановке запроса и использование языковой модели для уточнения полученных документов в подходящий ответ.

Обзор модели Flan-T5

Flan-T5 – это коммерчески доступная модель LLM с открытым исходным кодом от исследователей Google. Это вариант модели T5 (Text-To-Text Transfer Transformer). T5 – это передовая модель языка, которая обучается в “текст-к-текст” фреймворке. Она обучается выполнять различные задачи NLP, преобразуя задачи в текстовый формат. FLAN – это сокращение от Finetuned Language Net.

Погрузимся в создание системы запросов документов

Мы можем создать эту систему запросов документов, используя модель LangChain и Flan-T5 XXL в бесплатной версии Google Colab. Чтобы выполнить следующий код в Google Colab, мы должны выбрать “T4 GPU” в качестве нашего рантайма. Выполните следующие шаги для создания системы запросов документов:

1: Импорт необходимых библиотек

Нам понадобится импортировать следующие библиотеки:

from langchain.document_loaders import TextLoader  #для текстовых файлов
from langchain.text_splitter import CharacterTextSplitter #разделитель текста
from langchain.embeddings import HuggingFaceEmbeddings #для использования моделей HugginFace
from langchain.vectorstores import FAISS  
from langchain.chains.question_answering import load_qa_chain
from langchain.chains.question_answering import load_qa_chain
from langchain import HuggingFaceHub
from langchain.document_loaders import UnstructuredPDFLoader  #загрузка PDF
from langchain.indexes import VectorstoreIndexCreator #векторизация индекса БД с использованием chromadb
from langchain.chains import RetrievalQA
from langchain.document_loaders import UnstructuredURLLoader  #загрузка URL в загрузчик документов
from langchain.chains.question_answering import load_qa_chain
from langchain import HuggingFaceHub
import os
os.environ["HUGGINGFACEHUB_API_TOKEN"] = "xxxxx"

2: Загрузка PDF с помощью PyPDFLoader

Здесь мы используем PyPDFLoader из библиотеки LangChain для загрузки нашего PDF-файла – “Data-Analysis.pdf”. Объект “loader” имеет атрибут с именем “load_and_split()”, который разделяет PDF на основе страниц.

#импорт csvfrom langchain.document_loaders import PyPDFLoader
# Загрузка PDF-файла из текущего рабочего каталога
loader = PyPDFLoader("Data-Analysis.pdf")
# Разделение PDF на страницы
pages = loader.load_and_split()

3: Разделение текста на фрагменты определенного размера

Модели для генерации векторных представлений имеют ограничения на фрагменты текста, передаваемые на вход. Если мы используем эти модели для генерации векторных представлений наших текстовых данных, важно разделить данные на определенный размер перед их передачей моделям. Здесь мы используем RecursiveCharacterTextSplitter для разделения данных, который работает, взяв большой текст и разделяя его на основе указанного размера фрагмента. Он делает это с помощью набора символов.

#импорт from langchain.text_splitter import RecursiveCharacterTextSplitter
# Определение размера фрагмента, наложения и разделителей
text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=1024,
    chunk_overlap=64,
    separators=['\n\n', '\n', '(?=>\. )', ' ', '']
)
docs  = text_splitter.split_documents(pages)

4: Получение числовых представлений для текста

Для числового представления неструктурированных данных, таких как текст, документы, изображения, аудио и т.д., нам нужны векторные представления (embeddings). Числовая форма захватывает контекстуальное значение того, что мы встраиваем. Здесь мы используем объект HuggingFaceHubEmbeddings для создания векторных представлений для каждого документа. Этот объект использует модель преобразования предложений и параграфов “all-mpnet-base-v2” от HuggingFace для отображения предложений и параграфов в плотное векторное пространство размерности 768.

#Встраивание
from langchain.embeddings import HuggingFaceEmbeddings
embeddings = HuggingFaceEmbeddings()

5: Сохранение векторных представлений в Vector Store

Теперь нам нужен Vector Store для наших векторных представлений. Здесь мы используем FAISS. FAISS, что означает Facebook AI Similarity Search, – мощная библиотека, разработанная для эффективного поиска и кластеризации плотных векторов, предлагающая ряд алгоритмов, которые могут искать наборы векторов любого размера, даже превышающие доступную оперативную память.

#Создание векторизованной базы данных
# Vectorstore: https://python.langchain.com/en/latest/modules/indexes/vectorstores.html
from langchain.vectorstores import FAISS
db = FAISS.from_documents(docs, embeddings)

6: Поиск схожести с помощью модели Flan-T5 XXL

Здесь мы подключаемся к хабу Hugging Face, чтобы получить модель Flan-T5 XXL.

Мы можем определить множество настроек для модели, таких как температура и максимальная длина.

Функция load_qa_chain предоставляет простой метод передачи документов в LLM. Используя тип цепочки “stuff”, функция берет список документов, объединяет их в одну подсказку и затем передает эту подсказку LLM.

llm=HuggingFaceHub(repo_id="google/flan-t5-xxl", model_kwargs={"temperature":1, "max_length":1000000})
chain = load_qa_chain(llm, chain_type="stuff")

#ЗАПРОС
query = "Подробно объясните, что такое квантитативный анализ данных?"
docs = db.similarity_search(query)
chain.run(input_documents=docs, question=query)

7: Создание цепочки QA с моделью Flan-T5 XXL

Используйте RetrievalQAChain для извлечения документов с помощью Retriever и затем используйте цепочку QA для ответа на вопрос на основе извлеченных документов. Он объединяет языковую модель с возможностями извлечения VectorDB.

from langchain.chains import RetrievalQA
qa = RetrievalQA.from_chain_type(llm=llm, chain_type="stuff", 
retriever=db.as_retriever(search_kwargs={"k": 3}))

8: Запрос нашего PDF

query = "Какие различные типы анализа данных?"
qa.run(query)

#Вывод
"Анализ описательных данных Анализ данных, основанный на теории Анализ данных, основанный на данных или истории"

Прикладные области в реальном мире

В настоящую эпоху информационного перенасыщения постоянно возникает проблема получения соответствующей информации из огромного объема текстовых данных. Традиционные поисковые системы часто не могут дать точные и контекстно-чувствительные ответы на конкретные запросы пользователей. В результате возрос спрос на сложные методологии обработки естественного языка (Natural Language Processing, NLP) с целью облегчения точных систем ответов на вопросы по документам (Document Question Answering, DQA). Система запросов документов, подобная той, которую мы построили, может быть чрезвычайно полезной для автоматизации взаимодействия с любым типом документов, таких как PDF, таблицы Excel, файлы HTML и другие. Используя этот подход, можно извлекать ценные знания из обширных коллекций документов с учетом контекста.

Заключение

В этой статье мы начали с обсуждения того, как мы можем использовать LangChain для загрузки данных из PDF-документа. Мы расширили эту возможность на другие типы документов, такие как CSV, HTML, JSON, Markdown и другие. Мы также узнали способы разделения данных на основе определенного размера блока, что является необходимым шагом перед созданием векторных представлений для текста. Затем мы получили векторные представления для документов, используя HuggingFaceHubEmbeddings. После сохранения векторных представлений в векторное хранилище, мы объединили поиск с нашей моделью LLM ‘Flan-T5 XXL’ в системе вопросов и ответов. Полученные документы и вопрос от пользователя были переданы в LLM для генерации ответа на заданный вопрос.

Основные выводы

  • LangChain предлагает всеобъемлющую платформу для безпроблемного взаимодействия с LLM, внешними источниками данных, подсказками и пользовательскими интерфейсами. Она позволяет создавать уникальные приложения, основанные на LLM, “связывая” компоненты из нескольких модулей.
  • Flan-T5 – это коммерчески доступная модель LLM с открытым исходным кодом. Она является вариантом модели T5 (Text-To-Text Transfer Transformer), разработанной Google Research.
  • Векторное хранилище хранит данные в виде многомерных векторов. Эти векторы являются математическими представлениями различных характеристик или атрибутов. Векторные хранилища разработаны для эффективного управления плотными векторами и предоставления расширенных возможностей поиска похожих элементов.
  • Процесс создания системы ответов на вопросы, основанной на документах, с использованием модели LLM и LangChain включает получение и загрузку текстового файла, разделение документа на управляемые секции, преобразование этих секций в векторные представления, сохранение их в векторной базе данных и создание цепочки вопрос-ответ для возможности ответа на вопросы по документу.

Часто задаваемые вопросы

Медиа, показанное в этой статье, не принадлежит Analytics Vidhya и используется по усмотрению автора.