ขอเชิญร่วมแข่ง BEST 2009: การแข่งขันสุดยอดซอฟต์แวร์แบ่งคำภาษาไทย

tags:

เป็นที่ทราบกันว่าการประมวลผลภาษาไทยเป็นเทคโนโลยีพื้นฐานที่จะนำไปสู่ระบบประยุกต์ที่มีคุณค่ามหาศาลได้ อาทิ การแปลภาษาอัตโนมัติ การรู้จำและสังเคราะห์เสียงพูด การย่อความอัตโนมัติ การสืบค้นข้อมูลข่าวสาร ตลอดจนการพัฒนาหุ่นยนต์ที่ชาญฉลาดในอนาคต ภาษาไทยถือเป็นภาษาหนึ่งในโลกที่ประมวลผลได้ยากมาก อันเนื่องมาจากปัญหาหลักคือ ไม่มีการเขียนแบ่งพยางค์ คำ หรือประโยค ไม่มีหลักเกณฑ์ตายตัวในการใช้ช่องว่างในภาษาเขียน การสะกดคำมีรูปแบบซับซ้อน และมีคำยืมจำนวนมาก ทำให้การแบ่งคำมีความกำกวมสูง ลองพิจารณาตัวอย่างต่อไปนี้แล้วทดลองแบ่งคำดูครับ

  • ภาพนกกรกนกบนพรมตรงถนนหน้าพระพรหมณ์
  • ปลามีตากลมถูกตากลมในที่ร่ม

การสร้างระบบแบ่งคำอัตโนมัติที่มีความถูกต้องสูงถือเป็นองค์ประกอบสำคัญอันดับแรกของการประมวลผลภาษาไทยซึ่งต้องอาศัยฐานข้อมูลขนาดใหญ่ที่ผ่านการแบ่งคำด้วยหลักทางภาษาศาสตร์ ในหลายปีที่ผ่านมาถึงแม้จะมีบทความที่นำเสนออัลกอริธึมในการแบ่งคำแล้วจำนวนมาก แต่เราก็ไม่สามารถทราบได้ว่าวิธีใดที่เหมาะสมที่สุดสำหรับระบบประยุกต์ที่แตกต่างกัน สาเหตุหลักเนื่องจากเราไม่มีฐานข้อมูลกลางขนาดใหญ่สำหรับวัดเปรียบเทียบคณะทำงานฯ ตระหนักถึงปัญหาดังกล่าว จึงได้ร่วมมือกับหลายหน่วยงานวิจัย ช่วยกันกำหนดหลักเกณฑ์การแบ่งคำโดยใช้เวลาหลายเดือนในการร่าง และได้พัฒนาฐานข้อมูลขนาดใหญ่ที่แบ่งคำด้วยหลักเกณฑ์ดังกล่าว โดยใช้คนมากกว่า 30 คน และเวลามากกว่า 1 ปี ได้เป็นฐานข้อมูลขนาดประมาณ 5 ล้านคำ พร้อมเปิดให้นักวิจัยและพัฒนาที่สนใจ นำไปใช้ได้โดยไม่มีค่าใช้จ่าย ตามเงื่อนไขเพื่อการศึกษาวิจัยที่ไม่มีวัตถุประสงค์ในเชิงพาณิชย์ และขอประชาสัมพันธ์ เชิญชวนอาจารย์สถาบันการศึกษา นิสิต นักศึกษาที่กำลังมองหาหัวข้อวิจัยที่เหมาะสม ตลอดจนนักวิจัยและพัฒนาจากภาคเอกชน บุคคลทั่วไปที่สนใจ เข้าร่วมการแข่งขันวัดเปรียบเทียบสมรรถนะของการแบ่งคำภาษาไทย ซึ่งเราจัดเป็นหัวข้อแข่งขันพิเศษในการแข่งขันพัฒนาโปรแกรมคอมพิวเตอร์แห่งประเทศไทย ครั้งที่ 11 หรือ NSC 2009 (http://www.nsc.in.th)

ผู้ที่สนใจ ขอเชิญแวะไปเยี่ยมชมเราได้ที่ http://www.hlt.nectec.or.th/best

HyBRiD's picture

เปลี่ยนไปใช้ภาษาอังกฤษกัน !


NERD GOD
KavkaZ's picture

อ่านว่า ภาพ นก-กร-กนก หรือว่า ภาพ-นก-กรก-นก ครับ

pawinpawin's picture

555 ขนาดคนยังแบ่งไม่เป็นเลย

kohsija's picture

เคยเขียนโปรแกรมตัดคำไทยส่งอาจารย์ตอนมหาวิทยาลัย
แต่ทำงานช้ามาก ส่งไปก็อายเขา -_-“


Kohsija

jiramot's picture

เขียนยังไงหรอคับ ส่งๆไปเหอะผมว่า ผมเองยังคิดไม่ออกเลย

เท่าที่คิดได้ คือ เก็บคำลง database ให้หมด ซึ่งยากมากมาย แล้วก็ อ่านที่ละ char เอา char 1 ตัวไปหาในดาต้าเบส เช่นว่า ‘ก’ ดูว่าในดาต้าเบส มีคำที่ขึ้นว่า ‘ก’ กี่ตัว แล้วก็เอาไปเทียบ ตัวที่ 2 ต่อไปเรื่อยๆ

คิดเล่นๆ ได้แค่นี้อ่ะคับ แต่คิดว่า มัน - -* น่าจะนานกว่าของคุณอีกน่ะ

คงต้อง optimize loop กับ การคิวรี ดาต้าเบส ดีๆ ถ้าจะใช้ วิธีนี้

^^


Jonix's picture

เว็บที่รับสมัครยังไม่เปิดหรือครับ www.nsc.in.th

whois nsc.in.th -h whois.thnic.net

Whois Server Version 1.5

% No entries found for the selected source(s).

noyzilla's picture

ผมว่ายังไม่จดโดเมนมากกว่า

Noyzi!!a’s Blog

willwill's picture

nectec.or.th/nsc

DuRiAn's picture

สงสัยว่าจะใช้อัลกอริทั่มอะไรในการคิด เพราะแม้แต่คนยังแยกไม่ถูกเลย…เหอๆ

lawender's picture

ที่คนคิดแล้วแยกไม่ถูกก็เำพราะคนคนนั้นมีความรู้ (knowledge) จำกัดครับ ที่เรามีความรู้จำกัดก็เหมือนว่าข้อมูลของคำที่เรารู้จักในสมอง (database) มีไม่พอ

แต่หากเรารู้จักคำมากพอแล้ว สิ่งที่จะบอกว่าตัดคำถูกได้อย่างไรก็คืออัลกอริทึ่มในการตัดนั่นล่ะครับ ถ้าเทียบเป็นคนก็คือความฉลาดนั่นล่ะครับ

อย่างผมเองก็ตัดคำในตัวอย่างแรกไม่ถูกหรอกครับ เพราะผมไม่รู้จักคำที่ให้มา แต่ “ปลา ตา กลม” เอามา “ตาก ลม” นั้น เราตัดคำได้ถูกเพราะเรารู้จักทั้ง 2 คำคือ ตา กลม และ ตาก ลม แุถมเรารู้บริบทของคำคำนั้นในประโยค

ครับผม

jiramot's picture

อืมม พึ่งอ่าน reply นี้

งั้นวิธีผม ก็ท่าจะไม่ ได้ซะแล้ว

เพราะถ้าใน ดาต้าเบส มีทั้งคำว่า ตา, ตาก, กลม, ลม เนี่ย ก็จะเจอทั้งหมด

ต้องมี priority อีก แต่ทำไงว่ะเนี่ยยยย

ใครมีไอเดียร์ไรดีๆ แนะนำบ้างคับ


sugree's picture

ต้องมีชนิดคำ ต้องรู้จักรูปประโยค

fake-or-dead's picture

ยากสุดก็ตรงนี้ละครับ

p-joy's picture

ตอนนั้นเคยเขียน โดยใช้หลักคำสมบูรณ์ที่ยาวที่สุดมาก่อน กล่าวคือในฐานข้อมูล จะต้องมีทั้งคำว่า ตา, ตาก, กลม, ลม, ตากลม เก็บไว้ในฐานข้อมูลถ้าเจอคำยาวกว่า ก็คงคำยาวนั้นไว้ (ให้คะแนนสูงสุด และให้รูปแบบที่อื่น ๆ มีคะแนนลดหลั่นลงไป) เก็บคำที่เป็นไปได้ไว้ในดีเบต 3 plus และใช้้ bisection ในการค้นหาคำ แต่นั้นมัน สิบห้าปีที่แล้ว

latesleeper's picture

ตามรูปประโยคที่ให้มายังง่าย มี “มี” และ “ถูก” มาช่วยแยกประเภท
ถ้างั้น อัลกอริทึมของผมอาจจะวิ่งกลับไปเช็คคำที่เกี่ยวข้องด้านหน้า (และ/หรือหลัง)
มาพอช่วยแบ่ง ตา และ ตาก ออกจากกันได้

แต่…ถ้าทอนประโยคให้สั้นลงอีกหน่อยล่ะ กลายเป็น
ปลาตากลมตากลมในที่ร่ม…

งานนี้ก็ตัวใครตัวมันละคับพี่น้องงง

นายขโมย's picture

-____-“”

crucifier's picture

ไม่ว่าจะอ่านยังไงก็มีความหมายที่ถูกต้องด้วยกันทั้งคู่

joecole's picture

ขออนุญาตแสดงความเห็น ผมว่าตัวอย่างที่ยกมามัน extreme เกินไป หมายความว่า ในภาษาที่เราใช้สื่อสารกันอยู่ จะตกในกรณีอย่างนี้น้อยมาก (หมายถึงการแยกคำได้ 2 แบบโดยที่ยังมี “ความหมาย” ทั้งสองแบบ) เท่าที่ผมนึกออก ก็มีแค่ “ตา” “กลม” & “ตาก” “ลม” แล้วก็ “แบ” “บน” “อก” & “แบบ” “นอก” ดังนั้น ถ้าจะออกแบบ algorithm สำหรับ case แบบนี้โดยเฉพาะ ผมว่ามันขี่ช้างจับตั๊กแตนเกินไปครับ (หรือถ้าใครจะทำ ช่วยเอาคำนี้ไปพิจารณาด้วย “รรรรรร” - อ่านได้ว่า ระ-รัน-รอน หรือ รอน-ระ-รัน หรือ ฯลฯ … เห็นบอกเป็นชื่อคน)

mk's picture

เพราะมันยากเค้าถึงจัดแข่งไงครับ

lew's picture

กรณีธรรมดาก็มี Algorithm ใช้งานกันอยู่แล้วนี่ครับ ก็ไม่น่าแปลกอะไรถ้าตอนนี้จะพยายามหากรณีพิเศษเพื่อให้มันดีขึ้นเรื่อยๆ


LewCPE

thep's picture

กรณี extreme แบบนี้ ไม่พบบ่อยในชีวิตประจำวันก็จริง แต่พอพบแล้ว ผู้ใช้จะสะดุดทันที.. คือในส่วนที่ตัดถูกนั้น ผู้ใช้ไม่มานั่งชื่นชมว่าตัดเก่งจัง จนกระทั่งเจอจุดที่ตัดบรรทัดผิดนั่นแหละ ถึงเริ่มรู้สึกถึงการมีอยู่ของรูทีนตัดคำ

คนอ่านหนังสือพิมพ์บ่อยจะเจอหลายตัวอย่างครับ ผมเคยจดไว้ได้เป็นหน้า ตอนนี้นึกออกไม่กี่ตัวอย่าง เช่น “ผู้ที่หนุ่มสาวกว่า” (ผู้ที่หนุ่มสาวก-ว่า), “การกลับมา” (การก-ลับมา), “ยานอกแพง ๆ” (ยาน-อกแพง ๆ)

อีกกรณีหนึ่งคือเวลาเจอคำทับศัพท์ใหม่ ๆ หรือชื่อคน/ชื่อเมืองต่างประเทศ โปรแกรมจะงง เพราะไม่มีในพจนานุกรม เช่น “ไอพอดกลับมาฮิต” (ไอ-พอ-ดก-ลับ-มา-ฮิต), “สตานิสลาฟ คันนิซซาโร” (ชื่อนักวิทยาศาสตร์ชาวอิตาลี) หรือแม้กระทั่งคำไทยเองที่เกิดใหม่ เช่น “อมาตยาธิปไตย” ซึ่งกรณีนี้ การปรับข้อมูลพจนานุกรมให้ทันสมัยอยู่เสมอก็พอช่วยได้ แต่การสะกดชื่อเฉพาะที่ไม่ค่อยเหมือนกัน เช่น “ริชาร์ด ไฟยน์แมน” หรือ “ริชาร์ด เฟย์นแมน”, “อัลเบิร์ต” หรือ “แอลเบิร์ต” ฯลฯ หรือชื่อที่พบไม่บ่อย ก็ทำให้ยุ่งยากเพิ่มขึ้น

แล้วก็ ปัญหาที่เกิดใหม่ล่าสุด คือภาษาวัยรุ่นในอินเทอร์เน็ต อันนี้ตัดยากมากครับ

ch-a-m-p's picture

อันหลังสุดนี่ ตัดทิ้ง ไปเลย?

czynet's picture

โืทดคับ opera ค้าง

czynet's picture

ภาษาไทยผูกเข้ากับ ความคิด วัฒนธรรม สถานการณ์ เจตนา ฯลฯ

มันไม่ได้มีแค่เหตุผล ซึ่งถ้าเราจะตัดคำโดยใช้ algorithm (ซึ่งมีแต่ตรรกะ)

ผมก็ว่ายังไงก็ยากอยู่ดี

ตราบใดที่ ปัจจัยอื่นๆ ยังไม่มีกฏเกณฑ์ตายตัว

อีกทั้งภาษาก็ยังไม่ตาย

(ถ้าตัดปัจจัยอื่น ๆ แล้วเหลือแต่การใ้ช้เหตุผล)

มันก็พอจะง่ายละครับ

อีกประเด็นคือ (คนที่เขียนได้ เนี้ยะ ต้องเชียวชาญภาษาไทยมากๆ)

คนส่วนใหญ่ใช้ภาษาไทยเพราะความเคยชินจนลืมหลักภาษาไปหมด

โปรแกรมเมอร์ไม่ได้สอนภาษาไทย และคนสอนภาษาไทยก็ไม่ได้เป็นโปรแกรมเมอร์

เพราะถ้าเราแบ่งแยก ประเภทคำ และหน้าที่ของคำต่าง ๆได้แล้ว

เราก็พอจะรู้ว่า คำนี้ควรเป็นนามหรือกิริยาได้บ้าง (มันก็คงจะดูดีขึ้น)

อย่างน้อยก็รู้หละว่า เป็นคำขยายคำนาม ถ้าหลังนี้ไม่มีกิริยาตาม ก็ให้เป็นกิริยาซะ

ประมาณนั้น.. (หรือเปล่า)

ลองเล่นๆ นะครับ

จากคำว่า “ปลาตากลมตากลมในที่ร่ม”

ถ้าเราจับคำได้หมดแล้วจะเปงไปได้…

นาม + กริยา + กริยา + ขยาย F

นาม + ขยายนาม + ขยายนาม + ขยาย F

นาม + กริยา + ขยายนาม + ขยาย T/F

นาม + ขยายนาม + กริยา + ขยาย T

คำไทยมีเยอะมาก สรรพนาม คำคุณศัพท์ ฯลฯ ไรไม่รู้ ผมเชื่อว่าถ้าคนแยกได้ ผมว่ามันน่าจะ work นาา.. ลองคิดดูเล่นๆ นะครับ

ถ้าใครเขียนก็ลองคิดดูครับ ส่วนผมไม่มีเวลา = = งานที่มีอยู่จะแย่เอา = =

ปล. ทางที่ดีชวนคุณครูภาษาไทยมานั่งเขียนคงจะดีนะครับ ลองถามแกว่า ถ้าใช้หลักภาษาแล้วจะตัดคำได้มั้ย ?

0xffeeddaa's picture

คงจะไม่ได้ครับ
ผมติด 0 ยังไม่ได้แก้เลย =='

mk's picture

ภาษาไทยไม่ได้ใช้ตรรกะอย่างเดียว แต่เราใช้ภาษาไทยบนคอมพิวเตอร์ที่มีแต่ตรรกะเท่านั้น

ภาษาไทยอยู่ในตระกูล complex language มีภาษาอื่นที่ยากกว่าภาษาไทยอีกมากมาย เค้ายังทำกันได้เลยครับ

sugree's picture

ส่วนใหญ่เค้าก็ทำแบบที่ว่านะ มีอาจารย์ภาษาไทยมาคิด แล้วให้โปรแกรมเมอร์ไปเขียน

jiramot's picture

ผมว่า ต้องใช้พวก context ของคำเข้าไปด้วย ถ้าจำไม่ผิด จะแนวตามคอนเซ็ปของเวป 3.0 ป่าวคับ (ถ้าผิิดก็ขอโทษด้วย) ที่จะมีคำ หรือ อะไรที่เอาไว้อธิบาย ความหมายของ สิ่งต่างๆ ที่เขียนด้วย เพื่อ ไม่ให้เกิด การเอา คำมั่วๆๆๆ มาทำเป็น tag ให้ google search เจอ (ผมเคยเจอเวป ที่เป็นพวกโฆษณาสินค้า ที่แบบมีแต่ tag เป็นล้านอัน อยู่ใต้หน้า page)

น่าจะพอช่วยขยายความ ทำให้การอ่าน ใกล้เคียงกับคนขึ้น

เช่น เดินไปทะเลตากลม <— ก็จะอ่านได้ ว่า ตาก ลม เพราะประมาณว่า ทะเล กับ ตากลม มันมี อะไรเชื่อมกันอยู่

แต่ว่าทางเทคนิคนี้ผมก็ไม่ทราบเหมือนกันคับ

เด๋วจะลองไปหาบทความที่เคยอ่าน มาให้ ไม่แน่ใจว่ามีการทำ reference implementation กันจิงๆแล้วหรือยังคับ (^^ ถ้าผิดพลาดยังไงก็ขอโทษด้วยคับ หรือว่าใครทราบรายละเอียด ก็ลองหามาหน่อยน่ะคับ)


::Jiramot::

deaw's picture

word breaking ต่างจาก Word Segmentation ยังไง

anu's picture

ให้เดานะ

Word Segmentation การแบ่ง(หรือแยก)คำ มีในภาษาที่เขียนคำติดกัน ไม่มีเว้นวรรคระหว่างคำในประโยค

Word Breaking การตัดคำ น่าจะใช้สำหรับการขึ้นบรรทัดใหม่ หรือการขีดคั่น (-) ระหว่างคำในการขึ้นบรรทัดใหม่ในภาษาอังกฤษ ความซับซ้อนน่าจะน้อยกว่าอันบน

มั้ง…

Sand's picture

อยากไป

anu's picture

น่าจะใช้ชื่อโครงการเป็น “ตากลมๆ”

เอาให้ งวยงงงงงวย กันไปเลย

HyBRiD's picture

ผมกำลังสงสัยว่าภาษาไทยที่เราใช้กันทุกวันนี้มันมีประโยคด้วยหรอ

แล้วถ้าเจอภาษาวิบัติเข้าไป จะใช้ algorithm ไหนล่ะเนี่ย


NERD GOD
noyzilla's picture

เปลี่ยน วิธี เขียน ภาษาไทย แบบ นี้ ดี หรือ ป่าว

ภาพ นก (กรกนก <- แยกไม่ถูกครับ :( ) บน พรม ตรง ถนน หน้า พระ พรหมณ์

Noyzi!!a’s Blog

sdh's picture

สงสัยว่าเขาตัดคำกันก่อน แล้วค่อยตรวจการสะกดคำ เมื่อยังตัดคำที่ต้นประโยคไม่ได้ ตัว spelling checker ก็ยังไม่ทำงาน

“พระพรหม”

oakyman's picture

ใช้ Tools ได้ไหมครับ? อย่าง Swath หรือ Tools ที่ใช้ 2-gram, 3-gram พวกนี้ ผมว่าก็ถือว่าพอใช้ได้เหมือนกัน ภาษาไทย คงต้องอิงหลักสถิติด้วย มี Corpus ใหญ่ๆ ก็ดี


Oakyman.com
fatro's picture

เคราะวรรคถี่ขึ้น!

onenoi's picture

ใช้ Tools ช่วยได้ค่ะ มีให้ดาวน์โหลดที่ http://www.hlt.nectec.or.th/best/ หรือนอกเหนือจากนี้ก็ได้ถ้าเจ้าของอนุญาติให้ใช้ได้

msmart's picture

เอาเข้าแข่งใน google code jam ข้อคะแนนยากสุดได้เลยนะเนี่ย (ฮา)

—-
Khajochi Blog : It’s not a Bug … It’s a Feature

Site Search

 
Web blognone.com

Poll