Chiến Lược Cắt Đoạn Văn Bản (Recursive Character Chunking) Cho RAG
Ưu tiên ngắt tại các ranh giới tự nhiên lớn nhất trước: ["\n\n", "\n", " ", ""]. Nếu đoạn văn bản sau khi tách vẫn lớn hơn chunk_size, chuyển sang dấu phân cách nhỏ hơn tiếp theo.
Tiến độ của tôi ở bài này
Điểm được lưu vào tài khoản sau khi chấm bài.
Đang tải điểm của bạn…
Kiến thức và chủ đề
Kiến thức tiên quyết: pandas-data-cleaning-pipeline.
Nội dung đề bài
Mục tiêu kiến thức
- Hiểu tầm quan trọng của Chunking trong Retrieval-Augmented Generation (RAG):
- Cắt đoạn quá lớn: Chứa nhiều thông tin nhiễu làm vector embedding bị loãng.
- Cắt đoạn quá nhỏ: Làm mất ngữ cảnh toàn vẹn của câu.
- Độ chồng lấn (
chunk_overlap): Đảm bảo các ý tưởng nằm ở ranh giới giữa 2 chunk không bị cắt đứt gãy. - Chiến lược đệ quy (Recursive Splitting):
Ưu tiên ngắt tại các ranh giới tự nhiên lớn nhất trước: ["\n\n", "\n", " ", ""]. Nếu đoạn văn bản sau khi tách vẫn lớn hơn chunk_size, chuyển sang dấu phân cách nhỏ hơn tiếp theo.
Yêu cầu
Viết hàm recursive_character_split(text: str, chunk_size: int = 100, chunk_overlap: int = 20, separators: list[str] | None = None) -> list[str]:
- Kiểm tra điều kiện: 0 ≤ chunk_overlap < chunk_size. Nếu không thỏa, ném
ValueError. - Mặc định
separators = ["\n\n", "\n", " ", ""]. - Cắt văn bản sao cho:
- Độ dài mỗi chunk ≤ chunk_size (trừ trường hợp một từ đơn lẻ vượt quá
chunk_size). - Các chunk liên tiếp chồng lấn lên nhau tối đa
chunk_overlapký tự. - Loại bỏ các chunk rỗng hoặc chỉ chứa khoảng trắng.
- Trả về danh sách các chunk văn bản:
list[str].
Input
- Hàm
recursive_character_split(text,chunk_size,chunk_overlap,separators): Các tham số đầu vào chứa dữ liệu Tensor/mảng NumPy hoặc giá trị siêu tham số tương ứng.
Output
- Hàm
recursive_character_split: Trả về kết quả kiểulist[str]theo đúng đặc tả kỹ thuật và kích thước quy định.
Ràng buộc
- Thời gian chạy tối đa: 2000ms.
- Giới hạn bộ nhớ: 256MB.
- Dữ liệu đầu vào hợp lệ theo đúng kiểu dữ liệu và miền giá trị được mô tả.
Ví dụ 1
Input
long_text = 'A' * 250
chunks = recursive_character_split(long_text, chunk_size=100, chunk_overlap=20)Output
['AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA']Giải thích
Hàm/lớp được gọi với các tham số mẫu trên và trả về kết quả số học / kích thước tensor tương ứng theo đúng thiết kế.
Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.
Góp ý & báo lỗi bài tập
Đề bài chưa rõ, test có vấn đề hay bạn có ý tưởng giúp bài tốt hơn? Gửi cho đội ngũ AI Empire nhé — mỗi góp ý đều được đọc.
