13  การทำเหมืองข้อความ

Modified

18 พฤษภาคม 2569

Noteวัตถุประสงค์การเรียนรู้

เมื่อศึกษาบทนี้แล้ว ผู้เรียนควรสามารถ

  1. อธิบายแนวคิดของการทำเหมืองข้อความ (Text Mining) ได้

  2. เข้าใจความแตกต่างระหว่างข้อมูลข้อความกับข้อมูลเชิงโครงสร้าง

  3. เตรียมข้อมูลข้อความ (Text Preprocessing) ได้

  4. ใช้เทคนิคพื้นฐาน เช่น Tokenization หรือ TF-IDF ได้

  5. วิเคราะห์ข้อความเพื่อใช้ในธุรกิจได้

ตลอดบทเรียนที่ผ่านมา นักศึกษาได้ฝึกจัดการกับข้อมูลที่เป็น “ตัวเลข” และ “ตาราง” ซึ่งเปรียบเสมือนพยานหลักฐานที่จัดเก็บอย่างเป็นระเบียบในแฟ้มข้อมูล (Structured Data) แต่ในโลกความเป็นจริงของธุรกิจ ข้อมูลพยานหลักฐานกว่า 80% กลับซ่อนอยู่ในรูปของ “ข้อความ” (Textual Data) ไม่ว่าจะเป็น รีวิวจากลูกค้าใน Facebook, อีเมลร้องเรียน, บทสัมภาษณ์ หรือแม้แต่แชทใน LINE

หลายคนอาจสงสัยว่า ทำไมเราถึงต้องเรียนเรื่องการทำเหมืองข้อความเป็นบทสรุป? คำตอบคือ “เพราะมันคือข้อมูลที่จัดการยากที่สุด” ด้วยเหตุผลหลัก 3 ประการ:

  1. ไร้โครงสร้าง (Unstructured): ข้อความไม่มีรูปแบบแถวและคอลัมน์ที่แน่นอนเหมือนข้อมูลยอดขาย เครื่องจักรจึงไม่สามารถอ่านและเข้าใจได้ทันที

  2. ความกำกวม (Ambiguity): คำหนึ่งคำอาจมีความหมายได้หลายอย่างตามบริบท (Context) เช่นคำว่า “ใจ” ในภาษาไทยที่มีคำประสมนับร้อยความหมาย

  3. ความท้าทายของภาษาไทย: ภาษาไทยเราไม่มีการเว้นวรรคระหว่างคำ (Word Boundary) ทำให้แค่ขั้นตอนแรกอย่างการ “ตัดคำ” ก็กลายเป็นโจทย์ที่ต้องใช้เทคนิคเฉพาะทางสูงกว่าภาษาอังกฤษมาก

13.1 จาก “ตัวอักษร” สู่ “ตัวเลข”

เป้าหมายของบทนี้ไม่ใช่การให้นักศึกษานั่งอ่านข้อความทีละบรรทัด แต่คือการเรียนรู้วิธี “เปลี่ยนข้อความให้กลายเป็นตัวเลข” (Text Transformation) เพื่อให้เราสามารถนำเทคนิคทางวิทยาศาสตร์ข้อมูล ที่เราเรียนมาทั้งหมด (เช่น การแบ่งกลุ่ม (Clustering) ในบทที่ผ่าน) มาประยุกต์ใช้กับข้อความได้

13.2 ข้อมูลเชิงโครงสร้าง vs ข้อมูลไร้โครงสร้าง

ก่อนที่เราจะเริ่มขุดเหมือง (Mining) เราต้องเข้าใจก่อนว่า “แร่” ที่เรากำลังจะจัดการนั้นมีลักษณะอย่างไรเมื่อเทียบกับสิ่งที่เราคุ้นเคย ตาม Table 13.1

Table 13.1: ตารางเปรียบเทียบความแตกต่างระหว่างข้อมูลเชิงโครงสร้างและข้อมูลไม่มีโครงสร้างแบบข้อความ
คุณลักษณะ ข้อมูลเชิงโครงสร้าง ข้อมูลไม่มีโครงสร้างแบบข้อความ
รูปแบบ แถวและคอลัมน์ (Excel, SQL) ข้อความอิสระ (Reviews, Social Media)
ความชัดเจน มีประเภทข้อมูลชัดเจน (ตัวเลข, วันที่) มีความกำกวมตามบริบทและอารมณ์
การจัดเก็บ ใช้พื้นที่น้อย จัดระเบียบง่าย ใช้พื้นที่มาก และกระจัดกระจาย
การวิเคราะห์ ใช้สถิติและคณิตศาสตร์ได้ทันที ต้องผ่านกระบวนการแปลง (Transformation) ก่อน
สัดส่วนในธุรกิจ ประมาณ 20% ประมาณ 80% และเพิ่มขึ้นเรื่อยๆ [1]

13.3 ความท้าทายของการจัดการข้อความ

การทำเหมืองข้อความนั้น “ยาก” ในขั้นตอนการเตรียมข้อมูล (Data Preparation) มากกว่าเนื้อหาบทอื่น ๆ เพราะ

  1. Noise (สัญญาณรบกวน): ในข้อความจะมีคำจำพวก “คือ”, “แบบว่า”, “คะ/” หรือคำทับศัพท์และคำแสลง ซึ่งเครื่องจักรไม่รู้ว่าเป็นคำที่ไม่มีมูลค่าในการวิเคราะห์

  2. Sparsity (ความเบาบาง): เมื่อเราแปลงข้อความเป็นตาราง เราจะมีจำนวน “คอลัมน์” (คำศัพท์) มหาศาล แต่ในหนึ่งแถว (หนึ่งประโยค) จะมีค่าเป็น 0 อยู่เกือบทั้งหมด ทำให้การคำนวณซับซ้อนขึ้น [2]

  3. ภาษาไทย (The Ultimate Boss): เช่นข้อความไม่มีเว้นวรรค หรือการตัดคำ (Tokenization) ผิดที่ ส่งผลให้ความหมายเปลี่ยนทันที เช่น “ตากลม” (ตา-กลม vs ตาก-ลม)

    • การสะกดผิด: ภาษาวิบัติหรือการพิมพ์ผิดในโซเชียลมีเดีย ทำให้เครื่องจักรนับคำผิดพลาด

ข้อมูลเชิงโครงสร้างเหมือนกับ ‘สารอาหารที่ผ่านการปรุงมาแล้ว’ เราแค่หยิบมาวิเคราะห์ แต่ข้อมูลข้อความคือ ‘วัตถุดิบดิบ’ ที่ปนมากับกรวดและทราย หน้าที่ของนักสืบข้อมูลในบทนี้คือการรู้วิธี Pre-processing หรือการ ‘ล้างทราย’ ออกไปให้เหลือแต่เนื้อความจริงๆ ก่อนจะส่งให้ปัญญหาประดิษฐ์วิเคราะห์

13.4 กระบวนการเตรียมข้อมูลข้อความ

ก่อนที่ข้อความจะกลายเป็นตัวเลขเพื่อนำไปวิเคราะห์ นักสืบข้อมูลต้องพาสิ่งเหล่านั้นผ่าน “โรงกรอง” เพื่อขจัดสิ่งเจือปนออกดังนี้ [3]

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
Figure 13.1: ขั้นตอนการเตรียมข้อมูลข้อความ (Text Pre-processing)

จาก 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)

เมื่อเรารับข้อความเข้ามา สิ่งที่ปัญญาประดิษฐ์ต้องการไม่ใช่ตัวอักษร แต่คือ “ค่าน้ำหนัก” เพื่อบอกว่าคำไหนคือ “พระเอก” ของข้อความนี้

Tipสูตรคำนวณ TF-IDF

เทคนิคนี้ประกอบด้วย 2 ส่วนที่ทำงานร่วมกัน:

  1. TF (Term Frequency): คำนี้ปรากฏในเอกสารนี้ “บ่อย” แค่ไหน? \[TF(t, d) = \frac{\text{จำนวนครั้งที่คำ t ปรากฏในเอกสาร d}}{\text{จำนวนคำทั้งหมดในเอกสาร d}}\]

  2. IDF (Inverse Document Frequency): คำนี้เป็นคำ “หายาก” ในภาพรวมหรือไม่? (ถ้าหายากจะมีค่าพลังสูง)

\[IDF(t, D) = \log\left(\frac{\text{จำนวนเอกสารทั้งหมด}}{\text{จำนวนเอกสารที่มีคำ t ปรากฏอยู่}}\right)\]

สรุป: \(TF \times IDF\) คือการให้คะแนนคำที่ “เด่นในเอกสารนี้ แต่ไม่ได้โหลในเอกสารอื่น” (เช่น คำว่า “ทุเรียน” ในบทความเรื่องผลไม้ จะมีค่า TF-IDF สูงกว่าคำว่า “และ”) [5]

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 การประยุกต์ใช้ในธุรกิจ

  1. Sentiment Analysis (การวิเคราะห์อารมณ์): ตรวจสอบว่าคอมเมนต์ในเพจโรงแรมของเรา เป็นบวกหรือลบ? [7]

  2. Topic Modeling (การจัดกลุ่มประเด็น): ดูว่าสัปดาห์นี้ลูกค้า “ร้องเรียน” เรื่องอะไรมากที่สุด (เช่น บริการ, พนักงาน หรือราคา)

  3. 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) ช่วยแก้โจทย์ทางธุรกิจในข้อใดได้ชัดเจนที่สุด?

\(~~~\)ก. การหาว่าในกองคอมเมนต์ลูกค้านับหมื่นข้อความ มีประเด็นหลักๆ เรื่องอะไรที่ลูกค้ากำลังพูดถึงอยู่บ้าง

\(~~~\)ข. การตรวจสอบว่าลูกค้าคนไหนมียอดซื้อสูงสุด

\(~~~\)ค. การพิมพ์ใบเสร็จรับเงินอัตโนมัติ

\(~~~\)ง. การเปลี่ยนข้อความเสียงให้กลายเป็นตัวอักษร

Cautionเฉลย
  1. ข | 2. ก | 3. ข | 4. ค | 5. ข | 6. ข | 7. ค | 8. ข | 9. ค | 10. ก

data