Sentrev ( Senence Tr Ansformers Ev Aluator) - это пакет Python, который предназначен для проведения простых оценочных тестов, чтобы помочь вам выбрать лучшую модель встраивания для извлечения дополненного поколения (RAG) с вашими документами PDF.
Sentrev работает с:
SentenceTransformer в пакете Python sentence_transformers Вы можете установить пакет с помощью pip ( проще, но без настройки ):
python3 -m pip install sentrevИли вы можете построить его из исходного кода ( более сложный, но настраиваемый ):
# clone the repo
git clone https://github.com/AstraBert/SenTrEv.git
# access the repo
cd SenTrEv
# build the package
python3 -m build
# install the package locally with editability settings
python3 -m pip install -e .Sentrev применяет очень простой рабочий процесс оценки:
См. Рисунок ниже для визуализации рабочего процесса
Метрики, используемые для оценки производительности, были:
Уровень успеха : определяется как операция по поиску числа, в которой правильный контекст был извлечен в рейтинг среди всех извлеченных контекстов, из общего количества операций поиска:
Средний взаимный рейтинг (MRR) : MRR определяет, насколько высоко в рейтинге правильный контекст находится среди полученных результатов. Был использован MRR@10, что означает, что для каждой операции поиска 10 пунктов были возвращены, и была проведена оценка для ранжирования правильного контекста, который затем был нормализован между 0 и 1 (уже реализованной в Sentrev). MRR из 1 означает, что правильный контекст был ранжирован первым, тогда как MRR 0 означает, что он не был извлечен. MRR рассчитывается со следующим общим уравнением:
Когда правильный контекст не получен, MRR автоматически устанавливается в 0. MRR рассчитывается для каждой операции поиска, затем рассчитывается и сообщается среднее и стандартное отклонение.
Производительность времени : для каждой операции поиска рассчитывается производительность времени за считанные секунды: затем сообщается среднее и стандартное отклонение.
Выбросы углерода : выбросы углерода рассчитываются в GCO2EQ (граммы эквивалента CO2) через codecarbon библиотеки Python и были оценены для австрийского региона. Они сообщаются о глобальной вычислительной нагрузке всех операций поиска.
Вы можете легко запустить Qdrant локально с Docker:
docker pull qdrant/qdrant:latest
docker run -p 6333:6333 -p 6334:6334 qdrant/qdrant:latest Теперь ваша векторная база данных прослушивается по адресу http://localhost:6333
Let's say we have three PDFs ( ~/pdfs/instructions.pdf , ~/pdfs/history.pdf , ~/pdfs/info.pdf ) and we want to test retrieval with three different encoders sentence-transformers/all-MiniLM-L6-v2 , sentence-transformers/sentence-t5-base , sentence-transformers/all-mpnet-base-v2 .
Мы можем сделать это с этим очень простым кодом:
from sentrev . evaluator import evaluate_rag
from sentence_transformers import SentenceTransformer
from qdrant_client import QdrantClient
# load all the embedding moedels
encoder1 = SentenceTransformer ( 'sentence-transformers/all-MiniLM-L6-v2' )
encoder2 = SentenceTransformer ( 'sentence-transformers/sentence-t5-base' )
encoder3 = SentenceTransformer ( 'sentence-transformers/all-mpnet-base-v1' )
# create a list of the embedders and a dictionary that map each one with its name for the stats report which will be output by SenTrEv
encoders = [ encoder1 , encoder2 , encoder3 ]
encoder_to_names = { encoder1 : 'all-MiniLM-L6-v2' , encoder2 : 'sentence-t5-base' , encoder3 : 'all-mpnet-base-v1' }
# set up a Qdrant client
client = QdrantClient ( "http://localhost:6333" )
# create a list of your PDF paths
pdfs = [ '~/pdfs/instructions.pdf' , '~/pdfs/history.pdf' , '~/pdfs/info.pdf' ]
# Choose a path for the CSV where the evaluation stats will be saved
csv_path = '~/eval/stats.csv'
# evaluate retrieval
evaluate_rag ( pdfs = pdfs , encoders = encoders , encoder_to_name = encoder_to_names , client = client , csv_path = csv_path , distance = 'euclid' , chunking_size = 400 , mrr = 10 , carbon_tracking = "USA" , plot = True ) Вы можете поиграть с подсветкой вашего PDF, установив аргумент chunking_size или с процентом текста, используемого для проверки поиска путем установки text_percentage или с метрикой расстояния, используемой для поиска, путем установки аргумента distance или настройки mrr путем настройки номера полученных элементов (в данном случае 10); Вы также можете перенести plot=True если вам нужны графики для оценки: графики будут сохранены под одной и той же папкой файла CSV; Если вы хотите включить отслеживание выбросов углерода, вы можете использовать опцию carbon_tracking , за которой следует код ISO с тремя буквами состояния, в котором вы находитесь.
Вы также можете использовать решения Qdrant на облаке базы данных (подробнее об этом здесь). Вам просто нужен ваш URL -адрес Qdrant Cluster и ключ API, чтобы получить к нему доступ:
from qdrant_client import QdrantClient
client = QdrantClient ( url = "YOUR-QDRANT-URL" , api_key = "YOUR-API-KEY" )Это единственное изменение, которое вы должны внести в код, указанный в примере ранее.
Вы также можете использовать Sentrev, чтобы купить, векторизировать и загружать свои PDF -файлы в базу данных Qdrant.
from sentrev . evaluator import upload_pdfs
encoder = SentenceTransformer ( 'sentence-transformers/all-MiniLM-L6-v2' )
pdfs = [ '~/pdfs/instructions.pdf' , '~/pdfs/history.pdf' , '~/pdfs/info.pdf' ]
client = QdrantClient ( "http://localhost:6333" )
upload_pdfs ( pdfs = pdfs , encoder = encoder , client = client ) Что касается ранее, вы также можете поиграть с аргументом chunking_size (по умолчанию 1000) и с аргументом distance (по умолчанию косинус).
Вы также можете искать уже существующие коллекции в базе данных Qdrant с Sentrev:
from sentrev . utils import NeuralSearcher
encoder = SentenceTransformer ( 'sentence-transformers/all-MiniLM-L6-v2' )
collection_name = 'customer_help'
client = QdrantClient ( "http://localhost:6333" )
searcher = NeuralSearcher ( client = client , model = encoder , collection_name = collection_name )
res = searcher . search ( "Is it possible to pay online with my credit card?" , limit = 5 )Результаты будут возвращены в виде списка полезных нагрузок (метаданные, которые вы загружены в коллекцию Qdrant вместе с векторными точками).
Если вы использовали функцию sentrev upload_pdfs , вы сможете получить доступ к результатам таким образом:
text = res [ 0 ][ "text" ]
source = res [ 0 ][ "source" ]
page = res [ 0 ][ "page" ]Вы можете обратиться к тестируемому примеру, представленному здесь
Найдите ссылку для всех функций и классов здесь
Вклад всегда приветствуются!
Найдите руководящие принципы взносов на Anplying.md
Этот проект является открытым исходным кодом и предоставляется по лицензии MIT.
Если вы использовали SenTrEv для оценки ваших моделей поиска, пожалуйста, рассмотрите возможность ссылаться на них:
Бертелли, AC (2024). Оценка производительности трех предложений Text Text Encedders - тематическое исследование для Sentrev (v0.1.0). Зенодо. https://doi.org/10.5281/zenodo.14503887
Если вы нашли это полезным, пожалуйста, рассмотрите возможность его финансирования.