Sentrev ( Sen Tence Tr Ansformers EV Aluator)は、PDFドキュメントを使用して検索拡張生成(RAG)に最適な埋め込みモデルを選択するのに役立つ簡単な評価テストを実行することを目的としたPythonパッケージです。
Sentrev Works:
SentenceTransformerを介してロードされたテキスト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で既に実装されています)の間で正規化されました。 1のMRRは、正しいコンテキストが最初にランク付けされたことを意味しますが、0のMRRはそれが取得されなかったことを意味します。 MRRは、次の一般式で計算されます。
正しいコンテキストが取得されない場合、MRRは自動的に0に設定されます。MRRは検索操作ごとに計算され、平均および標準偏差が計算および報告されます。
時間のパフォーマンス:検索操作ごとに、秒単位での時間パフォーマンスが計算されます。その後、平均偏差と標準偏差が報告されます。
炭素排出量:炭素排出量は、Pythonライブラリコーデcodecarbonを介してGCO2EQ(CO2相当のグラム)で計算され、オーストリア地域で評価されました。これらは、すべての検索操作のグローバルな計算負荷について報告されています。
dockerでqdrantをローカルに簡単に実行できます。
docker pull qdrant/qdrant:latest
docker run -p 6333:6333 -p 6334:6334 qdrant/qdrant:latestこれで、Vectorデータベースはhttp://localhost:6333で聴いています
3つのPDF( ~/pdfs/instructions.pdf 、 ~/pdfs/history.pdf 、 ~/pdfs/info.pdf )があり、3つの異なるエンコーダー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 ) chunking_size引数を設定することにより、またはtext_percentageを設定することにより検索に使用されるテキストの割合で、またはdistance引数を設定することで検索に使用される距離メトリックを使用して、または取得したアイテムの数を調整してmrr設定を使用して、PDFのチャンキングを遊ぶことができます(この場合は10)。評価用のプロットが必要な場合は、 plot=Trueを渡すこともできます。プロットは、CSVファイルの同じフォルダーの下に保存されます。炭素排出トラッキングをオンにする場合は、 carbon_trackingオプションを使用して、3レッターのISOコードの状態を使用できます。
また、QDRANT On-Cloudデータベースソリューションを活用することもできます(詳細については、こちらについて詳しく説明します)。 QDRANTクラスターURLとAPIキーが必要です。
from qdrant_client import QdrantClient
client = QdrantClient ( url = "YOUR-QDRANT-URL" , api_key = "YOUR-API-KEY" )これは、以前の例で提供されているコードに対して行わなければならない唯一の変更です。
Sentrevを使用して、PDFSを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引数(デフォルトはCOSINE)で遊ぶこともできます。
また、SentRevを使用してQDRANTデータベースで既存のコレクションを検索することもできます。
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" ]ここで報告されているテストケースを参照できます
ここですべての機能とクラスの参照を見つける
貢献はいつでも大歓迎です!
Convributing.mdで貢献ガイドラインを見つけます
このプロジェクトはオープンソースであり、MITライセンスの下で提供されます。
SenTrEvを使用して検索モデルを評価する場合は、それを引用することを検討してください。
Bertelli、AC(2024)。 Three Sente Transformers Text Embeddersのパフォーマンスの評価 - Sentrevのケーススタディ(v0.1.0)。ゼノド。 https://doi.org/10.5281/zenodo.14503887
便利だと思った場合は、資金を調達することを検討してください。