Text Splitter คือเทคนิคในการ “หั่น” ข้อความขนาดใหญ่จากเอกสาร เช่น .txt, .pdf, หรือเอกสารรายงานต่าง ๆ ให้กลายเป็น ชิ้นส่วนย่อย ๆ (Chunks) ที่มีขนาดเล็กลง
📌 ทำไมต้องแบ่ง?
- AI ไม่สามารถอ่านเอกสารยาวๆ ได้ในครั้งเดียว
เช่น ถ้าเรามีรายงาน 50 หน้า โมเดล LLM (เช่น GPT) ไม่สามารถอ่านได้ครบ จึงต้องหั่นเป็นส่วนๆ ก่อน - เพื่อให้เข้าใจบริบทได้ดีขึ้น
การมี Chunk ที่มีขนาดเหมาะสมช่วยให้ AI เข้าใจคำถามกับเนื้อหาที่เกี่ยวข้องในระดับดีขึ้น - เตรียมสำหรับการแปลงเป็นเวกเตอร์ (Vectorization)
ซึ่งจะใช้ในกระบวนการ RAG (Retrieval-Augmented Generation) ต่อไป
🛠️ องค์ประกอบสำคัญของ Text Splitter
เมื่อแบ่งข้อความ เราจะต้องกำหนด 2 ค่า:
| พารามิเตอร์ | ความหมาย | ตัวอย่าง |
|---|---|---|
chunk_size | ขนาดของแต่ละชิ้น (จำนวนตัวอักษร) | เช่น 100 ตัวอักษรต่อ 1 chunk |
chunk_overlap | จำนวนตัวอักษรที่ซ้ำกันระหว่างชิ้นก่อนหน้าและชิ้นถัดไป | เช่น 50 ตัวอักษร |
📍 การซ้อนทับ (Overlap) จะช่วย “รักษาบริบท” เช่น หากบรรทัดหนึ่งขาดไปบางคำ การมีบางคำซ้ำมาจาก chunk ก่อนหน้า จะช่วยให้โมเดลเข้าใจต่อเนื่องได้ดีขึ้น
⚙️ ขั้นตอนการใช้งาน Text Splitter ใน Python + LangChain
1. Import Library ที่ใช้
from langchain.text_splitter import RecursiveCharacterTextSplitter
2. สร้าง Text Splitter
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=100, # ขนาดชิ้นละ 100 ตัวอักษร
chunk_overlap=0 # ไม่มีการซ้อนทับ
)
✅ ถ้าอยากให้ “มีการซ้อนทับ” ก็เปลี่ยน
chunk_overlap=50(หรือค่าที่ต้องการ)
3. ใช้ Text Splitter กับข้อมูลเอกสารที่โหลดไว้แล้ว
สมมุติว่าเรามีเอกสารชื่อ data.txt ซึ่งถูกโหลดไว้ในตัวแปร documents แล้ว:
chunks = text_splitter.split_documents(documents)
หลังจากรันคำสั่งนี้ เราจะได้ chunks เป็น list ของข้อความย่อยๆ ที่ถูกแบ่งจากเอกสารต้นฉบับ
4. ดูผลลัพธ์ที่ได้
for i, chunk in enumerate(chunks):
print(f"Chunk {i+1}:")
print(chunk.page_content)
print("---------------------")
ผลลัพธ์ที่ได้:
Chunk 1:
ชื่อบริษัท: ABC
ประเภทธุรกิจ: ของเล่นและหนังสือการ์ตูน
ผู้ก่อตั้ง: หมี
---------------------
Chunk 2:
ผู้ก่อตั้ง: หมี
ปีที่ก่อตั้ง: 2566
---------------------
Chunk 3:
บริการ: จำหน่ายของเล่น, หนังสือการ์ตูน
---------------------
...
🟡 ถ้าเราตั้ง
chunk_overlap=50จะเห็นว่าเนื้อหาบางส่วน “ซ้ำ” ใน chunk ถัดไป — เพื่อให้ AI เข้าใจบริบทได้ดีขึ้น
🧠 เคล็ดลับสำหรับคนเริ่มต้น
- ถ้าไฟล์คุณมีข้อมูลแค่ 1-2 หน้า อาจยังไม่จำเป็นต้องแบ่ง
- ถ้าเอกสารยาวเกิน 500 ตัวอักษรขึ้นไป แนะนำให้ใช้ Text Splitter
chunk_sizeที่ดีมักอยู่ระหว่าง 300-1000 ตัวอักษร ขึ้นกับความซับซ้อนของเนื้อหา- ควรทดลองปรับ
chunk_overlapเอง (เช่น 0, 20, 50) แล้วดูผลลัพธ์
🧭 สรุปขั้นตอน Workflow โดยย่อ
| ขั้นตอน | คำอธิบาย |
|---|---|
| 1. โหลดไฟล์ | ใช้ TextLoader โหลดไฟล์ data.txt |
| 2. สร้าง Text Splitter | ตั้งค่า chunk_size และ chunk_overlap |
| 3. แบ่งเอกสาร | ใช้ split_documents() กับเอกสารที่โหลดมา |
| 4. ตรวจสอบผลลัพธ์ | ปริ้นออกมาดูว่าแบ่งได้กี่ chunk แต่ละ chunk มีข้อมูลอะไรบ้าง |
| 5. เตรียมไปใช้ในขั้นตอนต่อไป | เช่น แปลงเป็นเวกเตอร์ → เก็บในฐานข้อมูล → ใช้กับ AI |
