Tags:
Node Thumbnail

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

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

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

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

Get latest news from Blognone

Comments

By: HyBRiD
ContributoriPhoneSymbianUbuntu
on 25 July 2008 - 15:58 #59599
HyBRiD's picture

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

NERD GOD

By: KavkaZ
ContributorAndroidUbuntuWindows
on 25 July 2008 - 16:54 #59601
KavkaZ's picture

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


ลายเซ็นยาวเกินไปครับ

By: pawinpawin
Writer
on 25 July 2008 - 17:10 #59603 Reply to:59601

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

By: kohsija
AndroidUbuntuWindowsIn Love
on 25 July 2008 - 18:57 #59611
kohsija's picture

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

Kohsija

By: jiramot
Android
on 25 July 2008 - 20:10 #59627 Reply to:59611

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

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

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

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

^^

By: Jonix
iPhoneAndroidUbuntu
on 25 July 2008 - 19:00 #59612
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).

By: noyzilla
Android
on 28 July 2008 - 05:47 #59798 Reply to:59612

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

Noyzi!!a's Blog

By: willwill
ContributorAndroid
on 29 July 2008 - 12:02 #59859 Reply to:59798
willwill's picture

nectec.or.th/nsc

By: DuRiAn on 25 July 2008 - 19:06 #59616

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

By: lawender
ContributoriPhoneAndroidWindows
on 25 July 2008 - 19:56 #59625 Reply to:59616

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

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

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

ครับผม

By: jiramot
Android
on 25 July 2008 - 20:15 #59631 Reply to:59625

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

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

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

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

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

By: sugree
FounderWriterAndroidBlackberry
on 25 July 2008 - 20:52 #59634 Reply to:59631

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

By: fake-or-dead
In Love
on 26 July 2008 - 02:14 #59655 Reply to:59634

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

By: p-joy on 25 July 2008 - 21:55 #59641 Reply to:59631

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

By: latesleeper
Android
on 26 July 2008 - 01:25 #59652 Reply to:59631

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

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

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

By: นายขโมย on 26 July 2008 - 02:43 #59656 Reply to:59652

-____-""

By: crucifier
iPhoneAndroidUbuntu
on 27 July 2008 - 01:14 #59729 Reply to:59652

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

By: joecole on 26 July 2008 - 03:33 #59657

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

By: mk
FounderAndroid
on 26 July 2008 - 03:39 #59659 Reply to:59657
mk's picture

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

By: lew
FounderJusci's WriterMEconomicsAndroid
on 26 July 2008 - 09:08 #59664 Reply to:59657
lew's picture

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

LewCPE


lewcpe.com, @wasonliw

By: thep
Writer
on 28 July 2008 - 10:06 #59801 Reply to:59657

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

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

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

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

By: ch-a-m-p on 30 July 2008 - 01:33 #59922 Reply to:59801

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

By: czynet
iPhoneRed HatUbuntu
on 26 July 2008 - 09:52 #59666

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

By: czynet
iPhoneRed HatUbuntu
on 26 July 2008 - 10:29 #59669

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

By: 0xffeeddaa on 26 July 2008 - 14:47 #59689 Reply to:59669

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

By: mk
FounderAndroid
on 26 July 2008 - 15:18 #59690 Reply to:59669
mk's picture

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

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

By: sugree
FounderWriterAndroidBlackberry
on 26 July 2008 - 22:25 #59721 Reply to:59669

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

By: jiramot
Android
on 28 July 2008 - 11:31 #59808 Reply to:59669

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

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

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

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

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

::Jiramot::

By: deaw on 26 July 2008 - 17:45 #59699
deaw's picture

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

By: anu
Contributor
on 27 July 2008 - 18:34 #59768 Reply to:59699

ให้เดานะ

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

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

มั้ง...

By: Sand
AndroidUbuntu
on 26 July 2008 - 18:32 #59703

อยากไป

By: anu
Contributor
on 27 July 2008 - 18:35 #59769

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

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

By: HyBRiD
ContributoriPhoneSymbianUbuntu
on 28 July 2008 - 00:15 #59791
HyBRiD's picture

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

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

NERD GOD

By: noyzilla
Android
on 28 July 2008 - 05:44 #59797

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

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

Noyzi!!a's Blog

By: sdh on 28 July 2008 - 08:58 #59799

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

"พระพรหม"

By: oakyman
ContributorAndroid
on 29 July 2008 - 16:14 #59886

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

Oakyman.com

By: fatro
ContributoriPhoneAndroid
on 30 July 2008 - 03:27 #59928
fatro's picture

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

By: onenoi on 30 July 2008 - 12:28 #59966

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

By: khajochi
WriteriPhoneIn Love
on 1 August 2008 - 12:11 #60210
khajochi's picture

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

---
Khajochi Blog : It's not a Bug ... It's a Feature


แฟนพันธุ์แท้สตีฟจ็อบส์ | MacThai.com