有過使用LLM搭建RAG或其它類知識系統的朋友一定會對文檔數據的復雜多樣性有著深刻的理解。各行各業的磁盤中都沉睡了數年到數十年的各類文檔信息,包括:Doc、Docx、PPT、PDF、XLS、PNG、JPEG等各類格式。利用LLM激活這些數據價值的首要工作就是能夠正確的抽取這些文件中的信息。目前,市場上已經有了不少開箱即用的Rag類工具,這些工具能夠很好的抽取絕大多數文件中的內容,對于很多用戶來說,已經足夠了。但對于存量數據跨越多年的企業,由于數據的復雜性、抽取需求的多樣性,這類開箱即用工具預置的文件數據處理流程就變的很難滿足需要了。
由于文件處理是一個非常大的話題,我們無法用一篇文章探討完此類需求。因此,本文我們只嘗試簡單探討一下針對復雜PDF處理的場景,特別是在無代碼模式下,如何快速處理PDF,提升數據處理的效率。
復雜PDF處理技術選型
復雜PDF處理是一個業界難題,有很多團隊都在嘗試解決此類問題,并且也都有了一定的成績。各類方案個有所長,如何選定就變得有些困難。最近一篇《Ilya Rice:我是如何贏得企業 RAG 挑戰賽的》的文章大火,里面給出了一個不錯的方案–Docling。
Docling 是一個開源的文檔解析和轉換工具,能高效地將多種格式的文檔(包括 PDF、DOCX、PPTX、圖片和 HTML)解析,導出為 Markdown 或 JSON 格式。能夠對PDF進行OCR、布局分析、表格分析、代碼識別等深度理解。互聯網上有很多相關資料可以參考,本文就不做贅述了。
于是,HuggingFists整合了Docling技術,幫助使用者應對復雜PDF的解析場景。選用Docling還有一個重要的原因,就是其部分轉換功能可以在純CPU的環境中運行完成。
復雜PDF處理流程
如圖所示,在HuggingFists中使用Docling進行復雜PDF處理非常簡單,只要一個包含三個算子的流程就可以批量完成復雜PDF文本的轉換工作了。由于LLM模型對Markdown格式支持的更完善一些,故而Docling算子將Markdown格式作為了缺省的目標格式。雖然LLM對Json格式的支持也非常完善,但由于它無法保留版式信息,無法直觀評價轉換效果,故而這里也沒有作為首選項。
這是一個將PDF文件批量轉換為Markdown文件并存儲到文件系統的流程。文件輸入算子用于批量選中要處理的PDF文件;Docling算子負責將PDF文件轉換為Markdown格式;批量文件輸出算子用于將轉換后的文件存儲到指定的目錄。
經過轉換后的Markdown文件由于采用了純文本描述格式,就非常方便進行后續處理了。如在進行RAG系統開發時,為了最大程度的保持文本含義的內聚性,可以對文件按章節切分;如希望單獨抽取文件中的表格、圖片等信息,也可以在此基礎上進一步抽取。我們將在隨后的文章中介紹如何完成以上類型的工作。
Docling環境的準備
目前最新版的HuggingFists并不支持Docling,如果希望使用該功能,需要去HuggingFists的算子商城(資源庫/算子庫/商城)中安裝該算子,并在HuggingFists環境中按照如下步驟安裝Docling。
-
進入HuggingFists的安裝目錄,sengee.community.linux
-
在命令行中執行
nerdctl exec -it oyez /bin/sh
進入oyez容器。執行su root命令,輸入密碼12345678,切換到root用戶下 -
在oyez系統中運行
pip install docling
安裝docling。如果你的機器能夠翻墻,那么打開翻墻通道,安裝完成。這里強調能夠翻墻是因為docling運行時會根據算子的功能配置去下載對應的模型。而這些模型需要翻墻才能下載。需要注意的是,此時在每次使用Docling算子時,需要對算子中的Python代碼部分進行相應的調整。如下圖:點擊圖中Docling算子右上角的配置彈出按鈕。在彈出框中找到"Python腳本片段屬性"。注釋掉代碼中紅色框標注的2行代碼,點擊確定即可。這兩行代碼是為無法下載Docling模型包而預置的模型路徑。具體安裝方式見步驟4。
-
退出oyez系統。進入sengee.community.linux/moo目錄下。下載“https://pan.baidu.com/s/1uoa3UqBfHBX3sCf10bUtog?pwd=1234”的包到當前目錄,解壓Docling.zip包。該包中包含Docling運行所需的部分模型。對于無法翻墻的用戶,運行時無法下載到對應模型。故而無法正常運行Docling。HuggingFists提供的這個壓縮包中涵蓋了ocr識別,布局識別以及表格識別等多個模型。可以幫助網絡條件不足的朋友使用Docling算子。需要注意的是,當前提供的模型中,未包括代碼識別和公式識別的模型,如需此類功能需下載對應的模型放在指定的路徑下。
結語
Docling內置了很多功能配置項,但是Docling算子只封裝了其中的一部分。如果希望調整和配置更多的配置項,可以試著去修改算子的Python腳本片段。這里的腳本片段為實際運行Docling時所需的腳本片段。好了,現在可以使用HuggingFists去自動化處理復雜PDF文檔了。