偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

輕松構(gòu)建聊天機(jī)器人、準(zhǔn)確性新SOTA,RAG有了更強(qiáng)大的AI檢索器

人工智能 新聞
本文中,DenserAI 團(tuán)隊(duì)推出的 Denser Retriever 在快速原型設(shè)計(jì)方面表現(xiàn)突出。用戶可以通過(guò)一個(gè)簡(jiǎn)單的 Docker Compose 命令快速安裝 Denser Retriever 及其所需工具。Denser Retriever 不僅僅止步于此,它還提供了自托管解決方案,支持企業(yè)級(jí)生產(chǎn)環(huán)境的部署。

黃志恒擁有愛(ài)丁堡大學(xué)博士和加州大學(xué)伯克利博士后研究經(jīng)歷。志恒曾在微軟、百度、Facebook、騰訊和亞馬遜等 IT 公司工作。志恒在亞馬遜 AWS 擔(dān)任首席科學(xué)家領(lǐng)導(dǎo)了 Amazon Kendra 和 Amazon Q。志恒現(xiàn)在是 Denser.ai 的創(chuàng)始人。截至 2024 年 5 月,Google Scholar 引用次數(shù)超過(guò) 13,300 次。

李萬(wàn)鈞是一位資深全棧工程師,同時(shí)具備設(shè)計(jì)師和運(yùn)維工程師的專(zhuān)長(zhǎng)。他曾在多個(gè)大型項(xiàng)目中擔(dān)任核心工程師和架構(gòu)師,擁有豐富的實(shí)戰(zhàn)經(jīng)驗(yàn)。目前在 denser.ai 擔(dān)任全棧工程師,專(zhuān)注于將 AI 技術(shù)深度融合到軟件開(kāi)發(fā)的各個(gè)階段。

檢索增強(qiáng)生成 (RAG) 是將檢索模型與生成模型結(jié)合起來(lái),以提高生成內(nèi)容的質(zhì)量和相關(guān)性的一種有效的方法。RAG 的核心思想是利用大量文檔或知識(shí)庫(kù)來(lái)獲取相關(guān)信息。各種工具支持 RAG,包括 Langchain 和 LlamaIndex。

AI Retriever 是 RAG 框架的基礎(chǔ),確保 AI 應(yīng)用中的準(zhǔn)確和無(wú)縫體驗(yàn)。Retriever 大致分為兩類(lèi):關(guān)鍵詞搜索和向量搜索。關(guān)鍵詞搜索依賴于關(guān)鍵詞匹配,而向量搜索則關(guān)注語(yǔ)義相似性。流行的工具包括用于關(guān)鍵詞搜索的 Elasticsearch 和用于向量搜索的 Milvus、Chroma 和 Pinecone。

在大語(yǔ)言模型時(shí)代,從工程師和科學(xué)家到市場(chǎng)營(yíng)銷(xiāo)等各個(gè)領(lǐng)域的專(zhuān)業(yè)人士,都熱衷于開(kāi)發(fā) RAG AI 應(yīng)用原型。像 Langchain 這樣的工具對(duì)此過(guò)程至關(guān)重要。例如,用戶可以使用 Langhian 和 Chroma 快速構(gòu)建一個(gè)用于法律文檔分析的 RAG 應(yīng)用。

本文中,DenserAI 團(tuán)隊(duì)推出的 Denser Retriever 在快速原型設(shè)計(jì)方面表現(xiàn)突出。用戶可以通過(guò)一個(gè)簡(jiǎn)單的 Docker Compose 命令快速安裝 Denser Retriever 及其所需工具。Denser Retriever 不僅僅止步于此,它還提供了自托管解決方案,支持企業(yè)級(jí)生產(chǎn)環(huán)境的部署。

此外,Denser Retriever 在 MTEB 檢索數(shù)據(jù)集上提供了全面的檢索基準(zhǔn)測(cè)試,以確保部署中的最高準(zhǔn)確性。用戶不僅可以享受 Denser Retriever 的易用性,還可以享受其最先進(jìn)的準(zhǔn)確性。

圖片

  • GitHub地址:https://github.com/denser-org/denser-retriever/tree/main
  • 博客地址:https://denser.ai/blog/denser-retriever/

Denser Retriever 能做什么?

Denser Retriever 的初始版本提供了以下功能:

  • 支持異構(gòu)檢索器,如關(guān)鍵詞搜索、向量搜索和機(jī)器學(xué)習(xí)模型重排序。
  • 利用 xgboost 機(jī)器學(xué)習(xí)技術(shù)有效結(jié)合異構(gòu)檢索器。
  • 在 MTEB 檢索基準(zhǔn)測(cè)試中實(shí)現(xiàn) State of the art accuracy。
  • 演示如何使用 Denser Retriever 來(lái)驅(qū)動(dòng)端到端應(yīng)用,如聊天機(jī)器人和語(yǔ)義搜索。

為什么選擇 Denser Retriever?

  • Open Source Commitment:Denser Retriever 是開(kāi)源的,提供透明性和持續(xù)的社區(qū)驅(qū)動(dòng)改進(jìn)機(jī)會(huì)。
  • Production-Ready:設(shè)計(jì)用于生產(chǎn)環(huán)境的部署,確保在實(shí)際應(yīng)用中的可靠性和穩(wěn)定性。
  • State-of-the-art accuracy:提供最先進(jìn)的準(zhǔn)確性,提高 AI 應(yīng)用質(zhì)量。
  • 可擴(kuò)展性:無(wú)論是處理不斷增長(zhǎng)的數(shù)據(jù)需求還是擴(kuò)展用戶需求,Denser Retriever 都能無(wú)縫擴(kuò)展以滿足要求。
  • 靈活性:該工具適應(yīng)廣泛的應(yīng)用,并可根據(jù)具體需求進(jìn)行定制,是多種行業(yè)的多功能選擇。

在這篇博客中,我們將展示如何安裝 Denser Retriever,從文本文件或網(wǎng)頁(yè)頁(yè)面構(gòu)建檢索索引,并在此索引上進(jìn)行查詢。

由于篇幅限制,本文不會(huì)涵蓋更多高級(jí)主題,如使用自定義數(shù)據(jù)集訓(xùn)練 Denser Retriever、在 MTEB 基準(zhǔn)數(shù)據(jù)集上進(jìn)行評(píng)估以及創(chuàng)建端到端 AI 應(yīng)用(如聊天機(jī)器人)。有興趣的用戶可參考以下資源獲取這些高級(jí)主題的信息。

設(shè)置

安裝 Denser Retriever

我們使用 Poetry 安裝和管理 Denser Retriever 包。在倉(cāng)庫(kù)根目錄下使用以下命令安裝 Denser Retriever。

git clone https://github.com/denser-org/denser-retriever
cd denser-retriever
make install

更多細(xì)節(jié)可以在 DEVELOPMENT 文檔中找到:https://github.com/denser-org/denser-retriever/blob/main/DEVELOPMENT.md

安裝 Elasticsearch 和 Milvus

運(yùn)行 Denser Retriever 需要 Elasticsearch 和 Milvus,它們分別支持關(guān)鍵詞搜索和向量搜索。我們按照以下指示在本地計(jì)算機(jī)(例如,您的筆記本電腦)上安裝 Elasticsearch 和 Milvus。

要求:docker 和 docker compose,它們都包含在 Docker Desktop 中,適用于 Mac 或 Windows 用戶。

  • 手動(dòng)下載 docker-compose.dev.yml 并保存為 docker-compose.yml,或者使用以下命令。
wget https://raw.githubusercontent.com/denser-org/denser-retriever/main/docker-compose.dev.yml \
-O docker-compose.yml
  • 使用以下命令啟動(dòng)服務(wù)。
docker compose up -d


  • Optionally,我們可以運(yùn)行以下命令驗(yàn)證 Milvus 是否正確安裝。
poetry run python -m pytest tests/test_retriever_milvus.py

索引和查詢用例

在索引和查詢用例中,用戶提供一組文檔,如文本文件或網(wǎng)頁(yè),以構(gòu)建檢索器。然后用戶可以查詢?cè)摍z索器以從提供的文檔中獲取相關(guān)結(jié)果。此用例的代碼可在 index_and_query_from_docs.py 中找到。

代碼地址:https://github.com/denser-org/denser-retriever/blob/main/experiments/index_and_query_from_docs.py

要運(yùn)行此示例,請(qǐng)導(dǎo)航到 denser-retriever 倉(cāng)庫(kù)并執(zhí)行以下命令:

poetry run python experiments/index_and_query_from_docs.py=

如果運(yùn)行成功,我們預(yù)期會(huì)看到類(lèi)似以下的輸出。

2024-05-27 12:00:55 INFO: ES ingesting passages.jsonl record 96
2024-05-27 12:00:55 INFO: Done building ES index
2024-05-27 12:00:55 INFO: Remove existing Milvus index state_of_the_union
2024-05-27 12:00:59 INFO: Milvus vector DB ingesting passages.jsonl record 96
2024-05-27 12:01:03 INFO: Done building Vector DB index
[{'source': 'tests/test_data/state_of_the_union.txt',
'text': 'One of the most serious constitutional responsibilities...',
'title': '', 'pid': 73,
'score': -1.6985594034194946}]

在接下來(lái)的部分中,我們將解釋其中的基礎(chǔ)過(guò)程和機(jī)制。

概述

下圖說(shuō)明了 Denser Retriever 的結(jié)構(gòu),它由三個(gè)組件組成:

圖片

  • 關(guān)鍵詞搜索依賴于使用精確關(guān)鍵詞匹配的傳統(tǒng)搜索技術(shù)。我們?cè)?Denser Retriever 中使用 Elasticsearch。
  • 向量搜索使用神經(jīng)網(wǎng)絡(luò)模型將查詢和文檔編碼為高維空間中的密集向量表示。我們使用 Milvus 和 snowflake-arctic-embed-m 模型,該模型在 MTEB/BEIR 排行榜的各個(gè)尺寸變體中均實(shí)現(xiàn)了最先進(jìn)的性能。
  • ML 交叉編碼器重排序器可用于進(jìn)一步提升上述兩種檢索方法的準(zhǔn)確性。我們使用 cross-encoder/ms-marco-MiniLM-L-6-v2,該模型在準(zhǔn)確性和推理延遲之間具有良好的平衡。

配置文件

我們?cè)谝韵?yam 文件中配置上述三個(gè)組件。大多數(shù)參數(shù)是不言自明的。關(guān)鍵字、向量、重排序的部分分別配置 Elasticsearch、Milvus 和重排序器。

我們使用 combine: model 通過(guò)一個(gè) xgboost 模型(experiments/models/msmarco_xgb_es+vs+rr_n.json)來(lái)結(jié)合 Elasticsearch、Milvus 和重排序器,該模型是使用 mteb msmarco 數(shù)據(jù)集訓(xùn)練的(參見(jiàn)訓(xùn)練配方了解如何訓(xùn)練這樣的模型)。

除了模型組合,我們還可以使用線性或排名來(lái)結(jié)合 Elasticsearch、Milvus 和重排序器。在 MTEB 數(shù)據(jù)集上的實(shí)驗(yàn)表明,模型組合可以顯著提高準(zhǔn)確性,優(yōu)于線性或排名方法。

一些參數(shù),例如 es_ingest_passage_bs,僅在訓(xùn)練 xgboost 模型時(shí)使用(即查詢階段不需要)。

version: "0.1"

# linear, rank or model
combine: model
keyword_weight: 0.5
vector_weight: 0.5
rerank_weight: 0.5
model: ./experiments/models/msmarco_xgb_es+vs+rr_n.json
model_features: es+vs+rr_n


keyword:
  es_user: elastic
  es_passwd: YOUR_ES_PASSWORD
  es_host: http://localhost:9200
  es_ingest_passage_bs: 5000
  topk: 100


vector:
  milvus_host: localhost
  milvus_port: 19530
  milvus_user: root
  milvus_passwd: Milvus
  emb_model: Snowflake/snowflake-arctic-embed-m
  emb_dims: 768
  one_model: false
  vector_ingest_passage_bs: 2000
  topk: 100


rerank:
  rerank_model: cross-encoder/ms-marco-MiniLM-L-6-v2
  rerank_bs: 100
  topk: 100


output_prefix: ./denser_output_retriever/


max_doc_size: 0
max_query_size: 10000

生成 passages (段落)

我們現(xiàn)在描述如何從給定的文本文件(state_of_the_union.txt)構(gòu)建一個(gè)檢索器。以下代碼顯示如何讀取文本文件,將文件分割成文本塊并將其保存為 jsonl 文件(passages.jsonl)。

from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from denser_retriever.utils import save_HF_docs_as_denser_passages
from denser_retriever.retriever_general import RetrieverGeneral


# Generate text chunks
documents = TextLoader("tests/test_data/state_of_the_union.txt").load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=100)
texts = text_splitter.split_documents(documents)
passage_file = "passages.jsonl"
save_HF_docs_as_denser_passages(texts, passage_file, 0)

passages.jsonl 中的每一行都是一個(gè)段落,包含 source、title、text 和 pid(段落 ID)字段。

{"source": "tests/test_data/state_of_the_union.txt",
"title": "",
"text": "Madam Speaker, Madam Vice President, our First Lady and Second Gentleman...",
"pid": 0}

構(gòu)建 Denser 檢索器

我們可以使用給定的 passages.jsonl 和 experiments/config_local.yaml 配置文件來(lái)構(gòu)建 Denser 檢索器。

# Build denser index
retriever_denser = RetrieverGeneral("state_of_the_union", "experiments/config_local.yaml")
retriever_denser.ingest(passage_file)

查詢 Denser 檢索器  

我們可以簡(jiǎn)單地使用以下代碼來(lái)查詢檢索器以獲得相關(guān)段落。

# Query
query = "What did the president say about Ketanji Brown Jackson"
passages, docs = retriever_denser.retrieve(query, {})
print(passages)

每個(gè)返回的段落都會(huì)接收一個(gè)置信分?jǐn)?shù),以指示它與給定查詢的相關(guān)性。我們得到類(lèi)似以下的結(jié)果。

[{'source': 'tests/test_data/state_of_the_union.txt',
'text': 'One of the most serious constitutional...',
'title': '', 'pid': 73,
'score': -1.6985594034194946}]

將所有內(nèi)容整合在一起

我們將所有代碼整合如下。代碼也可在 repo 中找到。

from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from denser_retriever.utils import save_HF_docs_as_denser_passages
from denser_retriever.retriever_general import RetrieverGeneral


# Generate text chunks
documents = TextLoader("tests/test_data/state_of_the_union.txt").load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=100)
texts = text_splitter.split_documents(documents)
passage_file = "passages.jsonl"
save_HF_docs_as_denser_passages(texts, passage_file, 0)


# Build denser index
retriever_denser = RetrieverGeneral("state_of_the_union", "experiments/config_local.yaml")
retriever_denser.ingest(passage_file)


# Query
query = "What did the president say about Ketanji Brown Jackson"
passages, docs = retriever_denser.retrieve(query, {})
print(passages)

從網(wǎng)頁(yè)構(gòu)建檢索器

與上述方法類(lèi)似,除了段落語(yǔ)料庫(kù)的生成。index_and_query_from_webpage.py 源代碼可以在這里找到。

要運(yùn)行這個(gè)用例,請(qǐng)進(jìn)入 denser-retriever repo 并運(yùn)行:

poetry run python experiments/index_and_query_from_webpage.py

poetry run python experiments/index_and_query_from_webpage.py

如果成功,我們預(yù)計(jì)會(huì)看到類(lèi)似以下的內(nèi)容。

2024-05-27 12:10:47 INFO: ES ingesting passages.jsonl record 66
2024-05-27 12:10:47 INFO: Done building ES index
2024-05-27 12:10:52 INFO: Milvus vector DB ingesting passages.jsonl record 66
2024-05-27 12:10:56 INFO: Done building Vector DB index
[{'source': 'https://lilianweng.github.io/posts/2023-06-23-agent/',
'text': 'Fig. 1. Overview of a LLM-powered autonomous agent system...',
'title': '',
'pid': 2,
'score': -1.6985594034194946}]

進(jìn)一步閱讀

由于篇幅限制,我們?cè)谶@篇博客中未包括以下主題。

  • 使用客戶數(shù)據(jù)集訓(xùn)練 Denser Retriever。用戶提供一個(gè)訓(xùn)練數(shù)據(jù)集來(lái)訓(xùn)練一個(gè) xgboost 模型,該模型決定如何結(jié)合關(guān)鍵字搜索、向量搜索和重排序。訓(xùn)練和測(cè)試的工作流程如下圖所示。

圖片

  • 在 MTEB 數(shù)據(jù)集上評(píng)估 Denser Retriever。通過(guò) xgboost 模型結(jié)合關(guān)鍵字搜索、向量搜索和重排序可以進(jìn)一步提高向量搜索基線。例如,我們最好的 xgboost 模型在所有 MTEB 數(shù)據(jù)集上的 NDCG@10 得分為 56.47,相比向量搜索基線(NDCG@10 得分 54.24)絕對(duì)提高了 2.23,相對(duì)提高了 4.11%。

圖片

  • 端到端搜索和聊天應(yīng)用。我們可以輕松使用 Denser Retriever 構(gòu)建端到端的聊天機(jī)器人。

圖片

  • 過(guò)濾器 (Filters)。上述索引和查詢用例假設(shè)搜索項(xiàng)僅包含非結(jié)構(gòu)化文本。此假設(shè)可能不成立,因?yàn)閿?shù)據(jù)集可能包含數(shù)值、分類(lèi)和日期屬性。過(guò)濾器可用于為這些屬性設(shè)置約束。

Denser Retriever文檔:https://retriever.denser.ai/docs

責(zé)任編輯:張燕妮 來(lái)源: 機(jī)器之心
相關(guān)推薦

2025-06-04 08:21:28

2017-08-21 13:31:44

AI聊天機(jī)器人facebook

2023-05-11 09:57:27

谷歌OpenAI開(kāi)發(fā)聊天機(jī)器人

2019-03-22 09:00:00

AI人工智能聊天機(jī)器人

2024-09-30 13:11:09

2022-07-05 06:42:01

聊天機(jī)器人人工智能

2023-07-27 14:38:58

人工智能機(jī)器人開(kāi)發(fā)

2019-07-03 10:02:47

聊天機(jī)器人平臺(tái)機(jī)器人

2024-09-02 08:17:53

RAG聊天機(jī)器人人工智能

2020-08-14 16:18:30

人工智能

2019-01-25 16:30:34

機(jī)器人機(jī)器學(xué)習(xí)人工智能

2018-05-10 08:42:39

聊天機(jī)器人移動(dòng)應(yīng)用混合云

2023-02-28 07:59:19

OpenAI聊天機(jī)器人

2021-05-24 15:29:24

人工智能機(jī)器人聊天

2023-02-15 14:33:26

2024-09-11 16:36:39

2017-03-28 12:21:21

機(jī)器人定義

2020-02-02 09:19:14

聊天機(jī)器人機(jī)器人智能

2016-02-16 14:46:33

聊天機(jī)器人機(jī)器學(xué)習(xí)自然語(yǔ)言
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)