理解非結構化文檔:將 Reducto 解析與 Elasticsearch 結合使用

作者:來自 Elastic?Adel Wu

演示如何將 Reducto 的文檔處理與 Elasticsearch 集成以實現語義搜索。

Elasticsearch 與業界領先的生成式 AI 工具和提供商有原生集成。歡迎觀看我們的網絡研討會,了解如何超越 RAG 基礎,或使用 Elastic 向量數據庫構建可投入生產的應用。

為了為你的使用場景構建最佳搜索解決方案,現在就開始免費的云試用,或在本地機器上體驗 Elastic。


解析是大多數 RAG 流水線中的瓶頸。掃描版 PDF 和電子表格通常非常混亂,輸入質量差會導致檢索不完整、幻覺以及結果不穩定。企業知識中近 80%** 被困在這些格式中,而傳統 OCR 會破壞結構和語義。

解決這一挑戰需要先進的解析技術,結合傳統 OCR 和視覺語言模型(vision-language models -? VLMs )來理解文檔布局和內容,并生成結構化、適用于 LLM 的內容塊。本文將探討這種混合方法,并演示如何將 Reducto 的文檔解析 API 與 Elasticsearch 集成以實現語義搜索。

解析為何仍是巨大挑戰

傳統的 OCR 和基礎文本提取方法只能生成文檔的 “扁平” 視圖。這可能適用于復制粘貼,但對于搜索來說是災難性的。

想象一下把一份財務報告或復雜表單扁平化成一串純文本:

  • 表格、標題、腳注和正文之間的關系被抹去

  • 關于布局、重要性和層級的上下文線索丟失

  • 基于向量或關鍵詞的檢索系統失去了有效的信號

Reducto 沒有沿用 “先 OCR 一切 → 再導入 Elastic” 的傳統流程,而是設計了一種新方法:保留現實文檔中的結構、上下文和語義

Reducto 的 “視覺優先” 方法

Reducto 的 parsing?API 不再把文檔僅僅當作文本,而是作為具有上下文意義的視覺對象來處理。

我們的解析流程結合了:

  • 傳統 OCR:字符級別的高精度文本提取

  • 視覺語言模型(Vision-Language Models?- VLMs ):對視覺上下文的深度理解,例如表格、多欄布局、嵌入式表單等

Reducto 的混合方法在基準測試中相比傳統純文本解析器帶來了顯著提升(例如,在 RD-TableBench 這類開源表格解析基準數據集上,一些實現表現提升超過 20 個百分點)。

通過同時分析文檔的內容和視覺結構,Reducto 可生成:

  • 精準的邊界框(頁面上某個元素的坐標,用于引用)

  • 每個區塊的分段布局類型(標題、表格、文本、圖形等)

  • 可自定義的 LLM 就緒內容塊

最終解析結果完整保留了原始文檔的豐富信息,適用于需要拆分與上下文嵌入的檢索流程。

引入 Agentic OCR:多輪自我糾錯

即使是最好的模型,也難免會出現解析錯誤。復雜的掃描件、手寫筆記或多層嵌套表格可能會讓一次性解析器失效。

為了解決這個問題,我們引入了 Agentic OCR ——一個多輪自我糾錯框架。

可以把它看作是一個 “人類參與” 的過程 —— 只是無需人工。該方法大幅提升了真實環境下的穩健性,確保即使是復雜、從未見過的文檔也能被清晰準確地解析。

示例:將 Reducto API 與 Elasticsearch 一起使用

解析不是最終目標,搜索才是。

Reducto 的客戶經常將解析后的輸出直接集成到 Elasticsearch 中,用于內部知識庫、智能文檔檢索或檢索增強生成(retrieval-augmented generation -? RAG )系統。

以下是一個高級概覽:

  • 解析:使用 Reducto 的 API 將文檔解析為結構化的 JSON,可自定義分塊選項。
  • 嵌入 + 索引:我們將在本例中使用 ELSER,這是一種內置于 Elasticsearch 的稀疏檢索模型,可以非常輕松地執行語義搜索,用于生成加權的 tokens。我們會將嵌入向量和分塊元數據存儲到 Elasticsearch 中以實現語義檢索。
  • 檢索:給定一個查詢,從索引中獲取最相關的分塊。

如果你有興趣進一步了解稀疏向量以及為什么它們是語義搜索的優秀選擇,請閱讀這篇博客了解更多信息。

🧾 1. 使用 Reducto(通過 API)進行解析和分塊

要獲取 Reducto 的 API 密鑰,請前往 reducto.ai 并點擊 “Contact us”。我們會安排一次簡短的入職電話,了解你的使用場景,并為你設置一個試用密鑰。

安裝我們的 Python SDK —— 與我們 API 交互的最簡單方式。

pip install reductoai

然后,調用我們的解析函數。這里有一些與分塊相關的配置需要注意:

  • options.chunk_mode:選擇你希望如何配置分塊。例如,按頁、按塊、按變量(字符長度)等。
  • options.chunk_size:你希望分塊的字符長度大約是多少。默認是 250-1500 個字符。

我們建議 RAG 用例保持 Reducto 默認的 “variable” 分塊模式,因為它在捕獲和分組最語義相關的數據方面最靈活。使用默認值時,調用中無需設置特定配置。

更多可配置項請參考 Reducto 的 API 文檔中 Parse 端點的說明。你也可以試用我們的 UI 體驗區,查看 “Configure Options” 下的所有選項。

from reducto import Reducto
from getpass import getpass# Parse documents using Reducto SDK
reducto_client = Reducto(api_key=getpass("REDUCTO_API_KEY"))
upload = reducto_client.upload(file=Path("sample_report.pdf"))
parsed = reducto_client.parse.run(
document_url=upload,
options={ # Optional configs would go here"chunking": {"chunk_mode": "variable","chunk_size": 1000,}}
)# Parsed output
print(f"Chunk count: {str(len(parsed.result.chunks))}")
print(parsed.result.chunks)

使用我們提供的示例股票研究報告(鏈接在這里),解析后的輸出大致如下:

Chunk count: 32
ResultFullResultChunk(blocks=[ResultFullResultChunkBlock(bbox=BoundingBox(height=0.022095959595959596, left=0.08823529411764706, page=1, top=0.04671717171717172, width=0.22549019607843138, original_page=1), content='Goldman Stanley', type='Title', confidence='high', image_url=None), ...])

📐 📦 2. 使用 ELSER 進行嵌入和索引

創建你的 Elastic Cloud Serverless 集群,或選擇你喜歡的部署方式。

安裝 Elasticsearch 的 Python 客戶端。

pip install elasticsearch

初始化客戶端并連接到你的 Elasticsearch 實例。

from elasticsearch import Elasticsearch, exceptions# Create Elasticsearch Client
es_client = Elasticsearch(getpass("ELASTICSEARCH_ENDPOINT"),api_key=getpass("ELASTIC_API_KEY")
)print(es_client.info())

創建用于生成嵌入向量的 ingest pipeline,使用 ELSER,并應用到我們的新索引中。

INDEX_NAME = "reducto_parsed_docs"# Drop index if exists
es_client.indices.delete(index=INDEX_NAME, ignore_unavailable=True)# Create the ingest pipeline with the inference processor
es_client.ingest.put_pipeline(id="ingest_elser",processors=[{"inference": {"model_id": ".elser-2-elasticsearch","input_output": {"input_field": "text","output_field": "text_semantic"}}}]
)print("Finished creating ingest pipeline")# Create mappings with sparse_vector for ELSER
es_client.indices.create(index=INDEX_NAME, body={"settings": {"index": {"default_pipeline": "ingest_elser"}},"mappings": {"properties": {"text": { "type": "text" },"text_semantic": { "type": "sparse_vector" }}}
})print("Finished creating index")

將每個 Reducto 分塊索引到 Elasticsearch 中,Elastic Inference Service 會通過 ingest pipeline 生成嵌入向量。

# Index each chunk
for i, chunk in enumerate(parsed.result.chunks):doc = {"text": chunk.embed}es_client.index(index=INDEX_NAME, id=f"chunk-{i}", document=doc)

🔍 3. 檢索

使用推理服務執行稀疏向量查詢,為查詢生成嵌入向量。該查詢由 ELSER 構建的稀疏向量組成。

# Use semantic text search
response = es_client.search(index=INDEX_NAME,query={"sparse_vector":{"field": "text_semantic","inference_id": ".elser-2-elasticsearch","query": "What was the client revenue last year?"}}
)# Print results
for hit in response["hits"]["hits"]:print(f"Score: {hit['_score']:.4f}")print(f"Text: {hit['_source']['text'][:300]}...\n")print(f"ELSER Embedding: {hit['_source']['text_semantic']}...\n")

當查詢我們示例股票研究報告的分塊時,結果可能如下,包含余弦相似度分數和對應的分塊內容:

Score: 13.0095
Text: # Operations (cont.)Figure 2 - Jazz Historical and Projected Revenue Mix by Product...ELSER Embedding: {'studio': 0.5506277, 'copyright': 0.29489025, 'def': 1.0905615, ... }Score: 12.0828
Text: # Jazz Pharmaceuticals (JAZZ) (cont.)## Strong Q1 FY14 & Multiple Catalysts Ahead (cont.)...ELSER Embedding: {'##arm': 0.12544458, 'def': 1.4090042, '##e': 0.48080343, ... }
.
.
.

Elasticsearch 是領先的向量數據庫,為 AI 應用提供大規模性能。它在處理龐大嵌入數據集方面尤為強大,得益于其分布式架構和將向量相似度與關鍵詞相關性結合的混合搜索質量。Reducto 通過提供結構化、適合 LLM 的分塊,補充了 Elastic 的能力,確保 Elasticsearch 強大的索引和搜索檢索在最高質量的輸入上運行,從而帶來更優的 AI 代理性能和更準確的生成結果。

結論

企業多年來一直基于不完整或扁平化的文檔數據構建搜索系統——現在,新技術正出現以挖掘這些信息的更深層見解。Reducto 的 API 適合各行各業的公司,尤其是那些需要高準確性的領域,如金融、醫療和法律。

Reducto 的以視覺為先、由代理驅動的解析管道提供了前進的方向:

  • 保持上下文、結構和意義
  • 向像 Elasticsearch 這樣的向量存儲和檢索系統輸入更豐富、更準確的數據
  • 實現更可靠、無幻覺的 RAG 和搜索體驗

你可以在 Reducto Playground 體驗 Reducto,或聯系了解完整集成方案。如果你想構建此應用并操作代碼,可以在這個 notebook 中找到說明。

有了 Reducto 和 Elasticsearch 向量數據庫,企業知識變得可搜索且易理解。

來源:Possibilities and limitations, of unstructured data - Research World

原文:Making sense of unstructured documents: Using Reducto parsing with Elasticsearch - Elasticsearch Labs

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/84056.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/84056.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/84056.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

從Copilot到Agent,AI Coding是如何進化的?

編程原本是一項具有一定門檻的技能,但借助 AI Coding 產品,新手也能寫出可運行的代碼,非專業人員如業務分析師、產品經理,也能在 AI 幫助下直接生成簡單應用。 這一演變對軟件產業產生了深遠影響。當 AI 逐步參與代碼生成、調試乃…

UGUI Text/TextMeshPro字體組件

UGUI Text組件的不當使用及其性能瓶頸與優化 在Unity UGUI系統中,Text 組件(或其升級版 TextMeshPro)是顯示文本信息的核心元素。然而,如果不當使用,它極易成為UI性能瓶頸的罪魁禍首,尤其是在預制體、屬性…

淺談 React Hooks

React Hooks 是 React 16.8 引入的一組 API,用于在函數組件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通過簡潔的函數接口,解決了狀態與 UI 的高度解耦,通過函數式編程范式實現更靈活 Rea…

【個人筆記】數據庫原理(西電)

寫在前面:文中提到的頁面指向(如“p45”),除特別說明,都是指對應ppt上的頁面,非同款ppt的友友可忽略 第一章 ER圖和關系分解見課本p69 ER圖是常用的 概念模型 方形:實體圓形:屬性…

SDC命令詳解:使用set_propagated_clock命令進行約束

相關閱讀 SDC命令詳解https://blog.csdn.net/weixin_45791458/category_12931432.html?spm1001.2014.3001.5482 目錄 指定端口列表/集合 簡單使用 注意事項 傳播時鐘是在進行了時鐘樹綜合后,使用set_propagated_clock命令可以將一個理想時鐘轉換為傳播時鐘&#x…

關于華為倉頡編程語言

文章目錄 一、基本概況二、技術特點1. 多范式編程2. 原生智能化3. 高性能與安全4. 全場景兼容 三、編譯器與開發工具四、語言相似性對比五、行業應用實例總結 最近經常看到這個東西,于是搜了一下,整理了一些內容,水一篇,以后慢慢研…

【STM32F1標準庫】理論——定時器中的輸出比較

目錄 一、定時器的輸出比較介紹(Output Compare) 1.整體簡介 2.輸出比較單元具體功能框圖 3.以PWM模式1舉例 二、雜談 1.CCR的全名 2.PWM簡介 3.舵機簡介 4.直流電機及驅動模塊TB6612簡介 一、定時器的輸出比較介紹(Output Compare…

前端開發面試題總結-HTML篇

文章目錄 HTML面試高頻問答一、HTML 的 src 和 href 屬性有什么區別?二、什么是 HTML 語義化?三、HTML的 script 標簽中 defer 和 async 有什么區別?四、HTML5 相比于 HTML有哪些更新?五、HTML行內元素有哪些? 塊級元素有哪些? 空(void)元素有哪些?六、iframe有哪些優點…

Scrapy爬蟲教程(新手)

1. Scrapy的核心組成 引擎(engine):scrapy的核心,所有模塊的銜接,數據流程梳理。 調度器(scheduler):本質可以看成一個集合和隊列,里面存放著一堆即將要發送的請求&#…

Transformer-BiLSTM、Transformer、CNN-BiLSTM、BiLSTM、CNN五模型時序預測

Transformer-BiLSTM、Transformer、CNN-BiLSTM、BiLSTM、CNN五模型時序預測 目錄 Transformer-BiLSTM、Transformer、CNN-BiLSTM、BiLSTM、CNN五模型時序預測預測效果基本介紹程序設計參考資料 預測效果 基本介紹 Transformer-BiLSTM、Transformer、CNN-BiLSTM、BiLSTM、CNN五…

歷史數據分析——唐山港

個股簡介 公司簡介: 唐山港口投資有限公司、北京京泰投資管理中心、河北利豐燕山投資管理中心、國富投資公司、唐山市建設投資公司、河北省建設投資公司、國投交通實業公司7家發起人共同發起設立。 經營分析: 港口經營一般項目:港口貨物裝卸搬運活動;普通貨物倉儲服務(不含…

云端回聲消除:讓超低端硬件能玩實時打斷

傳統認知里“優質交互 高性能硬件”的等式正在被打破? 超低端開發板也能實現高配置硬件才有的實時打斷語音交互? 網易云信推出的云端回聲消除技術不僅解決了硬件配置對交互體驗的限制,更以系統性解決方案重構了嵌入式設備的實時對話體驗。 困…

堆排序的詳細解讀

一.堆的基本概念 1.什么是堆 堆是一種特殊的完全二叉樹,滿足一下性質: 最大堆:每個節點的值都大于或等于其子節點的值(堆頂元素最大)最小堆:每個節點的值都小于或等于其子節點的值(堆頂元素最小…

hmdp知識點

1. 前置知識 1.1 MyBatisPlus的基本使用 1.1.1 引入依賴 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.3</version> </dependency> 1.1.2 建立實體類和數…

分享5個免費5個在線工具網站:Docsmall、UIED Tool在線工具箱、草料二維碼、圖片在線壓縮、表情符號

01. Docsmall 它是一個免費的在線圖片與PDF處理工具&#xff0c;功能主要包含Ai圖片處理工具&#xff0c;圖片壓縮工具&#xff0c;圖片PDF格式轉換工具等&#xff0c;如下圖&#xff0c;我認為比較實用的是自動摳圖、圖片變高清、圖片壓縮和PDF壓縮。 https://docsmall.com/…

打通印染車間“神經末梢”:DeviceNet轉Ethernet/IP連接機器人的高效方案

在印染行業自動化升級中&#xff0c;設備聯網需求迫切。老舊印染設備多采用Devicenet協議&#xff0c;而新型工業機器人普遍支持Ethernet/IP協議&#xff0c;協議不兼容導致數據交互困難&#xff0c;設備協同效率低、生產監控滯后&#xff0c;成了行業數字化轉型的阻礙。本文將…

RSA加密算法:非對稱密碼學的基石

一、RSA算法概述 RSA&#xff08;Rivest-Shamir-Adleman&#xff09;是1977年由Ron Rivest、Adi Shamir和Leonard Adleman提出的非對稱加密算法&#xff0c;它基于大數分解的數學難題&#xff0c;是當今應用最廣泛的公鑰密碼系統。RSA的核心思想是使用一對密鑰&#xff08;公鑰…

杭州瑞盟 MS35774/MS35774A 低噪聲256細分微步進電機驅動,用于空調風門電機驅動,香薰電機驅動

杭州瑞盟 MS35774/MS35774A 低噪聲256細分微步進電機驅動&#xff0c;用于空調風門電機驅動&#xff0c;香薰電機驅動 簡述 MS35774/MS35774A 是一款高精度、低噪聲的兩相步進 電機驅動芯片&#xff0c;芯片內置功率 MOSFET &#xff0c;長時間工作的平均電 流可以達到 1…

駛向智能未來:車載 MCP 服務與邊緣計算驅動的駕駛數據交互新體驗

引言 在人工智能技術與車載算力持續突破的驅動下&#xff0c;現代車輛的數字化進程正加速推進。車聯網系統將突破傳統云端架構的局限&#xff0c;依托邊緣計算與 AI 融合技術&#xff0c;實現人車交互體驗的范式重構?。通過構建基于多源異構數據的自動化分析框架&#xff0c;…

Python數據可視化科技圖表繪制系列教程(三)

目錄 單一柱狀圖 分組柱狀圖 堆積柱狀圖 百分比柱狀圖 均值柱狀圖 不等寬柱狀圖 有序柱狀圖 條形圖 發散條形圖 在條上添加標簽的發散條形圖 基礎棒棒糖圖1 基礎棒棒糖圖2 【聲明】&#xff1a;未經版權人書面許可&#xff0c;任何單位或個人不得以任何形式復制、發…