Необходимо записать ваш датасет в векторную базу данных и выполнить эксперименты по поиску схожих фрагментов текста, соответствующих запросу.
- Разбиение текстовых документов на фрагменты.
- Разработать алгоритм разбиения текстовых документов на фрагменты текста. Можно использовать уже существующие механизмы, например, разбиение по длине фрагмента текста в символах и пересечению с соседними фрагментами. Дополнительные баллы за усложненные варианты, например: учитывать границы токенов и предложений.
- Подготовка метаданных для каждого фрагмента, таких как класс документа, автор документа, ключевые слова и др.
- Векторизация фрагментов текста.
В качестве метода векторизации можно использовать стороний api (huggingface, openai, etc.), w2v или любую другую модель на выбор. Рекомендуется применить модель с huggingface. Подходящие модели с huggingface можно выбрать по ссылке. Примеры моделей из huggingface:
- ai-forever/sbert_large_mt_nlu_ru (Russian language)
- sentence-transformers/paraphrase-multilingual-mpnet-base-v2 (50 languages)
- Создание Векторной Базы Данных (ВБД).
- Необходимо выбрать одну из доступных ВБД, например: Chroma (рекомендуемая с точки зрения простоты), Pinecone и т.д.
- Реализовать механизм загрузки и сохранения текстовых данных в ВБД.
- Поиск схожих фрагментов текста
- Выбрать алгоритмы similarity для поиска схожих фрагментов текста.
- Реализовать механизм поиска схожих фрагментов по заданным запросам.
- Оценка качества поиска
- Сгенерировать набор запросов к ВБД.
- Провести оценку качества поиска, определяя, насколько хорошо схожие фрагменты отображаются в результатах поиска. Оценку можно выполнить следующими способами:
- на основе ручной оценки качества запросов и соответствующих ответов;
- посчитать средний порядковый номер требуемого фрагмента в отсортированном по релевантности спике результатов.
Дополнительные баллы: провести эксперименты с разными системами векторизации и алгоритмами similarity. Сравнить средний порядковый номер требуемого фрагмента в отсортированном по релевантности спике результатов.
Общие рекомендации при использовании Google Colab:
- подключаться к окружению с GPU (T4);
- сохранять индекс на google disk, чтобы каждый раз его не пересоздавать.
Примеры классов, которые могут потребоваться для выполнения данного задания описаны в ноутбуке:
class Loader:
def load_single_document(self, file_path: str):
pass
def load_documents(self, source_dir: str):
pass
class Splitter:
def __init__(self, chunk_size, chunk_overlap):
pass
def split_documents(self, documents):
pass
class Collector:
def add(self, texts: list[str], metadatas: list[dict]):
pass
def add_from_directory(self, dir_path: str):
pass
def get(self, search_strings: list[str], n_results: int) -> list[Document]:
pass
def get_documents(self, search_string: str, n_results: int, score_threshold: float) -> list[Document]:
pass
def clear(self):
pass
class Embedder():
def __init__(self):
pass
def get_embedder(self):
pass
class HuggingFaceEmbedder(Embedder):
pass
class ChromaCollector(Collector):
pass
class CollectorEvaluator:
def __init__(self, collector: Collector, n_top=100):
pass
def explore_collector(self, text):
pass
def eval(self, query, answer):
pass
def calculate_statistics(self, data):
pass
def explore_and_calculate(self, data):
pass