Sentrev ( sen the tr ansformers ev aluator) é um pacote Python que visa executar testes de avaliação simples para ajudá -lo a escolher o melhor modelo de incorporação para a geração aumentada (RAG) de recuperação com seus documentos PDF.
Sentrev funciona com:
SentenceTransformer no pacote Python sentence_transformers Você pode instalar o pacote usando pip ( mais fácil, mas sem personalização ):
python3 -m pip install sentrevOu você pode construí -lo a partir do código -fonte ( mais difícil, mas personalizável ):
# 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 aplica um fluxo de trabalho de avaliação muito simples:
Veja a figura abaixo para obter uma visualização do fluxo de trabalho
As métricas usadas para avaliar o desempenho foram:
Taxa de sucesso : definido como a operação de recuperação numérica na qual o contexto correto foi recuperado no topo do ranking entre todos os contextos recuperados, fora do total de operações de recuperação:
Classificação recíproca média (MRR) : MRR define o quão alto na classificação do contexto correto é colocado entre os resultados recuperados. MRR@10 foi utilizado, o que significa que para cada operação de recuperação 10 itens foram retornados e uma avaliação foi realizada para a classificação do contexto correto, que foi normalizado entre 0 e 1 (já implementado no Sentrev). Um MRR de 1 significa que o contexto correto foi classificado primeiro, enquanto um MRR de 0 significa que não foi recuperado. O MRR é calculado com a seguinte equação geral:
Quando o contexto correto não é recuperado, o MRR é definido automaticamente como 0. O MRR é calculado para cada operação de recuperação, o desvio médio e padrão é calculado e relatado.
Desempenho do tempo : para cada operação de recuperação, o desempenho do tempo em segundos é calculado: a média e o desvio padrão são relatadas.
Emissões de carbono : As emissões de carbono são calculadas em GCO2EQ (gramas do equivalente a CO2) através do codecarbon da biblioteca Python e foram avaliadas para a região austríaca. Eles são relatados para a carga computacional global de todas as operações de recuperação.
Você pode executar facilmente QDrant localmente com o Docker:
docker pull qdrant/qdrant:latest
docker run -p 6333:6333 -p 6334:6334 qdrant/qdrant:latest Agora seu banco de dados vetorial está ouvindo em http://localhost:6333
Digamos que temos três PDFs ( ~/pdfs/instructions.pdf , ~/pdfs/history.pdf , ~/pdfs/info.pdf ) e queremos testar a recuperação com três sentence-transformers/all-MiniLM-L6-v2 , sentence-transformers/sentence-t5-base sentence-transformers/all-mpnet-base-v2 .
Podemos fazer isso com este código muito simples:
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 ) Você pode brincar com o Chunking do seu PDF definindo o argumento chunking_size ou com a porcentagem de texto usado para testar a recuperação, definindo text_percentage ou com a métrica de distância usada para recuperação, definindo o argumento distance ou com as configurações mrr ajustando o número de itens recuperados (neste caso 10); Você também pode passar plot=True se desejar plotagens para a avaliação: as parcelas serão salvas na mesma pasta do arquivo CSV; Se você deseja ativar o rastreamento de emissões de carbono, poderá usar a opção carbon_tracking seguida pelo código ISO de três letras do estado em que está.
Você também pode explorar soluções de banco de dados de QDRANT na nuvem (mais sobre isso aqui). Você só precisa do seu URL de cluster de QDRANT e da chave da API para acessá -la:
from qdrant_client import QdrantClient
client = QdrantClient ( url = "YOUR-QDRANT-URL" , api_key = "YOUR-API-KEY" )Esta é a única alteração que você precisa fazer no código fornecido no exemplo antes.
Você pode usar o Sentrev também para reduzir, vetorize e fazer upload de seus PDFs para um banco de dados 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 ) Quanto a antes, você também pode brincar com o argumento chunking_size (o padrão é 1000) e com o argumento distance (o padrão é cosseno).
Você também pode pesquisar coleções já existentes em um banco de dados QDRANT com 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 )Os resultados serão retornados como uma lista de cargas úteis (os metadados que você enviou para a coleção QDRANT junto com os pontos de vetor).
Se você usou a função Sentrev upload_pdfs , poderá acessar os resultados dessa maneira:
text = res [ 0 ][ "text" ]
source = res [ 0 ][ "source" ]
page = res [ 0 ][ "page" ]Você pode se referir ao caso de teste relatado aqui
Encontre uma referência para todas as funções e aulas aqui
As contribuições são sempre bem -vindas!
Encontre diretrizes de contribuição em contribuições.md
Este projeto é de código aberto e é fornecido sob uma licença do MIT.
Se você usou SenTrEv para avaliar seus modelos de recuperação, considere citá -lo:
Bertelli, AC (2024). Avaliação do desempenho de três incorporadores de texto dos transformadores de frases - um estudo de caso para Sentrev (v0.1.0). Zenodo. https://doi.org/10.5281/zenodo.14503887
Se você achou útil, considere financiá -lo.