AI
น้องๆ เคยสงสัยไหมว่าทำไม Google Search ถึงเข้าใจภาษาไทยที่เราพิมพ์ผิดๆ ถูกๆ หรือทำไม Chatbot ถึงตอบคำถามเราได้เป็นเรื่องเป็นราว นั่นแหละคือ NLP (Natural Language Processing) หรือการประมวลผลภาษาธรรมชาติ ซึ่ง NLP Thai Language Processing ก็คือการทำให้คอมพิวเตอร์เข้าใจและประมวลผลภาษาไทยได้นั่นเอง
สมัยผมทำร้านเน็ต SiamCafe.net เมื่อก่อนนะ ไม่มีหรอก AI แบบนี้ เราต้องมานั่งตอบคำถามลูกค้าเองทุกอย่าง แต่เดี๋ยวนี้ AI มันเก่งขึ้นเยอะ เพราะ NLP นี่แหละ มันช่วยให้เราสร้างระบบที่เข้าใจภาษาไทยได้ดีขึ้น ช่วยลดภาระงาน แถมยังสร้างโอกาสใหม่ๆ อีกเพียบ เช่น การวิเคราะห์ความรู้สึกจากข้อความ, การสร้าง Chatbot ภาษาไทย, หรือแม้แต่การแปลภาษาไทยเป็นภาษาอื่นโดยอัตโนมัติ
ภาษาไทยเราไม่มี spacebar คั่นคำเหมือนภาษาอังกฤษใช่ไหม? นั่นแหละปัญหา! คอมพิวเตอร์มันไม่รู้ว่าตรงไหนคือคำเริ่มต้น ตรงไหนคือคำสุดท้าย เราเลยต้องสอนมันตัดคำก่อน ยกตัวอย่างเช่น "วันนี้อากาศดี" ต้องถูกตัดเป็น "วัน/นี้/อากาศ/ดี" ถึงจะเอาไปประมวลผลต่อได้
สมัยก่อนการตัดคำภาษาไทยนี่เป็นอะไรที่ท้าทายมาก ต้องเขียนโปรแกรมเอง ใช้ Dictionary เอง เดี๋ยวนี้มี Library สำเร็จรูปให้ใช้เยอะแยะ แถมฉลาดกว่าเดิมมาก
หลังจากตัดคำได้แล้ว ขั้นตอนต่อไปคือการบอกว่าแต่ละคำเป็นคำชนิดไหน เช่น คำนาม คำกริยา คำคุณศัพท์ เหมือนที่เราเรียนไวยากรณ์ตอนเด็กๆ นั่นแหละ แต่คราวนี้เราจะสอนให้คอมพิวเตอร์รู้ว่า "วันนี้" เป็นคำนาม, "อากาศ" เป็นคำนาม, "ดี" เป็นคำคุณศัพท์ ทำไมต้องทำ? เพราะมันช่วยให้เราเข้าใจความหมายของประโยคได้ละเอียดขึ้นไง
ลองนึกภาพนะ ถ้าคอมพิวเตอร์รู้ว่า "อากาศ" เป็นคำนาม มันก็จะไม่เอาไปตีความว่าเป็นกริยา (เช่น "ฉันอากาศยาน") มันช่วยลดความกำกวมและทำให้การประมวลผลแม่นยำขึ้นเยอะเลย
ถ้าอยากลองเล่น NLP Thai Language Processing ไม่ต้องกลัวว่าจะยาก สมัยนี้มี Library และ Framework ดีๆ ให้ใช้เยอะแยะ ที่นิยมๆ ก็มี PyThaiNLP, Deepcut, และ Hugging Face Transformers (ที่รองรับภาษาไทยด้วยนะ)
ผมแนะนำให้เริ่มจาก PyThaiNLP ก่อน เพราะใช้งานง่าย มีฟังก์ชันพื้นฐานให้ใช้ครบ แถมมีเอกสารภาษาไทยให้อ่านด้วย SiamCafe Blog เราก็มีบทความเกี่ยวกับ PyThaiNLP ลองไปอ่านดูได้
ก่อนอื่นต้องติดตั้ง PyThaiNLP ก่อนนะ เปิด Command Prompt หรือ Terminal แล้วพิมพ์:
pip install pythainlp
ลองตัดคำง่ายๆ ดู:
from pythainlp.tokenize import word_tokenize
text = "สวัสดีประเทศไทย"
tokens = word_tokenize(text)
print(tokens)
ผลลัพธ์ที่ได้คือ ['สวัสดี', 'ประเทศ', 'ไทย'] เห็นไหมว่ามันตัดคำให้เราเรียบร้อย
ลองทำ POS Tagging ดูบ้าง:
from pythainlp.tag import pos_tag
text = "แมวกินปลาทู"
tokens = word_tokenize(text)
tags = pos_tag(tokens)
print(tags)
ผลลัพธ์ที่ได้คือ [('แมว', 'NCMN'), ('กิน', 'VACT'), ('ปลาทู', 'NCMN')] ซึ่งบอกว่า "แมว" และ "ปลาทู" เป็นคำนาม (NCMN) และ "กิน" เป็นคำกริยา (VACT)
NLP Thai Language Processing ไม่ได้มีแค่ PyThaiNLP นะ ยังมี Library อื่นๆ ที่น่าสนใจอีกเยอะ แต่ละตัวก็มีข้อดีข้อเสียต่างกันไป ลองดูตารางเปรียบเทียบด้านล่างนี้:
| Library | จุดเด่น | จุดด้อย | เหมาะกับใคร |
|---|---|---|---|
| PyThaiNLP | ใช้งานง่าย, มีฟังก์ชันพื้นฐานครบ, เอกสารภาษาไทย | ความเร็วอาจจะไม่สูงเท่าตัวอื่น | ผู้เริ่มต้น, โปรเจกต์ขนาดเล็กถึงกลาง |
| Deepcut | ความเร็วสูง, ใช้ Deep Learning | ต้องใช้ GPU (ถ้าต้องการความเร็วสูงสุด), อาจจะซับซ้อนกว่า | โปรเจกต์ที่ต้องการความเร็ว, ผู้ที่มีความรู้ด้าน Deep Learning |
| Hugging Face Transformers | โมเดล Pre-trained ภาษาไทย, รองรับงาน NLP ที่ซับซ้อน | ต้องใช้ความรู้ด้าน Transformers, อาจจะใช้ทรัพยากรเยอะ | ผู้ที่ต้องการทำ NLP ขั้นสูง, โปรเจกต์ที่ต้องการความแม่นยำสูง |
เลือกใช้ Library ที่เหมาะกับความต้องการและ skillset ของเรานะ ไม่มีอะไรดีที่สุดเสมอไป ขึ้นอยู่กับ Use Case และทรัพยากรที่เรามี
สุดท้ายนี้ อย่าลืมว่า NLP Thai Language Processing เป็นศาสตร์ที่ต้องเรียนรู้และฝึกฝนอยู่เสมอ ลองเล่น ลองทำโปรเจกต์เล็กๆ น้อยๆ แล้วจะเก่งขึ้นเอง SiamCafe Blog เรามีบทความและ tutorial เกี่ยวกับ NLP อีกเยอะ ลองเข้าไปอ่านดูได้นะครับ
น้องๆ หลายคนถามมาว่า "พี่บอมครับ ทำ NLP ภาษาไทยให้เวิร์ค ต้องเริ่มตรงไหน?" สมัยผมทำร้านเน็ต SiamCafe เนี่ย ลูกค้าชอบถามเรื่องเกมส์ออนไลน์ ผมก็ต้องหาข้อมูลเกมส์มาตอบให้ได้ NLP ก็เหมือนกัน ต้องเข้าใจ "เกมส์" หรือ "บริบท" ของภาษาไทยก่อน
จำไว้เลยว่า ภาษาไทย "ดิ้นได้" มากกว่าภาษาอังกฤษเยอะ การผันวรรณยุกต์ การใช้คำซ้อนคำซ้ำ พวกนี้มีผลหมด ถ้าเรามองข้ามไป โมเดลเราก็ "เอ๋อ" ได้ง่ายๆ เคยเจอเคสลูกค้าพิมพ์ "สวัสดีคร๊าบบบบ" มา ระบบตอบกลับ "ไม่เข้าใจ" เซ็งเลย!
1. Preprocessing is King: การทำความสะอาดข้อมูลสำคัญสุดๆ ตัดคำผิด แก้คำซ้ำ แปลงตัวอักษรให้เป็นมาตรฐานเดียวกัน พวกสระบนล่าง วรรณยุกต์ ต้องจัดการให้ดี
# ตัวอย่างการ normalize ตัวอักษร (Python)
import re
def normalize_thai(text):
text = re.sub('[์]', '', text) # ตัดไม้ทัณฑฆาต
text = re.sub('[็]', '', text) # ตัดไม้ไต่คู้
# เพิ่มเติมตามต้องการ
return text
text = "สวัสดีคร๊าบบบ"
normalized_text = normalize_thai(text)
print(normalized_text) # สวัสดีครับบบ
2. Word Segmentation is Crucial: ภาษาไทยไม่มี space บอกขอบเขตคำ ต้องใช้ตัวตัดคำช่วย PyThaiNLP, deepcut, เลือกใช้ตามความเหมาะสมของงาน แต่ที่สำคัญคือ ต้อง "ลอง" หลายๆ ตัว แล้วดูว่าตัวไหนให้ผลลัพธ์ดีที่สุด ไม่ใช่ว่าตัวดังแล้วจะดีเสมอไป
3. Context is Everything: ลองใช้ Word Embeddings ที่ train จากข้อมูลภาษาไทยเยอะๆ เช่น Thai2Vec, Word2Vec ที่ train บน Wikipedia ภาษาไทย พวกนี้จะช่วยให้โมเดลเข้าใจความหมายของคำในบริบทต่างๆ ได้ดีขึ้น เหมือนเราให้โมเดล "อ่านหนังสือ" เยอะๆ นั่นแหละ
4. Fine-tuning for Specific Tasks: อย่าคิดว่าโมเดลเดียวจะแก้ได้ทุกปัญหา ถ้าจะทำ Sentiment Analysis ก็ต้อง Fine-tune โมเดลบน Dataset ที่เป็นรีวิวสินค้า ถ้าจะทำ Question Answering ก็ต้อง Fine-tune บน Dataset ที่เป็นคำถามคำตอบ เหมือนเรา "สอนพิเศษ" ให้โมเดลเก่งในเรื่องที่เราต้องการ
สมัยทำ SiamCafe ผมเคยเจอเด็กพิมพ์ "กาก" ในเกมส์ แล้วโดนแบน แต่จริงๆ แล้วเด็กมันหมายถึง "ไม่เก่ง" ไม่ได้ด่าใคร เห็นไหมว่าบริบทสำคัญขนาดไหน!
ตอบยากเลยน้อง มันเหมือนถามว่า ไก่ทอด KFC กับ ไก่ย่างห้าดาว อันไหนอร่อยกว่ากัน มันแล้วแต่คนชอบ PyThaiNLP มีฟังก์ชันเยอะกว่า Deepcut เร็วกว่า ต้องลองดูว่าอันไหนเหมาะกับงานเรา แต่ถ้าให้แนะนำ ลองทั้งคู่เลย!
อันนี้ก็แล้วแต่ แต่ส่วนตัวผมชอบใช้ขนาดใหญ่ๆ หน่อย พวก 300 dimensions ขึ้นไป เพราะมันจะเก็บรายละเอียดของคำได้เยอะกว่า เหมือนเรามี "กล้อง" ที่ซูมได้ละเอียดกว่า
ใจเย็นๆ น้อง NLP มันก็เป็นแบบนี้แหละ ต้อง Debug ไปเรื่อยๆ ลองกลับไปดูที่ Preprocessing ก่อน ว่าทำความสะอาดข้อมูลดีพอหรือยัง ลองเปลี่ยน Word Embeddings ดู ลองปรับ Hyperparameters ของโมเดล อย่าท้อ!
ยิ่งเยอะยิ่งดี แต่ก็ต้องดูงบประมาณด้วย ถ้ามีข้อมูลน้อย ลองใช้เทคนิค Data Augmentation ช่วย เช่น การสลับคำ การเพิ่มคำ การแปลแล้วแปลกลับ พวกนี้จะช่วยเพิ่มปริมาณข้อมูลได้ เหมือนเรา "หลอก" โมเดลว่ามีข้อมูลเยอะ
NLP ภาษาไทยมันท้าทาย แต่ก็สนุก ต้องอาศัยความเข้าใจในภาษาไทย ความรู้ด้าน Machine Learning และที่สำคัญคือ ความอดทน อย่ากลัวที่จะลองผิดลองถูก เพราะทุกครั้งที่เราพลาด เราก็ได้เรียนรู้อะไรใหม่ๆ เสมอ เหมือนสมัยผมเปิดร้านเน็ตใหม่ๆ เจอปัญหาทุกวัน แต่ก็ทำให้ผมเก่งขึ้นทุกวัน
อย่าลืมแวะไปอ่านบทความอื่นๆ ใน SiamCafe Blog นะน้อง มีเรื่อง IT สนุกๆ อีกเยอะเลย และถ้าใครสนใจเรื่อง Forex ลองดู iCafeForex ได้นะ
| หัวข้อ | คำอธิบาย |
|---|---|
| Preprocessing | การทำความสะอาดข้อมูล |
| Word Segmentation | การตัดคำภาษาไทย |
| Word Embeddings | การแปลงคำเป็น Vector |
| Fine-tuning | การปรับโมเดลให้เข้ากับงาน |