在建構RAG系統時,整合不同型別的資料來源至關重要。本文將探討如何連線PostgreSQL資料函式庫擷取結構化資料,如何使用語音轉文字技術處理音訊檔案,以及如何運用OCR和多模態模型從圖片和PDF檔案中提取文字資訊。這些技術的整合能讓RAG系統更全面地理解和運用不同形式的資訊。透過Python程式碼範例,示範如何使用SQLAlchemy連線PostgreSQL資料函式庫、使用OpenAI Whisper模型進行語音轉錄,以及使用Tesseract OCR引擎和多模態模型處理影像和PDF檔案。這些技術的結合,能讓開發者更有效率地建構功能強大的RAG系統,處理多樣化的資料型別。
連線PostgreSQL資料函式庫並查詢資料
在開發RAG系統時,連線資料函式庫以提取資料是一個常見的需求。以下將介紹如何連線PostgreSQL資料函式庫並查詢資料。
問題描述
您想要連線您的RAG系統到PostgreSQL資料函式庫以提取資料。
解決方案
前置條件
首先,安裝PostgreSQL伺服器和pgAdmin在您的機器上。pgAdmin是一種流行的工具,用於管理PostgreSQL資料函式庫。雖然您可以直接從Python執行所有SQL查詢,但pgAdmin使瀏覽資料和手動執行查詢更加容易。您可以在安裝PostgreSQL時找到pgAdmin的安裝說明。
如果您需要與多種資料函式庫型別合作,請考慮使用DBeaver或DataGrip。這些工具支援多種資料函式庫,如MySQL、PostgreSQL、SQLite、Oracle、DB2和SQL Server。
步驟
- 複製樣本資料函式庫:為了有資料可供使用,複製一個樣本資料函式庫。
- 安裝所需函式庫:接下來,安裝Python函式庫SQLAlchemy和psycopg2-binary以連線資料函式庫。
- 建立使用者並授權:建立一個使用者並授予必要的許可權。將使用者憑證儲存在一個.env檔案中。
- 設定連線並執行查詢:建立使用者後,設定連線。在以下範例中,我們使用這個連線來執行一個SQL查詢,以從「categories」表中檢索所有資料。
範例1-5:從PostgreSQL載入資料
import os
import pandas as pd
from sqlalchemy import create_engine
# 連線字串
connection_string = (
f"postgresql+psycopg2://{username}:{password}@{host}:{port}/{database}"
)
# 建立引擎
engine = create_engine(connection_string)
# SQL查詢
query = """SELECT * FROM categories ORDER BY id"""
# 執行查詢並讀取結果
result = pd.read_sql(query, engine)
圖表翻譯:
內容解密:
- 連線PostgreSQL:首先,您需要連線到PostgreSQL資料函式庫。這涉及到建立一個連線字串,包含使用者名稱、密碼、主機、埠和資料函式庫名稱。
- 建立引擎:使用SQLAlchemy的
create_engine函式建立一個引擎,該引擎將用於執行SQL查詢。 - 執行SQL查詢:定義一個SQL查詢字串,然後使用
pd.read_sql函式執行查詢並讀取結果。 - 讀取結果:結果被儲存在一個Pandas DataFrame中,您可以進一步操作和分析這些資料。
這個過程展示瞭如何使用Python和SQLAlchemy連線PostgreSQL資料函式庫並執行查詢,對於構建RAG系統和其他需要存取關聯式資料函式庫的應用程式來說是非常重要的。
載入音訊檔案至RAG系統
為了將音訊檔案載入我們的RAG系統,我們首先需要將其轉換為文字。這是透過語音轉文字模型實作的。這些先進的模型是在數千小時的音訊資料上進行訓練的,涵蓋多種語言,並在近年來顯著改善。它們可以自動檢測語言,並有效地處理嘈雜的背景噪音。
前置條件
本例中,我們將使用OpenAI的Whisper模型。您可以在本地安裝Whisper或透過OpenAI的API使用它。選擇取決於您的使用案例:
- 對於快速設定和可擴充套件性,使用像AWS、Azure、GCP或其他提供文字轉語音模型的平臺。
- 如果您需要處理敏感資料,您可以在自己的伺服器上託管像Whisper這樣的開源模型。這確保只有您可以存取資料。
步驟
以下示例使用官方的OpenAI Python函式庫。只需提供音訊檔案的file_path和您想要使用的模型(在本例中為whisper-1)。
import os
import openai
# 載入OpenAI API金鑰
openai.api_key = os.getenv("OPENAI_API_KEY")
# 定義音訊檔案路徑
audio_file_path = "../datasets/audio_files/harvard.wav"
# 初始化OpenAI客戶端
client = openai.OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
# 載入音訊檔案並進行轉錄
with open(audio_file_path, "rb") as audio_file:
transcription = client.audio.transcriptions.create(
model="whisper-1",
file=audio_file
)
# 顯示轉錄結果
print(transcription)
內容解密:
上述程式碼片段展示瞭如何使用OpenAI的Whisper模型將音訊檔案轉換為文字。首先,初始化OpenAI客戶端並載入API金鑰。然後,定義音訊檔案的路徑並使用openai.audio.transcriptions.create方法進行轉錄。最終,列印預出轉錄結果。
圖表翻譯:
此圖表描述了載入音訊檔案至RAG系統的步驟,從載入API金鑰開始,到初始化客戶端、載入音訊檔案、進行轉錄,最後顯示轉錄結果。
從圖片和PDF中提取文字
使用OCR技術
問題 您想要從圖片或圖片類別檔案中提取文字,使用開源OCR引擎,可以在自己的基礎設施上執行。
解決方案
本文介紹如何使用光學字元識別(OCR)引擎提取文字。您也可以使用多模態基礎模型來完成此任務(見配方1.7)。每種方法都有其優缺點。多模態模型靈活,可由玄貓輕鬆調整;OCR引擎快速、成本有效,可以在自己的伺服器上執行。圖1-8展示了OCR引擎如何從圖片中提取文字,包括掃描的PDF檔案。對於掃描的PDF檔案,過程涉及載入PDF檔案,將每個頁面儲存為圖片,然後使用OCR引擎從每個圖片中提取文字。最終結果是一個列表,其中包含每個頁面的圖片路徑和後設資料。
圖表翻譯:
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
title RAG系統資料整合與多模態處理技術
package "機器學習流程" {
package "資料處理" {
component [資料收集] as collect
component [資料清洗] as clean
component [特徵工程] as feature
}
package "模型訓練" {
component [模型選擇] as select
component [超參數調優] as tune
component [交叉驗證] as cv
}
package "評估部署" {
component [模型評估] as eval
component [模型部署] as deploy
component [監控維護] as monitor
}
}
collect --> clean : 原始資料
clean --> feature : 乾淨資料
feature --> select : 特徵向量
select --> tune : 基礎模型
tune --> cv : 最佳參數
cv --> eval : 訓練模型
eval --> deploy : 驗證模型
deploy --> monitor : 生產模型
note right of feature
特徵工程包含:
- 特徵選擇
- 特徵轉換
- 降維處理
end note
note right of eval
評估指標:
- 準確率/召回率
- F1 Score
- AUC-ROC
end note
@enduml
前置條件 最受歡迎的OCR引擎是Tesseract。您可以在本地安裝Tesseract,也可以使用Google Cloud Vision、Amazon Textract或Microsoft Azure AI Vision等雲端服務。
步驟 讓我們透過兩個例子來瞭解具體過程。在例子1-7中,您將看到如何從一個示例財務PowerPoint投影片中提取文字,您可以在書籍的儲存函式庫中找到這個檔案。在例子1-8中,您將學習如何從PDF檔案中提取文字。
內容解密:
import os
from pdf2image import convert_from_path
from PIL import Image
import pytesseract
# 載入示例.png檔案
image = Image.open(file_path="../datasets/images/example_finance_reporting_slide.png")
# 使用Tesseract進行OCR
text = pytesseract.image_to_string(image)
例子1-8展示了從PDF檔案中提取文字的過程。程式碼片段載入PDF檔案Most_Used_Feature_Engineering_Techniques.pdf作為圖片,然後使用Tesseract從每個PDF頁面中提取文字。
內容解密:
import os
from pdf2image import convert_from_path
from PIL import Image
import pytesseract
file_path = "../datasets/images/Most_Used_Feature_Engineering_Techniques.png"
# 將PDF轉換為圖片列表
images = convert_from_path(file_path=file_path)
text = []
for i, image in enumerate(images):
# 使用Tesseract進行OCR
text.append(pytesseract.image_to_string(image))
文字影像處理技術:從OCR到多模態模型
隨著人工智慧和機器學習的發展,文字影像處理技術也在不斷演進。傳統的光學字元識別(OCR)技術可以有效地從掃描檔案中提取文字,但對於照片、風景或物體圖片等非文字主導的影像,OCR技術就不太適用了。
從資料函式庫連線到多模態模型,本文涵蓋了RAG系統建置過程中幾個關鍵的資料處理技術。透過PostgreSQL與SQLAlchemy的整合,我們示範瞭如何有效率地從關聯式資料函式庫中提取結構化資訊。此方法的優勢在於能精確查詢特定資料,對於需要高度結構化資訊的RAG系統至關重要。然而,此方法仍受限於資料函式庫本身的結構,對於非結構化資料的處理能力較弱。
接著,我們探討了音訊與影像資料的處理。Whisper模型的應用展現了語音轉文字技術的成熟,能將音訊內容轉化為文字,進而整合至RAG系統。此技術的優勢在於能處理大量的音訊資料,並自動偵測語言及過濾噪音,但仍需考量模型的準確性以及處理不同口音或語速的挑戰。對於影像資料,我們介紹了Tesseract OCR 引擎,以及使用多模態模型的可能性。OCR引擎的優勢在於速度快且成本效益高,適合處理掃描檔案等標準化影像。但面對複雜的影像或非文字主導的影像,其效能則會受到限制。此時,多模態模型的彈性便能展現其優勢,可處理更廣泛的影像型別,並提取更豐富的資訊。
展望未來,多模態模型的發展將持續推動文字影像處理技術的進步。隨著模型的精確度提升以及運算成本下降,預期多模態模型將逐漸取代傳統OCR技術,成為處理影像資料的主流方法。同時,結合不同資料處理技術,例如將資料函式庫查詢結果與影像分析結果整合,將能創造更強大的RAG系統,提供更全面的資訊理解和應用。對於開發者而言,持續關注這些技術的發展,並學習如何整合運用,將是建構高效能RAG系統的關鍵。