การประมวลภาษาธรรมชาติที่ได้ออกไปนอกหน่วยวิจัย

วีร์ สัตยมาศ

2016-02-10

วาระ

  • การเข้ารหัสอักษร
  • การตัดคำ
  • ระบบสนทนาอัตโนมัติ
  • หน่วยความจำแปล
  • การแปลภาษาอัตโนมัติ
  • การวิเคราะห์ทัศนคติอัตโนมัติ
  • ความเร็ว

การเข้ารหัสอักษร

รหัสเกษตร

รศ.ยืน ภู่วรวรรณ

มหาวิทยาลัยเกษตรศาสตร์

มอก.620 (TIS-620)

	    
	    $ cat ko_tis620.txt
	    ก
	    $ hexdump -C ko_tis620.txt 
            00000000  a1 0a        |..|
            00000002
	    $
	    
	  

ASCII?

CP874

Windows 874

ISO/IEC 8859-11

Unicode

Codepoint

Unicode

codepoint('ก') = 3585 (0x0E01)

TIS-620

codepoint('ก') = 161 (0xA1)

การเข้ารหัสอักษร (character encoding) สำหรับ Unicode

  • UTF-32
  • UTF-16
  • UTF-8

UTF-32

ตัวละ 4 ไบต์ เสมอ

  • codepoint('ก') = 0x0E01
  • codepoint('A') = 0x41
  • encode_utf32("กA") = 01 0E 00 00 41 00 00 00

UTF-16

ตัวละ 2 ไบต์ หรือ 4 ไบต์

  • codepoint('ก') = 0x0E01
  • codepoint('A') = 0x41
  • codepoint('𨭎') = 0x28B4E
  • ((0x28B4E-0x10000)/0x400)+0xD800 = 0xD862
  • ((0x28B4E-0x10000) mod 0x400)+0xDC00 = 0xDF4E
  • encode_utf16("กA𨭎") = 01 0E 41 00 62 D8 4E DF

UTF-8

1 ไบต์ ถึง 6 ไบต์

  • codepoint('ก') = 0x0E01
  • ((0x0E01 >> 12) & 0xF) + 0x0E = 0x0E
  • ((0x0E01 >> 6) & 0x3F) + 0x80 = 0xB8
  • (0x0E01 & 0xF) + 0x80 = 0x81
  • codepoint('A') = 0x41
  • encode_utf8("กA") = 0E B8 81 41

อภิปราย

เพิ่มเติม

http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=IWS-AppendixA

length/len

  • นับไบต์
  • นับอักขระ

Python 2.7

  • len("A")
  • len("ก")
  • len(u"ก")
  • len(u"A")

Python 3+

  • len("ก")
  • len("𨭎")

Java (OpenJDK 8)

  • "A".length()
  • "ก".length()
  • "𨭎".length()

การตัดคำ

ทำไมต้องมีโปรแกรมตัดคำ

ตัดคำแบบใช้พจนานุกรม

รศ.ยืน ภู่วรวรรณ

มหาวิทยาลัยเกษตรศาสตร์

ตัดคำแบบใช้พจนานุกรม (2)

พจนานุกรม: (1)กา (2)กาม (3)สุข (4)ใน (5)ทั้งหลาย

กามสุขในกามทั้งหลาย

  • |กา(1)|มสุขในกามทั้งหลาย
  • |กาม(2)|สุขในกามทั้งหลาย
  • |กาม(2)|สุข(3)|ใน(4)|กาม(2)|ทั้งหลาย(5)|

ซอฟท์แวร์เสรี

  • ICU
  • libthai
  • wordcut (.js)

International Components for Unicode (ICU)

  • พัฒนาโดย IBM และหมู่คณะอื่น ๆ
  • ทำอื่น ๆ นอกจากตัดคำได้ด้วย
  • เขียนด้วย C++ เป็นส่วนมาก
  • ใช้ตัดคำใน OS X, Java Runtime, LibreOffice/OpenOffice และอื่น ๆ

libthai

  • โดยนายเทพพิทักษ์ การุณบุญญานันท์ เป็นหลัก
  • เขียนด้วย C
  • ใช้ใน Pango, Gnome,Firefox บน unix-like


ภาพดัดแปลงมาจากของ Abel Cheung

wordcut

  • https://github.com/veer66/wordcut
  • เขียนด้วย JavaScript
  • แก้พจนานุกรมง่าย
  • ใช้ในน้องไอริน

ที่ที่น่าจะมีโปรแกรมตัดคำแบบปิด

  • Google
  • Microsoft
  • AsiaOnline

ระบบสนทนาอัตโนมัติ

น้องไอริน

https://web.irin.in.th โดยนายภัคพล พงษ์ทวี (@pureexe)

หน่วยความจำแปล

Pootle

mozilla.locamotion.org

Transvision

transvision.mozfr.org

Editing distance

การแปลภาษาอัตโนมัติ

โปรแกรมยอดนิยม

  • Google Translate
  • Bing Translator

เทคนิคที่ใช้

  • ตัดคำ
  • ตัดประโยค
  • หาส่วนที่ตรงกันอัตโนมัติ

หาส่วนที่ตรงกันอัตโนมัติ

แปลเอกสารเฉพาะทางได้

ซอฟต์แวร์เสรี

การวิเคราะห์ทัศนคติอัตโนมัติ

การวิเคราะห์ทัศนคติอัตโนมัติ

"ท่าน นายกประยุทธ สุดยอดดดดดดดดดด.....เข้ามาทำงานแป๊บเดียวราคาน้ำมันลดลงปั๊บเลย" (http://pantip.com/topic/32971376)

  • เรื่อง: ประยุทธ
  • คำแสดงขั้ว: สุดยอด

บริการ

Zanroo.com

วิเคราะห์ละเอียดขึ้น

บาร์ใหม่อร่อยอย่างสัด

  • เรื่อง: บาร์ใหม่
  • คำแสดงขั้ว: อร่อย (+), สัด (-)

วิเคราะห์ละเอียดขึ้น (2)

"ม.เกษตรนี่ห้องน้ำใหญ่ดี"

  • เรื่อง: ม.เกษตร
  • เรื่องละเอียดขึ้น: ห้องน้ำ
  • คำแสดงขั้ว: ดี

วิเคราะห์ละเอียดขึ้น (3)

"ม.เกษตรนี่ห้องน้ำใหญ่ดีจริง ๆ"

  • เรื่อง: ม.เกษตร
  • เรื่องละเอียดขึ้น: ห้องน้ำ
  • คำแสดงขั้ว: ดี
  • คำขยาย: จริง ๆ

ความเร็ว

การประมวลภาษาธรรมชาติใช้ CPU มาก

ข้อเสนอ

  • อย่าใช้ CPU มาก; Algorithm ; C++ Rust
  • เข้า Queue; ZeroMQ, RabbitMQ
  • Go, node.js ช่วยไหม?

เกี่ยวกับ Database

  • Tree -> MongoDB
  • RAM; SSD

สนใจ?

รศ.ดร. อัศนีย์ ก่อตระกูล

ห้อง 810

ดร. หัชทัย ชาญเลขา

ห้อง 809

วีร์

ขอบพระคุณ