Модели больших языков (LLM) произвели революцию в обработке естественного языка (NLP). Эти модели обучаются на больших объемах данных и могут использоваться для генерации текста, перевода языков и ответов на вопросы.
В этом руководстве мы узнаем, как создать базовую программу ответов на вопросы (QnA), способную извлекать информацию из текстового документа. Это идеальная отправная точка для понимания того, как поиск информации работает с LangChain.
Но что такое LangChain? LangChain — это фреймворк, предназначенный для упрощения создания приложений с использованием больших языковых моделей. Его можно использовать для создания общих задач NLP, таких как обобщение и ответы на вопросы, или для создания более сложных вариантов использования.
Вот шаги, которые мы выполним, чтобы построить нашу программу QnA:
- Загрузите текст и разделите его на куски.
- Создавайте вложения из текстовых фрагментов.
- Загрузите Falcon-7B-instruct LLM.
- Создайте цепочку ответов на вопросы.
- Запустите цепочку с запросом.
1. Загрузите данные и разделите их на части
from langchain.text_splitter import RecursiveCharacterTextSplitter with open("./text_file.txt") as f: text_file = f.read() text_splitter = RecursiveCharacterTextSplitter( chunk_size=500, chunk_overlap=20) chunks = text_splitter.split_text(text_file)
Метод RecursiveCharacterTextSplitter разбивает текст на фрагменты по 500 символов. Аргумент chunk_overlap указывает, насколько должно быть перекрытие между фрагментами. Чтобы векторизовать каждый фрагмент, нам нужно встроить их, как мы увидим на следующем шаге.
2. Создайте вложения
from langchain.embeddings.huggingface import HuggingFaceEmbeddings from langchain.vectorstores import FAISS embeddings = HuggingFaceEmbeddings() vectorStore = FAISS.from_texts(chunks, embeddings)
Для создания вложений мы будем использовать класс HuggingFaceEmbeddings, являющийся оболочкой пакета sentence_transformers из HuggingFace. Затем новый экземпляр embeddings используется для создания объекта векторного хранилища FAISS, который использует библиотеку Faiss для эффективного поиска сходства.
3. Загрузите Falcon-7B-Instruct
from langchain import HuggingFaceHub os.environ["HUGGINGFACEHUB_API_TOKEN"] = "YOUR_API_TOKEN" llm=HuggingFaceHub(repo_id="tiiuae/falcon-7b-instruct", model_kwargs={"temperature":0.1 ,"max_length":512})
Чтобы ответить на вопросы из нашего текста, нам нужен LLM. Мы будем использовать Falcon-7B-Instruct, который мы импортируем из HuggingFaceHub. Но для того, чтобы делать запросы к API, вам сначала нужно будет создать токен API на веб-сайте HuggingFace.
4. Создайте цепочку QnA
from langchain.chains import RetrievalQA from langchain.schema import retriever chain = RetrievalQA.from_chain_type(llm=llm, chain_type="stuff", retriever=vectorStore.as_retriever())
Здесь мы создаем новый экземпляр класса RetrievalQA и передаем конструктору языковую модель, тип цепочки и средство извлечения. Тип цепочки stuff — это простая цепочка, объединяющая извлекатель и LLM.
Извлекатель выполняет семантический поиск в векторном хранилище, сравнивая запрос (то есть вопрос) с каждым фрагментом текста и возвращая наиболее релевантный. Возвращенный фрагмент затем передается LLM в качестве контекста, чтобы помочь ему ответить на вопрос.
5. Запустите цепочку
query="What did Wilson deliver?" chain.run(query)
Наконец, мы определяем запрос и вызываем метод run() для объекта цепочки, который мы создали на предыдущем шаге.
Вы можете найти полный код в моем GitHub, перейдя по этой ссылке.
Надеюсь, вам понравилось это руководство так же, как мне понравилось его писать. Если вы хотите увидеть больше моего контента, вы можете подписаться на меня на Medium. Я буду публиковать больше руководств по LLM.