graph TD
%% Style Definitions
classDef raw fill:#f1f2f6,stroke:#2f3542,stroke-width:2px;
classDef process fill:#d1d8e0,stroke:#2d98da,stroke-width:2px;
classDef output fill:#a55eea,stroke:#8854d0,stroke-width:2px,color:white;
Raw[1. Raw Text<br/>ข้อความดิบจาก Social Media]:::raw --> Cleaning[2. Data Cleaning<br/>ลบ Tag, URL, Emoji]:::process
Cleaning --> Tokenization[3. Tokenization<br/>การตัดคำ/แยกส่วนประกอบ]:::process
Tokenization --> Stopwords[4. Stop-words Removal<br/>ลบคำฟุ่มเฟือย เช่น ที่, ซึ่ง, อัน]:::process
Stopwords --> Norm[5. Normalization<br/>ปรับรูปแบบคำให้มาตรฐาน]:::process
Norm --> Vector[6. Vectorization<br/>แปลงเป็นตัวเลข/ตาราง]:::output
13 การทำเหมืองข้อความ
ตลอดบทเรียนที่ผ่านมา นักศึกษาได้ฝึกจัดการกับข้อมูลที่เป็น “ตัวเลข” และ “ตาราง” ซึ่งเปรียบเสมือนพยานหลักฐานที่จัดเก็บอย่างเป็นระเบียบในแฟ้มข้อมูล (Structured Data) แต่ในโลกความเป็นจริงของธุรกิจ ข้อมูลพยานหลักฐานกว่า 80% กลับซ่อนอยู่ในรูปของ “ข้อความ” (Textual Data) ไม่ว่าจะเป็น รีวิวจากลูกค้าใน Facebook, อีเมลร้องเรียน, บทสัมภาษณ์ หรือแม้แต่แชทใน LINE
หลายคนอาจสงสัยว่า ทำไมเราถึงต้องเรียนเรื่องการทำเหมืองข้อความเป็นบทสรุป? คำตอบคือ “เพราะมันคือข้อมูลที่จัดการยากที่สุด” ด้วยเหตุผลหลัก 3 ประการ:
ไร้โครงสร้าง (Unstructured): ข้อความไม่มีรูปแบบแถวและคอลัมน์ที่แน่นอนเหมือนข้อมูลยอดขาย เครื่องจักรจึงไม่สามารถอ่านและเข้าใจได้ทันที
ความกำกวม (Ambiguity): คำหนึ่งคำอาจมีความหมายได้หลายอย่างตามบริบท (Context) เช่นคำว่า “ใจ” ในภาษาไทยที่มีคำประสมนับร้อยความหมาย
ความท้าทายของภาษาไทย: ภาษาไทยเราไม่มีการเว้นวรรคระหว่างคำ (Word Boundary) ทำให้แค่ขั้นตอนแรกอย่างการ “ตัดคำ” ก็กลายเป็นโจทย์ที่ต้องใช้เทคนิคเฉพาะทางสูงกว่าภาษาอังกฤษมาก
13.1 จาก “ตัวอักษร” สู่ “ตัวเลข”
เป้าหมายของบทนี้ไม่ใช่การให้นักศึกษานั่งอ่านข้อความทีละบรรทัด แต่คือการเรียนรู้วิธี “เปลี่ยนข้อความให้กลายเป็นตัวเลข” (Text Transformation) เพื่อให้เราสามารถนำเทคนิคทางวิทยาศาสตร์ข้อมูล ที่เราเรียนมาทั้งหมด (เช่น การแบ่งกลุ่ม (Clustering) ในบทที่ผ่าน) มาประยุกต์ใช้กับข้อความได้
13.2 ข้อมูลเชิงโครงสร้าง vs ข้อมูลไร้โครงสร้าง
ก่อนที่เราจะเริ่มขุดเหมือง (Mining) เราต้องเข้าใจก่อนว่า “แร่” ที่เรากำลังจะจัดการนั้นมีลักษณะอย่างไรเมื่อเทียบกับสิ่งที่เราคุ้นเคย ตาม Table 13.1
| คุณลักษณะ | ข้อมูลเชิงโครงสร้าง | ข้อมูลไม่มีโครงสร้างแบบข้อความ |
|---|---|---|
| รูปแบบ | แถวและคอลัมน์ (Excel, SQL) | ข้อความอิสระ (Reviews, Social Media) |
| ความชัดเจน | มีประเภทข้อมูลชัดเจน (ตัวเลข, วันที่) | มีความกำกวมตามบริบทและอารมณ์ |
| การจัดเก็บ | ใช้พื้นที่น้อย จัดระเบียบง่าย | ใช้พื้นที่มาก และกระจัดกระจาย |
| การวิเคราะห์ | ใช้สถิติและคณิตศาสตร์ได้ทันที | ต้องผ่านกระบวนการแปลง (Transformation) ก่อน |
| สัดส่วนในธุรกิจ | ประมาณ 20% | ประมาณ 80% และเพิ่มขึ้นเรื่อยๆ [1] |
13.3 ความท้าทายของการจัดการข้อความ
การทำเหมืองข้อความนั้น “ยาก” ในขั้นตอนการเตรียมข้อมูล (Data Preparation) มากกว่าเนื้อหาบทอื่น ๆ เพราะ
Noise (สัญญาณรบกวน): ในข้อความจะมีคำจำพวก “คือ”, “แบบว่า”, “คะ/” หรือคำทับศัพท์และคำแสลง ซึ่งเครื่องจักรไม่รู้ว่าเป็นคำที่ไม่มีมูลค่าในการวิเคราะห์
Sparsity (ความเบาบาง): เมื่อเราแปลงข้อความเป็นตาราง เราจะมีจำนวน “คอลัมน์” (คำศัพท์) มหาศาล แต่ในหนึ่งแถว (หนึ่งประโยค) จะมีค่าเป็น 0 อยู่เกือบทั้งหมด ทำให้การคำนวณซับซ้อนขึ้น [2]
ภาษาไทย (The Ultimate Boss): เช่นข้อความไม่มีเว้นวรรค หรือการตัดคำ (Tokenization) ผิดที่ ส่งผลให้ความหมายเปลี่ยนทันที เช่น “ตากลม” (ตา-กลม vs ตาก-ลม)
- การสะกดผิด: ภาษาวิบัติหรือการพิมพ์ผิดในโซเชียลมีเดีย ทำให้เครื่องจักรนับคำผิดพลาด
ข้อมูลเชิงโครงสร้างเหมือนกับ ‘สารอาหารที่ผ่านการปรุงมาแล้ว’ เราแค่หยิบมาวิเคราะห์ แต่ข้อมูลข้อความคือ ‘วัตถุดิบดิบ’ ที่ปนมากับกรวดและทราย หน้าที่ของนักสืบข้อมูลในบทนี้คือการรู้วิธี Pre-processing หรือการ ‘ล้างทราย’ ออกไปให้เหลือแต่เนื้อความจริงๆ ก่อนจะส่งให้ปัญญหาประดิษฐ์วิเคราะห์
13.4 กระบวนการเตรียมข้อมูลข้อความ
ก่อนที่ข้อความจะกลายเป็นตัวเลขเพื่อนำไปวิเคราะห์ นักสืบข้อมูลต้องพาสิ่งเหล่านั้นผ่าน “โรงกรอง” เพื่อขจัดสิ่งเจือปนออกดังนี้ [3]
จาก Figure 13.1 รายละเอียด 5 ขั้นตอนสู่ “ข้อความคุณภาพ”
1. Data Cleaning (การทำความสะอาด) คือการกำจัดสิ่งที่ไม่ใช่ข้อความที่ต้องการวิเคราะห์ออกไป เช่น:
HTML Tags (กรณีดูดข้อมูลมาจากเว็บ)
URL หรือ Link ต่างๆ
สัญลักษณ์พิเศษและ Emoji (ในกรณีที่ต้องการเน้นแค่เนื้อหา)
2. Tokenization (การตัดคำ) จุดที่ยากที่สุดสำหรับภาษาไทย คือการแยกประโยคยาวๆ ออกเป็นหน่วยย่อย (Tokens) เช่น “ตากลม” \(\rightarrow\) [ตา, กลม] หรือ [ตาก, ลม]
- ใน Python เรามักจะใช้ Library อย่าง PyThaiNLP เพื่อช่วยในการตัดคำ
3. Stop-words Removal (การลบคำฟุ่มเฟือย) คือการลบคำที่พบบ่อยมากแต่ไม่มีความหมายในการจำแนกเนื้อหา เช่น “และ”, “ที่”, “ซึ่ง”, “อัน”, ““,”ค่ะ”
- ถ้าเราไม่ลบคำเหล่านี้ออก กราฟสรุปผลของเราจะเต็มไปด้วยคำว่า “ที่” ซึ่งไม่ได้บอกอะไรเราเลย
4. Normalization (การปรับให้เป็นมาตรฐาน) คือการทำให้คำที่มีความหมายเดียวกันอยู่ในรูปแบบเดียวกัน เช่น
“กทม”, “กรุงเทพฯ”, “กทม.” \(\rightarrow\) เปลี่ยนเป็น “กรุงเทพ” ทั้งหมด
ภาษาอังกฤษ: “Running”, “Ran”, “Runs” \(\rightarrow\) “Run” (Stemming / Lemmatization)
5. Vectorization (การแปลงเป็นตัวเลข) คือขั้นตอนสุดท้ายที่จะเปลี่ยนจาก “ลิสต์ของคำ” ให้กลายเป็นตารางตัวเลข (เช่น TF-IDF หรือ Bag of Words) เพื่อให้ปัญญาประดิษฐ์สามารถนำไปคำนวณทางสถิติต่อไปได้ [4]
13.5 จากคำพูดสู่ตัวเลข: เทคนิค TF-IDF (Term Frequency-Inverse Document Frequency)
เมื่อเรารับข้อความเข้ามา สิ่งที่ปัญญาประดิษฐ์ต้องการไม่ใช่ตัวอักษร แต่คือ “ค่าน้ำหนัก” เพื่อบอกว่าคำไหนคือ “พระเอก” ของข้อความนี้
13.5.1 ตัวอย่างการตัดคำและทำ TF-IDF ด้วย Python
ใน Quarto อาจารย์สามารถแสดงตัวอย่าง Code สั้นๆ ที่ใช้ Library ยอดนิยมของไทยอย่าง pythainlp และ scikit-learn ได้ดังนี้ [6]
from pythainlp import word_tokenize
from sklearn.feature_extraction.text import TfidfVectorizer
# 1. พยานหลักฐาน (ข้อความดิบ)
documents = [
"มหาวิทยาลัยเชียงใหม่ตั้งอยู่ในจังหวัดเชียงใหม่",
"จังหวัดเชียงใหม่มีดอยสุเทพเป็นสถานที่ท่องเที่ยว",
"นักศึกษาเรียนวิชา Data Science ที่มหาวิทยาลัย"
]
# 2. การตัดคำภาษาไทย (Tokenization)
# เราต้องสร้างฟังก์ชันช่วยตัดคำ เพราะ Python มาตรฐานเว้นวรรคไม่เป็น
def thai_tokenizer(text):
return word_tokenize(text, engine="newmm")
# 3. แปลงเป็นตัวเลขด้วย TF-IDF
tfidf = TfidfVectorizer(tokenizer=thai_tokenizer)
tfidf_matrix = tfidf.fit_transform(documents)
# ดูผลลัพธ์บางส่วน (Feature Names)
print(tfidf.get_feature_names_out()[:10])[' ' 'data' 'science' 'จังหวัด' 'ดอย' 'ตั้งอยู่' 'ที่' 'นักศึกษา'
'มหาวิทยาลัย' 'มหาวิทยาลัยเชียงใหม่']
13.6 การประยุกต์ใช้ในธุรกิจ
Sentiment Analysis (การวิเคราะห์อารมณ์): ตรวจสอบว่าคอมเมนต์ในเพจโรงแรมของเรา เป็นบวกหรือลบ? [7]
Topic Modeling (การจัดกลุ่มประเด็น): ดูว่าสัปดาห์นี้ลูกค้า “ร้องเรียน” เรื่องอะไรมากที่สุด (เช่น บริการ, พนักงาน หรือราคา)
Chatbot & Search: ช่วยให้ระบบค้นหาข้อมูลในองค์กรทำงานได้แม่นยำขึ้น
ถึงแม้ว่าการทำเหมืองข้อความจะมีความซับซ้อนในขั้นตอนการเตรียมข้อมูล แต่ผลลัพธ์ของมันคือ ‘ขุมทรัพย์มหาศาล’ ที่ข้อมูลเชิงตารางให้ไม่ได้
การที่เราสามารถเปลี่ยน ‘เสียงของลูกค้า’ (Voice of Customer) ให้กลายเป็นตัวเลขเพื่อประกอบการตัดสินใจทางธุรกิจได้ นั่นคือจุดสูงสุดของการเป็นนักวิทยาศาสตร์ข้อมูลที่แท้จริง
นักศึกษาสามารถทบทวนเนื้อหาและการฝึกปฏิบัติทั้งหมดได้ที่ [8]
13.7 แบบฝึกหัดท้ายบท
ข้อที่ 1: ข้อใดต่อไปนี้คือคำจำกัดความที่ถูกต้องที่สุดของ “ข้อมูลไร้โครงสร้าง” (Unstructured Data) ในบริบทของการทำเหมืองข้อมูล?
\(~~~\)ก. ข้อมูลที่จัดเก็บในตาราง Excel อย่างเป็นระเบียบ
\(~~~\)ข. ข้อมูลข้อความอิสระ เช่น รีวิวลูกค้า หรือคอมเมนต์บนโซเชียลมีเดีย ซึ่งไม่มีรูปแบบแถวและคอลัมน์ที่แน่นอน \(~~~\)ค. ข้อมูลตัวเลขยอดขายที่ดึงมาจากฐานข้อมูล SQL \(~~~\)ง. ข้อมูลรหัสพนักงานและแผนกในรูปแบบ CSV
ข้อที่ 2: เหตุใดการทำเหมืองข้อความ (Text Mining) จึงมักถูกพิจารณาว่า “จัดการได้ยาก” กว่าข้อมูลเชิงตัวเลข?
\(~~~\)ก. เพราะภาษาไทยไม่มีการเว้นวรรคระหว่างคำชัดเจน และมีความกำกวมตามบริบท
\(~~~\)ข. เพราะข้อมูลข้อความมีขนาดไฟล์เล็กเกินไปจนปัญญาประดิษฐ์มองไม่เห็น
\(~~~\)ค. เพราะคอมพิวเตอร์ไม่รองรับภาษาไทย
\(~~~\)ง. เพราะข้อความไม่สามารถแปลงเป็นตัวเลขได้ในทางคณิตศาสตร์
ข้อที่ 3: ขั้นตอน Tokenization มีบทบาทสำคัญอย่างไรในกระบวนการทำเหมืองข้อมูล?
\(~~~\)ก. การลบโฆษณาออกจากเว็บไซต์
\(~~~\)ข. การแยกประโยคหรือข้อความยาวๆ ออกเป็นหน่วยย่อย เช่น คำ (Words) หรือ วลี (Phrases)
\(~~~\)ค. การแปลภาษาจากภาษาไทยเป็นภาษาอังกฤษ
\(~~~\)ง. การสรุปเนื้อหาบทความให้สั้นลง
ข้อที่ 4: คำว่า “และ”, “ที่”, “ซึ่ง”, “อัน”, “ครับ”, “ค่ะ” มักถูกกำจัดออกในขั้นตอนใด และเรียกว่าคำจำพวกใด?
\(~~~\)ก. ขั้นตอน Normalization เรียกว่า Keywords
\(~~~\)ข. ขั้นตอน Tokenization เรียกว่า Tokens
\(~~~\)ค. ขั้นตอน Stop-words Removal เรียกว่า Stop-words
\(~~~\)ง. ขั้นตอน Vectorization เรียกว่า Vectors
ข้อที่ 5: หากนักศึกษาต้องการจัดการกับคำว่า “กทม”, “กรุงเทพฯ” และ “กรุงเทพมหานคร” ให้เครื่องจักรเข้าใจว่าเป็นที่เดียวกัน นักศึกษาควรทำในขั้นตอนใด?
\(~~~\)ก. Data Cleaning
\(~~~\)ข. Normalization
\(~~~\)ค. Stop-words Removal
\(~~~\)ง. TF-IDF Weighting
ข้อที่ 6: เทคนิค TF-IDF ถูกออกแบบมาเพื่อแก้ปัญหาใดในการให้น้ำหนักคำ?
\(~~~\)ก. เพื่อลบคำที่สะกดผิดออกจากข้อมูล
\(~~~\)ข. เพื่อลดความสำคัญของคำที่ “โหล” (พบบ่อยในทุกเอกสาร) และเพิ่มความสำคัญให้กับคำที่ “เด่น” (เป็นเอกลักษณ์ของเอกสารนั้น)
\(~~~\)ค. เพื่อนับจำนวนคำทั้งหมดในฐานข้อมูล
\(~~~\)ง. เพื่อจัดกลุ่มลูกค้าตามระดับรายได้
ข้อที่ 7: หากคำว่า “ทุเรียน” มีค่า TF-IDF สูงมาก ในบทความหนึ่ง นักศึกษาสามารถสรุปเบื้องต้นได้ว่าอย่างไร?
\(~~~\)ก. บทความนี้พูดถึงผลไม้หลายชนิดรวมๆ กัน
\(~~~\)ข. คำว่าทุเรียนเป็นคำที่พบบ่อยที่สุดในภาษาไทย
\(~~~\)ค. ทุเรียนเป็น “คำสำคัญ” (Keyword) หลักที่โดดเด่นของบทความนี้
\(~~~\)ง. บทความนี้เขียนขึ้นด้วยภาษาที่ไม่เป็นทางการ
ข้อที่ 8: การวิเคราะห์ Sentiment Analysis มีประโยชน์สูงสุดต่อผู้ประกอบการในด้านใด?
\(~~~\)ก. การคำนวณภาษีประจำปี
\(~~~\)ข. การวัดระดับความพึงพอใจและอารมณ์ของลูกค้าจากข้อความรีวิวสินค้า
\(~~~\)ค. การตรวจสอบเวลาเข้า-ออกงานของพนักงาน
\(~~~\)ง. การบริหารจัดการคลังสินค้า
ข้อที่ 9: Library ใน Python ชนิดใดที่เป็น “มาตรฐาน” สำหรับนักวิทยาศาสตร์ข้อมูลในการตัดคำภาษาไทยในปัจจุบัน?
\(~~~\)ก. Pandas
\(~~~\)ข. Scikit-learn
\(~~~\)ค. PyThaiNLP
\(~~~\)ง. Matplotlib
ข้อที่ 10: เทคนิค Topic Modeling (เช่น LDA) ช่วยแก้โจทย์ทางธุรกิจในข้อใดได้ชัดเจนที่สุด?
\(~~~\)ก. การหาว่าในกองคอมเมนต์ลูกค้านับหมื่นข้อความ มีประเด็นหลักๆ เรื่องอะไรที่ลูกค้ากำลังพูดถึงอยู่บ้าง
\(~~~\)ข. การตรวจสอบว่าลูกค้าคนไหนมียอดซื้อสูงสุด
\(~~~\)ค. การพิมพ์ใบเสร็จรับเงินอัตโนมัติ
\(~~~\)ง. การเปลี่ยนข้อความเสียงให้กลายเป็นตัวอักษร
data