ตัดคำไทยด้วย NLP ใช้ Library vs API

Punyapat Sessomboon
2 min readDec 17, 2020

--

https://www.nectec.or.th/innovation/innovation-software/lextoplus.html

เมื่อพูดถึงโจทย์การวิเคราะห์และประมวลผลข้อความภาษาไทย หลายๆ ครั้งที่ขั้นตอนแรกที่เราจำเป็นต้องทำคือ การตัดคำ

เหตุผลที่เราต้องตัดคำภาษาไทยก่อนที่จะนำไปใช้งาน ก็เพื่อให้คอมพิวเตอร์สามารถทำความเข้าใจภาษาได้ง่ายมากขึ้น เพราะว่ามนุษย์เราก็ทำความเข้าใจข้อความเป็นคำๆ เหมือนกัน เช่น ถ้าเราเห็นประโยค

“วันนี้อากาศไม่ค่อยดีฝนทำท่าเหมือนจะตกเลย”

เราก็จะทำความเข้าใจประโยคนี้โดยการแยกคำต่างๆ ออกมาแล้วตีความหมายดังนี้

“วันนี้ | อากาศ | ไม่ค่อย | ดี | ฝน | ทำท่า | เหมือนจะ | ตก | เลย”

คอมพิมเตอร์เองก็จำเป็นต้องประมวลผลแยกเป็นคำๆ เหมือนกัน เพื่อให้ผลที่ออกมาถูกต้องและแม่นยำมากที่สุด แต่การตัดคำภาษาไทยก็ไม่ใช่เรื่องง่ายเท่าไหร่ และมักจะต้องใช้เวลาในการเขียนโปรแกรมเพื่อให้ได้ผลลัพธ์ที่ต้องการ เพราะฉะนั้นถ้าหากไม่ได้ตั้งใจจะสร้าง algorithm ของตัวเอง หรือต้องการศึกษาจริงจัง แต่เน้นไปที่ผลลัพธ์เพื่อนำไปตอบโจทย์ Business ผมแนะนำให้ ลองใช้ library หรือ API ที่มีอยู่แล้วดีกว่าครับ

แต่ก็ไม่ได้หมายความว่าเราจะลองทำเองไม่ได้นะครับ มี algorithm ง่ายๆ ที่สามารถเรียนรู้และทดลองสร้างเองได้ ที่ง่ายที่สุดน่าจะเป็น Dictionary-based tokenization เช่น longest match algorithm เป็นต้น

Library ตัดคำ

Library คือ Source code ที่มีนักพัฒนาเขียนมาให้แล้วบางส่วน เรามีหน้าที่นำมาเรียกใช้งานในโปรแกรมของเราต่อ ตัวอย่างเช่น

  • Cutkum (https://github.com/pucktada/cutkum)
    เป็น Library ที่สร้างด้วย Deep learning จาก Dataset BEST2010
    *ณ วันที่เขียนบทความ จะต้องใช้ Python3.6.8 + tensorflow1.4 ในการ run
ตัวอย่างการใช้งาน Cutkum
  • Deepcut (https://github.com/rkcosmos/deepcut) ใช้ Deep learning และสร้างจาก Dataset BEST2010 เหมือนกัน
    *ณ วันที่เขียนบทความ จะต้องใช้ Python3.6.8 + tensorflow2.2.0 ในการ run
https://github.com/rkcosmos/deepcut
ตัวอย่างการใช้งาน Deepcut

API

นอกจาก library แล้วก็มีบริการพวก API ที่ช่วยตัดคำได้เช่นกัน ข้อดีของการใช้ API ที่เหนือกว่าการใช้ library คือ

  1. ไม่จำเป็นต้องติดตั้ง เนื่องจาก API สมัยใหม่ ใช้ RESTful webservice ซึ่งแทบจะทุกๆ ภาษาที่ใช้เขียนโปรแกรมรองรับอยู่แล้ว
  2. วิธีเรียกใช้งานเป็นมาตรฐาน เนื่องจาก RESTful webservice มีวิธีการเรียนใช้งานที่ใช้กันโดยทั่วไปอยู่แล้ว เช่น รับส่งข้อมูลด้วย JSON โดยใส่ input ที่เป็น JSON ไว้ใน Request body เป็นต้น
  3. Update อยู่ตลอดเวลา เนื่องจากหลักการทำงานของ Webservice ทำให้ฝั่งผู้ให้บริการสามารถพัฒนาบริการให้ดีขึ้นได้ โดยที่ผู้ใช้งานไม่ต้องแก้ไข code เลย
    * Machine learning และ NLP เป็นเทคโนโลยีที่กำลังเป็น Trend ทำให้ Library และ Framework หลายๆ ตัวออก version ใหม่บ่อยมากๆ บางครั้ง version ใหม่ก็ต้องการ Dependency ที่ติดตั้งยาก หรืออาจจะไม่ Compatible กับ code เดิม การใช้ API จะทำให้เราไม่ต้องมากังวลประเด่นเหล่านี้ เพราะผู้ให้บริการจะรับผิดชอบในการอัพเกรด Library และ Framework และ ทำให้เรามั่นใจว่าเราจะสามารถเรียกใช้ API เดิมได้ โดยไม่ได้รับผลกระทบอะไรแต่ประสิทธิภาพดีขึ้น
  4. รองรับ load ที่สูงกว่า โดยปกติผู้ให้บริการ API จะมีเครื่อง Server ที่ประสิทธิภาพสูงกว่า อาจจะสูงถึงขั้นมี GPU ช่วยประมวลผลเลยก็ได้ ทำให้รองรับ request จำนวนมากๆ ได้ดีกว่า และประมวลผลได้เร็วกว่า
  5. มีตัวอย่างให้ทดลองเล่น โดยปกติผู้ให้บริการจะมีหน้าเอาไว้ให้ทดลองใช้งาน API ทำให้เราสามารถดูผลลัพธ์ของ API ได้ทันที โดยไม่ต้องเสียเวลาทดลองเขียน code เพื่อใช้งาน API

แต่ API ก็มีข้อเสีย คือ

  1. จำเป็นต้องเชื่อมต่อ Internet เพื่อใช้งาน Webservice
  2. ถ้าเป็น Algorithm เดียวกัน และ Server แบบเดียวกัน API อาจจะใช้เวลานานกว่า Webservice เล็กน้อย เนื่องจากข้อมูลต้องวิ่งผ่าน Network แต่อย่างที่ยกตัวอย่างในข้อ 4 ด้านบน ผู้ให้บริการอาจจะมีเครื่อง Server ที่ประสิทธิภาพสูงกว่า ทำให้การประมวลผลเร็วกว่าและหักลบกับเรื่อง Network ได้
  3. บางบริการอาจจะมีค่าใช้จ่าย เราก็ต้องมาลองเทียบข้อดีข้อเสียกันครับ ว่าคุ้มค่าที่จะจ่ายเงินให้ผู้ให้บริการ หรือว่าจะเอาเงินไปจ้างนักพัฒนาเพื่อพัฒนาเอง

ตัวอย่าง API เพื่อใช้ตัดคำ

หน้า demo สำหรับทดลองใช้บริการตัดคำ
  • ELI (https://demo.nlp.insightera.co.th/demo/tokenize) เป็นผู้ให้บริการ API เกี่ยวกับ NLP โดยเฉพาะสำหรับภาษาไทย โดย API เรียกใช้งานผ่าน RESTful webservice
    *การใช้งาน ELI ไม่จำเป็นต้องติดตั้งอะไรเพิ่มเติม เพราะว่าภาษาเกือบทุกภาษารองรับการเรียกใช้ Webservice อยู่แล้ว

*โดยปกติ เมื่อเราเรียกใช้งานผ่าน API ผู้ให้บริการมักจะขอให้สมัครสมาชิกและสร้าง token ขึ้นมา เพื่อให้ผู้ให้บริการสามารถติดตามการใช้งานของลูกค้าแต่ละคนได้ แต่ในกรณีของ ELI เขามี token ฟรี ให้นำไปทดลองใช้งานได้เลย ถ้าสนใจจะใช้งานจริงจังค่อยไปสมัครสมาชิกและสร้าง token ของตัวเองในภายหลังได้

token ฟรี = 10512F2049B72659DB9C46A7DCF60ED1

ตัวอย่างการเรียกใช้งาน ELI ด้วย Python
ตัวอย่างการเรียกใช้งานด้วย Node.js
ตัวอย่างการเรียกใช้งานด้วย Golang

จะเห็นว่าแต่ละภาษาไม่จำเป็นต้องใช้ Library สำหรับยิง Request HTTP เลย (Node.js จริงๆ ก็มีตัว default ที่ไม่ใช่ axios ครับ แต่เห็นว่าคนส่วนใหญ่ใช้ axios กัน เลยคิดว่าใช้ axios ในตัวอย่างดีกว่า)

การตัดคำเป็นเพียงแค่ขั้นตอนแรกในการประมวลผลข้อความ ซึ่งผลลัพธ์จากการตัดคำเองไม่ค่อยมีประโยชน์ที่จะเอาไปใช้ต่อในทันที มักจะต้องประมวลผลในขั้นต่อๆ ไปอีกก่อนนำไปใช้งาน เช่น

  1. Text classification = จัดกลุ่มข้อความตามตัวอย่าง
  2. Sentiment analysis = วิเคราะห์อารมณ์ในข้อความ
  3. Address extraction = หาที่อยู่ในข้อความ
  4. Information extraction = หาข้อมูลที่มีประโยชน์ในข้อความ
  5. Language translation = แปลภาษา

และอื่นๆ อีกมากมาย ซึ่งส่วนใหญ่แล้วก็จะมีทั้ง Library และ API ที่สามารถทำงานเหล่านี้ได้ อยู่ที่โจทย์และความต้องการของผู้พัฒนาว่าจะใช้ตัวเลือกแบบไหน

--

--