Giới thiệu
Khi phát triển các tác nhân AI, một trong những bước quan trọng nhất là chuẩn bị dữ liệu mà bạn cung cấp cho các mô hình ngôn ngữ (LLMs). Nếu dữ liệu của bạn không được cấu trúc tốt và sẵn sàng cho ngữ cảnh, các tác nhân của bạn có thể hoạt động kém và không mang lại kết quả như mong đợi.
Mặc dù có nhiều bộ phân tích dữ liệu nổi tiếng như LlamaParser, Amazon Textract và Azure AI Document Intelligence, bài viết này sẽ tập trung vào việc thiết lập bộ phân tích dữ liệu của riêng bạn bằng cách sử dụng một giải pháp mã nguồn mở gọi là Docling. Docling cho phép bạn chuyển đổi dữ liệu lộn xộn thành định dạng có cấu trúc, sẵn sàng cho quy trình AI.
Nội dung bài viết
- Trích xuất nội dung tài liệu
- Chia tài liệu thành các phần nhỏ
- Tạo nhúng và lưu trữ chúng trong ChromaDB
- Kiểm tra chức năng tìm kiếm cơ bản
Trích xuất nội dung tài liệu
Đầu tiên, chúng ta cần nhập DocumentConverter từ Docling và khởi tạo nó.
python
from docling.document_converter import DocumentConverter
converter = DocumentConverter()
Tiếp theo, chuyển đổi tài liệu PDF (hoặc các định dạng tài liệu khác) thành tài liệu Docling có cấu trúc và xuất nó dưới dạng JSON:
python
result = converter.convert("https://arxiv.org/pdf/240.09869")
document = result.document
json_output = document.export_to_dict()
Docling hỗ trợ nhiều định dạng, bao gồm PDF, DOCX, HTML, Markdown và cả PowerPoint. Bạn cũng có thể sử dụng URL để trích xuất nội dung HTML trực tiếp.
Chia tài liệu thành các phần nhỏ
Thay vì lưu trữ toàn bộ tài liệu cùng một lúc, chúng ta chia nó thành các phần nhỏ có ý nghĩa gọi là chunks. Điều này cải thiện độ liên quan khi truy xuất và giảm lượng dữ liệu gửi đến mô hình ngôn ngữ cùng một lúc.
Docling cung cấp các phương pháp chia mạnh mẽ, hiểu cấu trúc tài liệu chứ không chỉ đơn giản là chia văn bản:
- Phân chia theo cấp bậc - Nhận biết các điểm ngắt tự nhiên trong tài liệu như các phần và đoạn.
- Phân chia hỗn hợp - Xây dựng trên phân chia cấp bậc và chia nhỏ những phần quá lớn cho giới hạn token của mô hình nhúng.
Dưới đây là một ví dụ sử dụng HybridChunker của Docling với một bộ phân tách mã nguồn mở:
python
from tokenizer import Tokenizer
tokenizer = Tokenizer()
MAX_TOKENS = 8191
chunker = HybridChunker(
tokenizer=tokenizer,
max_tokens=MAX_TOKENS
)
chunk_iter = chunker.chunk(dl_doc=result.document)
chunks = list(chunk_iter)
Nhúng các phần dữ liệu
Bây giờ chúng ta có dữ liệu sẵn sàng, chúng ta có thể tiếp tục lưu trữ chúng trong cơ sở dữ liệu vector. Đầu tiên, chúng ta sẽ khởi tạo client ChromaDB, tạo bộ sưu tập với hàm nhúng của chúng ta sử dụng OpenAI như sau:
python
import chromadb
from chromadb.config import Settings
from chromadb.utils import embedding_functions
# Khởi tạo client Chroma bền vững cho lưu trữ cục bộ
client = chromadb.Client(Settings(
persist_directory="chroma_persistent_storage"
))
# Thiết lập hàm nhúng OpenAI
openai_ef = embedding_functions.OpenAIEmbeddingFunction(
api_key="<OPENAI_API_KEY>",
model_name="text-embedding-3-small"
)
# Tạo một bộ sưu tập với hàm nhúng
collection = client.create_collection(
name='document_collection',
embedding_function=openai_ef
)
# Thêm các phần vào bộ sưu tập
for idx, chunk in enumerate(chunks):
collection.add(
documents=[chunk.page_content],
metadatas=[{"chunk_index": idx}],
ids=[f"chunk_{idx}"]
)
# Lưu thay đổi vào đĩa
client.persist()
Kiểm tra chức năng tìm kiếm cơ bản
Kiểm tra xem thiết lập của bạn có hoạt động không bằng cách truy vấn cơ sở dữ liệu vector với các câu hỏi mẫu và truy xuất các phần liên quan:
python
query = "Đóng góp chính của bài báo là gì?"
results = collection.query(query_texts=[query], n_results=3)
for doc in results['documents'][0]:
print(doc)
Tóm tắt
Với Docling, bạn có thể dễ dàng:
- Trích xuất tài liệu từ nhiều định dạng khác nhau thành định dạng sạch sẽ, có cấu trúc.
- Chia tài liệu một cách thông minh, bảo tồn cấu trúc hợp lý của chúng.
- Tạo nhúng bằng cách sử dụng mô hình ưa thích của bạn (như OpenAI).
- Lưu trữ và truy xuất nhúng một cách hiệu quả trong cơ sở dữ liệu vector cục bộ như Chroma.
Thực hành tốt nhất
- Đảm bảo dữ liệu đầu vào sạch sẽ: Trước khi sử dụng Docling, hãy chắc chắn rằng tài liệu của bạn không có lỗi chính tả hay định dạng không nhất quán.
- Kiểm tra các định dạng tài liệu: Đảm bảo rằng bạn thử nghiệm với nhiều định dạng tài liệu để tận dụng tối đa khả năng của Docling.
Cạm bẫy thường gặp
- Không tối ưu hóa token: Khi chia thành các phần, hãy chắc chắn rằng không có phần nào vượt quá giới hạn token của mô hình nhúng.
- Lưu trữ không đúng cách: Đảm bảo bạn đã sử dụng đúng các hàm lưu trữ để tránh mất dữ liệu.
Mẹo hiệu suất
- Sử dụng batch processing: Nếu bạn có nhiều tài liệu, hãy xem xét việc xử lý theo lô để tăng tốc độ chuyển đổi.
- Tối ưu hóa cấu trúc tài liệu: Sắp xếp tài liệu theo cấu trúc rõ ràng để việc chia và nhúng diễn ra hiệu quả hơn.
Giải quyết sự cố
- Kiểm tra lỗi API: Nếu bạn gặp lỗi khi gọi API của OpenAI, hãy kiểm tra lại khóa API và xem xét các giới hạn của nó.
- Kiểm tra dữ liệu đầu ra: Nếu dữ liệu không như mong đợi, hãy xem lại từng bước trong quy trình để xác định nguyên nhân.
Câu hỏi thường gặp
Docling có hỗ trợ các định dạng nào?
Docling hỗ trợ nhiều định dạng như PDF, DOCX, HTML, Markdown và PowerPoint.
Tôi có thể sử dụng Docling với dữ liệu không cấu trúc không?
Có, Docling giúp chuyển đổi dữ liệu không cấu trúc thành định dạng có cấu trúc dễ sử dụng cho các mô hình AI.
Làm thế nào để tối ưu hóa việc lưu trữ nhúng?
Hãy đảm bảo rằng bạn sử dụng đúng các hàm và cấu trúc lưu trữ để tránh mất mát dữ liệu và tăng hiệu suất truy xuất.
Kết luận
Docling là một công cụ mạnh mẽ giúp bạn xây dựng bộ phân tích dữ liệu của riêng mình, từ việc trích xuất tài liệu cho đến lưu trữ nhúng. Hãy bắt đầu khám phá Docling ngay hôm nay và tối ưu hóa quy trình làm việc của bạn với AI!