自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一款好用的開源工具,高效實現(xiàn)Reranker 原創(chuàng)

發(fā)布于 2024-9-14 14:25
瀏覽
0收藏

Reranker 是任何檢索架構(RAG、Agent等)的重要組成部分,但它們通常也比PipeLine中其他部分更模糊。有時,甚至很難知道該使用哪一個。每個問題都是不同的,使用 X 的最佳模型不一定與使用 Y 的模型相同;新的重新排名方法不斷涌現(xiàn),該如何兼容他們呢?今天介紹一款高效擴展工具rerankers:

設計目標

新的重新排名方法不斷涌現(xiàn):例如,RankGPT 使用 LLM 對文檔進行重新排序,就在去年出現(xiàn),取得了非常有希望的零樣本基準測試結果。

所有不同的重新排名方法往往都在自己的庫中完成,具有不同級別的文檔。這導致了更高的進入門檻。新用戶需要在多種不熟悉的輸入/輸出格式之間切換,所有這些格式都有自己的怪癖!

rerankers目標是:

  • ??。它僅提供作為依賴項的基本必需品。
  • ?? 易于理解。只需學習少數(shù)幾個calls,然后您可以使用提供的所有重新排名模型。
  • ??易于集成。它應該適合幾乎任何現(xiàn)有的管道,只需幾行代碼!
  • ??易于擴展。只需對代碼庫知之甚少,即可添加任何新的重新排名模型。您所需要的只是一個新類,其中包含一個將 (query, [documents]) 輸入映射到output.rank()
  • ??易于調試。這是一個測試版,可能會有問題,但代碼庫的構思方式使大多數(shù)問題都應該易于跟蹤并盡快修復。

支持的模型

目前項目庫支持各類rerank模型:

  • ? 任何標準的 SentenceTransformer 或 Transformers 交叉編碼器
  • ? RankGPT (可通過原始 RankGPT 實現(xiàn)和改進的 RankLLM 實現(xiàn)獲得)
  • ? 基于T5 pointwise排名器(InRanker、MonoT5...)
  • ? 基于LLM pointwise排名器(BAAI/bge-reranker-v2.5-gemma2-lightweight 等)
  • ? Cohere、Jina、Voyage 和 MixedBread API 重新排名器
  • ? FlashRank 重新排序器(ONNX 優(yōu)化模型,在 CPU 上非??欤?/li>
  • ? 基于 ColBERT 的 reranker - 不是最初為重新排序而設計的模型,但在某些情況下確實表現(xiàn)得相當強大。實現(xiàn)是輕量級的,僅基于 transformers。
  • ??? RankLLM/RankZephyr:通過包裝 rank-llm 庫庫來支持!對 RankZephyr/RankVicuna 的支持未經測試,但 RankLLM + GPT 模型完全有效!

工具安裝

工具安裝比較簡單,一行即可:

# All transformers-based approaches (cross-encoders, t5, colbert)
pip install "rerankers[transformers]"


# API-based rerankers (Cohere, Jina, soon MixedBread)
pip install "rerankers[api]"


# FlashRank rerankers (ONNX-optimised, very fast on CPU)
pip install "rerankers[flashrank]"


# All of the above
pip install "rerankers[all]"

工具調用

模型加載

無論架構如何,都可以在一行中加載任何受支持的 reranker:

from rerankers import Reranker


# Cross-encoder default. You can specify a 'lang' parameter to load a multilingual version!
ranker = Reranker('cross-encoder')
# RankLLM with specified GPT models
ranker = Reranker('gpt-4-turbo', model_type="rankllm", api_key = API_KEY)


# ColBERTv2 reranker
ranker = Reranker("colbert")


# ... Or a non-default colbert model:
ranker = Reranker(model_name_or_path, model_type = "colbert")

Rerankers 將始終嘗試根據其名稱推斷您嘗試使用的模型,但如果可以,向其傳遞 ??model_type?? 參數(shù)總是更安全的!?

模型推理

無論加載了哪個 reranker,都使用加載的模型對 documents 的查詢進行排名,也支持異步調用:

results = ranker.rank(query="I love you", docs=["I hate you", "I really like you"], doc_ids=[0,1])
# 異步用法
results = await ranker.rank_async(query="I love you", docs=["I hate you", "I really like you"], doc_ids=[0,1])
results

result:

RankedResults(results=[
  Result(document=Document(text='I really like you', doc_id=1), score=-2.453125, rank=1), 
  Result(document=Document(text='I hate you', doc_id=0), score=-4.14453125, rank=2)], 
  query='I love you', has_scores=True)

所有 reranker 都將返回一個對象,這是一個 pydantic 對象,其中包含對象列表和一些其他有用信息,例如原始查詢。您可以通過運行 :??RankedResults????Result????k????top_k()??

results.top_k(1)
# [Result(Document(doc_id=1, text='I really like you', metadata={}), score=0.26170814, rank=1)]

langchain中也能用,只需一行就可轉換:

compressor = ranker.as_langchain_compressor(k=3)

好啦,介紹到這里,更多用法等你去探索吧:

https://github.com/answerdotai/rerankers


本文轉載自公眾號哎呀AIYA

原文鏈接:??https://mp.weixin.qq.com/s/NrbqFRkOtOa8z3rt8c0KKw??

?著作權歸作者所有,如需轉載,請注明出處,否則將追究法律責任
收藏
回復
舉報
回復
相關推薦