Свяжитесь с нами:

Возможности реранкеров и двухэтапного поиска для поисковой дополненной генерации

Искусственный общий интеллект

Возможности реранкеров и двухэтапного поиска для поисковой дополненной генерации

mm
Извлечение дополненной генерации

Когда дело доходит до обработки естественного языка (НЛП) и поиска информации, способность эффективно и точно извлекать соответствующую информацию имеет первостепенное значение. Поскольку эта область продолжает развиваться, разрабатываются новые методы и методологии для повышения производительности поисковых систем, особенно в контексте Извлечение дополненной генерации (ТРЯПКА). Один из таких методов, известный как двухэтапный поиск с переранжированием, стал мощным решением для устранения присущих традиционным методам поиска ограничений.

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

Понимание расширенной генерации поиска (RAG)

шведский агент LLM

Прежде чем углубляться в детали двухэтапного поиска и рераннеров, давайте кратко рассмотрим концепцию расширенной генерации поиска (RAG). RAG — это метод, расширяющий знания и возможности больших языковых моделей (LLM), предоставляя им доступ к внешним источникам информации, таким как базы данных или коллекции документов. Подробнее см. в статье «Глубокое погружение в поисковую дополненную генерацию в LLM».

Типичный процесс RAG включает следующие этапы:

  1. запрос: Пользователь задает вопрос или дает системе инструкции.
  2. поиск: Система запрашивает векторную базу данных или коллекцию документов, чтобы найти информацию, соответствующую запросу пользователя.
  3. увеличение: Полученная информация объединяется с исходным запросом или инструкцией пользователя.
  4. Поколение: языковая модель обрабатывает расширенный ввод и генерирует ответ, используя внешнюю информацию для повышения точности и полноты вывода.

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

Необходимость двухэтапного поиска и изменения ранжирования

Традиционные методы поиска, например, основанные на сопоставлении ключевых слов или моделях векторного пространства, часто не могут уловить тонкие семантические отношения между запросами и документами. Это ограничение может привести к получению документов, которые имеют лишь поверхностное значение или упускают важную информацию, которая может значительно улучшить качество создаваемого ответа.

Чтобы решить эту проблему, исследователи и практики обратились к двухэтапному поиску с помощью реранжеров. Этот подход включает в себя двухэтапный процесс:

  1. Первоначальное получение: На первом этапе относительно большой набор потенциально релевантных документов извлекается с использованием быстрого и эффективного метода поиска, такого как модель векторного пространства или поиск по ключевым словам.
  2. Изменение рейтинга: на втором этапе используется более сложная модель ранжирования для изменения порядка первоначально полученных документов в зависимости от их релевантности запросу, что эффективно выводит наиболее релевантные документы в начало списка.

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

Преимущества двухэтапного поиска и реранжирования

Внедрение двухэтапного поиска с механизмами изменения ранжирования дает несколько существенных преимуществ в контексте систем RAG:

  1. Улучшенная точность: изменяя ранжирование первоначально полученных документов и продвигая наиболее релевантные из них вверх, система может предоставлять более точную и точную информацию языковой модели, что приводит к более высокому качеству генерируемых ответов.
  2. Устранены проблемы вне домена: Модели внедрения, используемые для традиционного поиска, часто обучаются на текстовых корпусах общего назначения, которые могут неадекватно отражать язык и семантику, специфичные для предметной области. С другой стороны, модели реранжирования можно обучать на данных, специфичных для предметной области, что смягчает проблему «вне домена» и повышает релевантность полученных документов в специализированных доменах.
  3. Масштабируемость: двухэтапный подход обеспечивает эффективное масштабирование за счет использования быстрых и легких методов поиска на начальном этапе, сохраняя при этом более трудоемкий процесс изменения ранжирования для меньшего подмножества документов.
  4. Гибкость: Модели переранжирования можно заменять или обновлять независимо от первоначального метода поиска, что обеспечивает гибкость и адаптируемость к меняющимся потребностям системы.

ColBERT: Эффективное и действенное позднее взаимодействие

Одной из выдающихся моделей в области реранжирования является ColBERT (Контекстуализированное позднее взаимодействие через BERT). ColBERT — это модель изменения ранжирования документов, которая использует возможности глубокого понимания языка BERT и одновременно представляет новый механизм взаимодействия, известный как «позднее взаимодействие».

ColBERT: эффективный и действенный поиск проходов посредством контекстуализированного позднего взаимодействия через BERT

ColBERT: эффективный и действенный поиск проходов посредством контекстуализированного позднего взаимодействия через BERT

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

Архитектура позднего взаимодействия ColBERT обеспечивает ряд преимуществ, включая повышенную вычислительную эффективность, масштабируемость в зависимости от размера коллекции документов и практическую применимость в реальных сценариях. Кроме того, ColBERT был дополнительно улучшен такими методами, как контроль с шумоподавлением и остаточное сжатие (в ColBERTv2), которые оптимизируют процесс обучения и сокращают занимаемое моделью пространство, сохраняя при этом высокую эффективность поиска.

Этот фрагмент кода демонстрирует, как настроить и использовать модель jina-colbert-v1-en для индексации коллекции документов, используя ее способность эффективно обрабатывать длинные контексты.

Реализация двухэтапного поиска с помощью реранкеров

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

Настройка среды

Прежде чем погрузиться в код, давайте настроим среду разработки. Мы будем использовать Python и несколько популярных библиотек обработки естественного языка, включая Hugging Face Transformers, Sentence Transformers и LanceDB.

# Install required libraries
!pip install datasets huggingface_hub sentence_transformers lancedb

Подготовка данных

Для демонстрационных целей мы будем использовать набор данных «ai-arxiv-chunked» из Hugging Face Datasets, который содержит более 400 статей ArXiv по машинному обучению, обработке естественного языка и большим языковым моделям.

from datasets import load_dataset

dataset = load_dataset("jamescalam/ai-arxiv-chunked", split="train")

<pre>

Далее мы выполним предварительную обработку данных и разделим их на более мелкие фрагменты для облегчения эффективного извлечения и обработки.

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")

def chunk_text(text, chunk_size=512, overlap=64):
tokens = tokenizer.encode(text, return_tensors="pt", truncation=True)
chunks = tokens.split(chunk_size - overlap)
texts = [tokenizer.decode(chunk) for chunk in chunks]
return texts

chunked_data = []
for doc in dataset:
text = doc["chunk"]
chunked_texts = chunk_text(text)
chunked_data.extend(chunked_texts)

На начальном этапе поиска мы будем использовать модель преобразователя предложений для кодирования наших документов и запросов в плотные векторные представления, а затем выполним приблизительный поиск ближайшего соседа с использованием векторной базы данных, такой как LanceDB.
from sentence_transformers import SentenceTransformer
from lancedb import lancedb

# Load Sentence Transformer model
model = SentenceTransformer('all-MiniLM-L6-v2')

# Create LanceDB vector store
db = lancedb.lancedb('/path/to/store')
db.create_collection('docs', vector_dimension=model.get_sentence_embedding_dimension())

# Index documents
for text in chunked_data:
vector = model.encode(text).tolist()
db.insert_document('docs', vector, text)

from sentence_transformers import SentenceTransformer
from lancedb import lancedb

# Load Sentence Transformer model
model = SentenceTransformer('all-MiniLM-L6-v2')

# Create LanceDB vector store
db = lancedb.lancedb('/path/to/store')
db.create_collection('docs', vector_dimension=model.get_sentence_embedding_dimension())

# Index documents
for text in chunked_data:
vector = model.encode(text).tolist()
db.insert_document('docs', vector, text)

Проиндексировав наши документы, мы можем выполнить первоначальный поиск, найдя ближайших соседей к заданному вектору запроса.

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")

def chunk_text(text, chunk_size=512, overlap=64):
tokens = tokenizer.encode(text, return_tensors="pt", truncation=True)
chunks = tokens.split(chunk_size - overlap)
texts = [tokenizer.decode(chunk) for chunk in chunks]
return texts

chunked_data = []
for doc in dataset:
text = doc["chunk"]
chunked_texts = chunk_text(text)
chunked_data.extend(chunked_texts)

Изменение рейтинга

После первоначального поиска мы применим модель реранжирования, чтобы переупорядочить найденные документы в соответствии с их релевантностью запросу. В этом примере мы будем использовать реранжировщик ColBERT — быструю и точную модель на основе преобразователя, специально разработанную для ранжирования документов.

from lancedb.rerankers import ColbertReranker

reranker = ColbertReranker()

# Rerank initial documents
reranked_docs = reranker.rerank(query, initial_docs)

Радиус корня reranked_docs Список теперь содержит документы, упорядоченные в зависимости от их релевантности запросу, как это определено средством изменения ранжирования ColBERT.

Увеличение и генерация

Имея на руках переранжированные и релевантные документы, мы можем перейти к этапам дополнения и генерации конвейера RAG. Для генерации финального ответа мы воспользуемся языковой моделью из библиотеки Hugging Face Transformers.

from transformers import AutoTokenizer, AutoModelForSeq2SeqLM

tokenizer = AutoTokenizer.from_pretrained("t5-base")
model = AutoModelForSeq2SeqLM.from_pretrained("t5-base")

# Augment query with reranked documents
augmented_query = query + " " + " ".join(reranked_docs[:3])

# Generate response from language model
input_ids = tokenizer.encode(augmented_query, return_tensors="pt")
output_ids = model.generate(input_ids, max_length=500)
response = tokenizer.decode(output_ids[0], skip_special_tokens=True)

print(response)

В приведенном выше фрагменте кода мы дополняем исходный запрос тремя наиболее переранжированными документами, создавая augmented_query. Затем мы передаем этот расширенный запрос языковой модели T5, которая генерирует ответ на основе предоставленного контекста.

Радиус корня response Переменная будет содержать конечный результат, используя внешнюю информацию из полученных и переранжированных документов, чтобы предоставить более точный и полный ответ на исходный запрос.

Передовые методы и соображения

Хотя рассмотренная нами реализация обеспечивает прочную основу для интеграции двухэтапного извлечения и переранжировщиков в систему RAG, существует несколько передовых методов и соображений, которые могут дополнительно повысить производительность и надежность подхода.

  1. Расширение запроса: Чтобы улучшить начальный этап поиска, вы можете использовать методы расширения запроса, которые включают в себя дополнение исходного запроса связанными терминами или фразами. Это может помочь получить более разнообразный набор потенциально релевантных документов.
  2. Изменение рейтинга ансамбля: вместо того, чтобы полагаться на одну модель реранжирования, вы можете объединить несколько систем реранжирования в ансамбль, используя сильные стороны разных моделей для повышения общей производительности.
  3. Тонкая настройка реранкеров: Хотя предварительно обученные модели реранжирования могут быть эффективными, их точная настройка на данных, специфичных для предметной области, может еще больше повысить их способность улавливать семантику и сигналы релевантности, специфичные для предметной области.
  4. Итеративный поиск и переранжирование: В некоторых случаях одной итерации поиска и изменения ранжирования может быть недостаточно. Вы можете изучить итеративные подходы, при которых выходные данные языковой модели используются для уточнения процесса запроса и поиска, что приводит к созданию более интерактивной и динамичной системы.
  5. Баланс между актуальностью и разнообразием: Хотя реранжировщики стремятся продвигать наиболее релевантные документы, важно соблюдать баланс между релевантностью и разнообразием. Внедрение методов, способствующих разнообразию, поможет избежать чрезмерной ограниченности или предвзятости системы в отношении источников информации.
  6. Метрики оценки: Чтобы оценить эффективность вашего двухэтапного подхода к поиску и переранжированию, вам необходимо определить соответствующие метрики оценки. Они могут включать традиционные метрики поиска информации, такие как точность, полнота и средний обратный ранг (MRR), а также метрики, специфичные для конкретной задачи, адаптированные к вашему варианту использования.

Заключение

Поисковая дополненная генерация (RAG) стала мощным методом расширения возможностей больших языковых моделей за счет использования внешних источников информации. Однако традиционные методы поиска часто с трудом идентифицируют наиболее важные документы, что приводит к неоптимальной производительности.

Двухэтапный поиск с механизмами изменения ранжирования предлагает убедительное решение этой проблемы. Сочетая начальный этап быстрого поиска с более сложной моделью переранжирования, этот подход может значительно повысить точность и релевантность извлеченных документов, что в конечном итоге приведет к более высокому качеству ответов, генерируемых языковой моделью.

Последние пять лет я погружался в увлекательный мир машинного обучения и глубокого обучения. Моя страсть и опыт позволили мне принять участие в более чем 50 различных проектах по разработке программного обеспечения, уделяя особое внимание AI/ML. Мое постоянное любопытство также привлекло меня к обработке естественного языка, области, которую я очень хочу исследовать дальше.