在這個 LLM 時代 RAG 可說是一個非常熱的議題,其中來源資料的品質幾乎決定了整個 RAG 應用的成敗,而在一系列的資料處理流程中,又以 Chunking 做為一個重要的環節,像是常見的固定長度、重疊等等都是基本的 Chunking 策略。
Semantic Chunking 是一種進階的 Chunking 手法,比起基本的固定長度切分,Semantic Chunking 希望藉由語意分析劃分出更具有意義的 Chunk。本篇將使用在 Document Intelligence 中新推出的 Layout Model 文檔分析 API 來實作 Semantic Chunking。
Markdown 與 Semantic Chunking
Markdown 是一種具有結構的標記語言,對於人類在閱讀上是非常友好的,而對於 LLM 來說當然也是如此,不過在現實上,我們提供給 RAG 的文件往往都不是 Markdown。
現在我們將使用 Layout Model 來解決這個問題,其提供的文檔分析 API 可以在一次呼叫中將傳入的 PDF、PPT 等常見格式文檔轉換成 Markdown 格式,這個轉換過程中包含了 OCR、文件結構分析等步驟,這也就代表轉換出的 Markdown 結構在某種程度上是蘊含文件語意的。
最後我們將使用這個 Markdown 結構做為 Chunking 的依據,以此來實現 Semantic Chunking。
建立 Document Intelligence
建立 AI 類服務時基本上都不用做太複雜的設定,這邊唯一要注意的是我們預計要使用的 Layout Model API 目前只有在美東、美西 2 與西歐三個地區提供,建議時需要留意選擇的地區。
Document Intelligence Studio
與其他 AI 服務一樣,Document Intelligence 也有提供 Studio 讓我們快速體驗功能,從 Studio 首頁進入「Layout」頁面,我們使用內建的範例文件來看看文檔分析 API 的能力。
首先選擇一篇範例文件,再調整「Output format style」為「Markdown 」後點擊上方的「Run analysis」開始分析,我們可以看到文件被精準的轉換成 Markdown 結構。
切換一下右側的頁籤,也能看到文件中的表格與圖片被準確的識別出來。
程式實作
接著我們來看一下如何由 Python 來實作文檔分析 API 與根據 Markdown 結構切分文字,以下使用 azure-ai-documentintelligence==-1.0.0b3 與 langchain==0.2.12 兩個套件。
程式中一樣使用官方的範例文件,這邊快速看一下這個 PDF,詳細文件內容請直接使用連結下載。
程式執行結果如下:
接著使用 Langchain 中內建的 MarkdownHeaderTextSplitter 來切分 Markdown。
程式執行結果如下:
可以看到 PDF 成功被兩個 Markdown 標題「UNITED STATES SECURITIES AND EXCHANGE COMMISSION」與「MICROSOFT CORPORATION」切分開來。
總結
其實類似的 Semantic Chunking 手法已經非常多了,但一般隨之而來的都是複雜的演算法與多餘的運算資源,Azure 上的 Document Intelligence 以單純的 API 做為服務提供方式,短短幾行程式碼與免除基礎建設,快速完成 RAG 中的 Semantic Chunking。
留言
張貼留言