Knowledge Bases

تسلط بر ورود اسناد چندفرمتی برای پایپ‌لاین‌های RAG مقاوم

تولید تقویت‌شده با بازیابی (RAG) به عنوان معماری استاندارد برای اتصال مدل‌های زبانی بزرگ (LLMs) به داده‌های خصوصی سازمانی ظهور کرده است. با این حال، کارایی یک سیستم RAG به طور اساسی توسط کیفیت و ساختار داده‌های ورودی به انبار برداری محدود می‌شود. در حالی که پردازش اسناد متن ساده straightforward است، داده‌های دنیای واقعی آشفته، تکه‌تکه و در قالب‌های غیراستاندارد متعددی وجود دارند. برای مهندسان داده و توسعه‌دهندگان یادگیری ماشین، چالش دیگر تنها ساخت یک پایپ‌لاین نیست، بلکه ساخت یک پایپ‌لاین مقاوم است که بتواند اسناد Word، صفحات گسترده Excel و فایل‌های تصویری را به یک استراتژی تکه‌تکه کردن یکپارچه نرمال‌سازی کند.

این پست به بررسی ظرافت‌های فنی ورود این سه نوع فایل حیاتی می‌پردازد و اطمینان حاصل می‌کند که سیستم RAG شما زمینه‌ای را بازیابی می‌کند که هم از نظر معنایی مرتبط و هم از نظر ساختاری سالم باشد.

نرمال‌سازی اسناد مایکروسافت ورد (.docx)

اسناد ورد چالشی منحصر به فرد ارائه می‌دهند: آن‌ها فقط ظرفی برای متن نیستند، بلکه برای قالب‌بندی پیچیده نیز هستند. خواندن ساده جریان باینری منجر به از دست دادن سلسله مراتب معنایی شده و باعث می‌شود LLM در تمایز بین عناوین، نقاط گلوله و متن بدنه مشکل داشته باشد. راه حل در استفاده از کتابخانه‌هایی است که ساختار سند را حفظ می‌کنند، مانند python-docx یا Unstructured.

هنگام تکه‌تکه کردن متن از یک سند ورد، حفظ رابطه بین سربرگ‌ها و محتوا حیاتی است. اگر سربرگ‌ها را حذف کنید، تکه‌های حاصل زمینه خود را از دست می‌دهند. در زیر نمونه‌ای با استفاده از langchain با یک شکست‌دهنده متن کاراکتری بازگشتی آورده شده است که برای احترام به مرزهای معنایی مانند پاراگراف‌ها و صفحات طراحی شده است.

from langchain.document_loaders import Docx2txtLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter

# بارگذاری سند
loader = Docx2txtLoader("project_proposal.docx")
documents = loader.load()

# تقسیم با آگاهی از ساختار سند
text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=1000,
    chunk_overlap=200,
    length_function=len,
)
chunks = text_splitter.split_documents(documents)

print(f"Created {len(chunks)} chunks while preserving structure.")

رمزگشایی داده‌های جدولی در اکسل

صفحات گسترده اکسل اغلب غنی‌ترین منبع داده‌های ساختاریافته هستند، اما مصرف مستقیم آن‌ها توسط LLMها به طور مشهور دشوار است. یک رویکرد ساده تبدیل سطرها به رشته‌ها اغلب منجر به توهم یا از دست دادن هم‌ترازی ستون‌ها می‌شود. بهترین روش تبدیل هر برگه به یک جدول مارک‌داون تمیز یا سری‌ای از دیکشنری‌های مبتنی بر سطر است.

استفاده از کتابخانه pandas اجازه می‌دهد تا دستکاری داده‌ها قبل از ورود قوی باشد. با این حال، برای سناریوهای پیچیده RAG، تبدیل صفحه گسترده به یک فرمت نیمه‌ساختاریافته (مانند JSON یا مارک‌داون) اغلب نتایج بازیابی بهتری نسبت به تبدیل CSV خام ارائه می‌دهد.

import pandas as pd
import json

# بارگذاری فایل اکسل
df = pd.read_excel("financial_data.xlsx", sheet_name=None)

processed_docs = []
for sheet_name, sheet_data in df.items():
    # تبدیل سطوح خاص به رشته‌های غنی از زمینه
    for _, row in sheet_data.iterrows():
        context = " | ".join([f"{col}: {val}" for col, val in row.items()])
        processed_docs.append(f"Sheet: {sheet_name} | Data: {context}")

print(f"Processed {len(processed_docs)} records into context strings.")

مدیریت تصاویر: پایپ‌لاین OCR

تصاویر، چه اسناد PDF اسکن شده، عکس‌ها یا عکس‌های صفحه باشند، برای قابل استفاده بودن توسط LLMها به تشخیص نوری کاراکتر (OCR) نیاز دارند. این بخش پرهزینه‌ترین قسمت پایپ‌لاین ورود است. کتابخانه‌هایی مانند pytesseract (که Tesseract OCR را در بر می‌گیرد) یا APIهای مبتنی بر ابر (AWS Textract، Azure Form Recognizer) گزینه‌های استاندارد هستند.

حیاتی است که قبل از OCR، تصاویر را برای کاهش نویز پیش‌پردازش کنید تا دقت بهبود یابد. علاوه بر این، برای نمودارها یا چارت‌ها، ممکن است به یک مدل زبان-بینایی (VLM) برای توصیف محتوای بصری نیاز داشته باشید، نه فقط استخراج متن. برای ورود استاندارد سند، یک پایپ‌لاین OCR مقاوم به این شکل است:

from unstructured.partition.image import partition_image

# از Tesseract یا موتورهای زیرین دیگر استفاده می‌کند
elements = partition_image("scan_001.png")

for element in elements:
    # فیلتر کردن نویز و نگهداری فقط عناصر متنی
    if hasattr(element, 'text') and element.text.strip():
        print(element.text)

نتیجه‌گیری

ساخت یک پایپ‌لاین RAG در سطح تولید نیازمند چیزی فراتر از اتصال رشته‌ها است. این امر رویکردی ظریف به تجزیه اسناد را طلب می‌کند که ساختار زیرین اسناد ورد، یکپارچگی رابطه‌ای صفحات اکسل و ماهیت غیرساختاریافته تصاویر را محترم می‌شمارد. با اتخاذ کتابخانه‌های مقاوم و استراتژی‌های تکه‌تکه کردن آگاهانه، توسعه‌دهندگان می‌توانند اطمینان حاصل کنند که برنامه‌های هوش مصنوعی آن‌ها پاسخ‌های دقیق و آگاه از زمینه را از حتی پیچیده‌ترین مخازن داده سازمانی ارائه می‌دهند.

Share: