Thai Natural Language Processing with Python

หลายคนคงเคยได้ยินการนำ Machine Learning มาใช้ในการทำ Text Analysis, Text Mining และ Text Analytics ซึ่งจะใช้ Natural Language Processing ( NLP ) ในการเรียนรู้ภาษาของมนุษย์ มาใช้กับงานประเภท Speech-to-Text, Text-to-Speech, Speech Recognition, Text Categorization, Text Generation, Machine Translation, Question Answering นอกจากนี้ยังสามารถนำมาใช้ในการวิเคราะห์อารมณ์ Text Sentiment ได้อีกด้วย


Thai NLP

  • Corpus ( corpus ) : เป็นฐานข้อมูลภาษาไทยที่มีการแยกเป็นหมวดหมู่ไว้ โดยจะทำการดาวน์โหลด Corpus ที่พร้อมใช้งานแล้ว ซึ่งเราสามารถทำการเรียกใช้งานพร้อมทั้ง Return ค่าในลักษณะของ frozenset
  • Soundex ( soundex ) : เป็นวิธีการที่ใช้ในการทำ Word Similarity Matching สำหรับหาคำที่ออกเสียงคล้ายกันระหว่างคำ 2 คำด้วย Soundex Algorithm จากเสียงพูดของมนุษย์ Phonetic Type 6 แบบ ซึ่งเป็นส่วนหนึ่งของการทำ Text Analysis
  • Spelling ( spell ) : เป็นวิธีการที่ใช้ในการทำ Spelling Correction สำหรับตรวจสอบคำสะกดในภาษาไทย โดยมีความแม่นยำ Accuracy อยู่ที่ 80-90 และมีความเร็วในการประมวลผลอยู่ที่ 10 Word / Second
  • Summarization ( summarize ) : เป็นวิธีการที่ใช้ในการทำ Text Summarization สำหรับนับจำนวนคำ โดยทำการแปลงข้อความที่อยู่ในลักษณะ Paragraph ให้อยูในลักษณะ Sentence แล้วใช้วิธีการตัดคำ Word Tokenization เพื่อทำการหา Frequency ของ Word
  • Part-of-Speech ( tag ) : เป็นวิธีการที่ใช้ในการทำ POS Tagging สำหรับกำหนดประเภทของคำใน Sentence ในลักษณะของ Word Class หรือ Lexical Category โดยสามารถนำไปใช้ในการหา Custom Keyword ของ Sentence ซึ่งประกอบไปด้วย Engine ได้แก่ perceptron ( default ), unigram และ artagger
  • Tokenization ( tokenize ) : เป็นวิธีการที่ใช้ในการทำ Word Tokenization สำหรับการตัดคำจาก Sentence ซึ่งประกอบไปด้วย Engine ได้แก่ newmm ( default ), longest, multi_cut, pyicu, deepcut, tcc และ etcc
  • Transliteration ( transliterate ) : เป็นวิธีการที่ใช้ในการทำ Romanization, Transliteration, and Transcription ถอดเสียงภาษาไทยเป็นตัวอักษรละติน ซึ่งประกอบไปด้วย Engine ได้แก่ royin ( default ) และ thai2rom
  • ULMFit ( ulmfit ) : เป็นวิธีการที่ใช้ในการทำ Transfer Learning สำหรับหาค่าเฉลี่ยของ Vocab ที่ไม่ได้อยู่ใน Pretrained Vocab ด้วยเทคนิค Universal Language Model Fine-tuning for Text Classification ซึ่งจะช่วยลดความผิดพลาดได้ถึง 18-24%
  • Word Vector ( word_vector ) : เป็นวิธีการที่ใช้ในการทำ Word Embedding แปลงข้อความเป็นตัวเลขในลักษณะของ Vector สำหรับหาคำที่มีความสัมพันธ์คล้ายกันระหว่างคำ 2 คำด้วยการ Multiplication Combination Objective ซึ่งได้มาจากผลคูณด้วยวิธี Omer Levy & Yoav Goldberg ซึ่งจะได้ List of Word ที่แบ่ง Label ออกเป็น Positive และ Negative โดยสามารถนำไปประยุกต์ใช้ในการหาว่าคำใดไม่เข้าพวก

Tokenization Engine

ในการตัดคำภาษาไทย Thai Word Segmentation จะต้องใช้ Dictionary-based ของภาษาไทยในการตัดคำ ซึ่งก็จะประกอบไปด้วย Tokenization Engine ที่ใช้ในการตัดคำ ได้แก่ newmm, longest, multi_cut, pyicu, deepcut, tcc และ etcc

Get Started

  • ทำการสร้าง Virtual Environment
# C:\> mkvirtualenv thai-nlp
# C:\> workon thai-nlp
  • ทำการติดตั้ง Package
# (thai-nlp) C:\> pip install pythainlp
# (thai-nlp) C:\> pip install pythainlp[full]
  • ทำการสร้างไฟล์ thai_nlp.py
from pythainlp.tokenize import word_tokenize

text = "สถาบันบัณฑิตพัฒนบริศาสตร์"
print(word_tokenize(text, engine="newmm")) #['สถาบันบัณฑิตพัฒนบริหารศาสตร์']
print(word_tokenize(text, engine="icu")) #['สถาบัน', 'บัณฑิต', 'พัฒนบริหารศาสตร์']
  • ทำการรัน thai_nlp.py
# (thai-nlp) C:\> python thai_nlp.py
  • จะแสดงผลลัพธ์ของการตัดคำ Word Tokenization
['สถาบันบัณฑิตพัฒนบริหารศาสตร์']
['สถาบัน', 'บัณฑิต', 'พัฒนบริหารศาสตร์']

อ่านเพิ่มเติม : https://bit.ly/2mQIeou, https://bit.ly/2nJyP2h, https://bit.ly/2pf9UnN, https://bit.ly/2mQqr0y


Leave a Reply

Your email address will not be published. Required fields are marked *