ทะล ม ต ห กเหล ยมจอมมาร 3 download

วัน​ก่อน​ได้​เห็น​อักษรย่อชุดหนึ่ง​จากงานฟุตบอลประเพณีจุฬาฯธรรมศาสตร์ ที่ร้อนแรงจนโลกโซเชียลลุกเป็นไฟ

ภาพจาก มติชน

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

ธรรมชาติ​ของ​อักษรย่อ

โ​ด​ย​ป​กติแล้วอักษรย่อจะคัดตัวอักษรบางตัวในคำหรือชื่อเฉพาะยาวๆ มาใช้แทนคำนั้น เช่น ร.พ. (โรงพยาบาล), ครม. (คณะรัฐมนตรี) หรือ กสทช. (คณะกรรมการกิจการกระจายเสียง กิจการโทรทัศน์ และกิจการโทรคมนาคมแห่งชาติ)

แต่ในกรณีของโลกโซเชียล ส่วนใหญ่แล้วเราจะย่อกันทุกพยางค์​ของคำไปเลยเช่น พน (พรุ่งนี้), จขกท (เจ้าของกระทู้), คหสต (ความเห็น​ส่วนตัว)​, อสกข, ปสด, อห (ไปหาความหมายเอาเองนะครับ)

เนื่องจากวาทะนี้เริ่มต้นมาจากโลกโซเชียล ในโปร​เจ็กต์นี้​จึงยึดวิธีการย่อตามแต่ละพยางค์​เป็นหลัก ลองมาดูกันว่า ‘ผนงรจตกม’ นั้นย่อมาจากอะไรกันแน่

คลังของตัวย่อ

ขั้นตอนแรกเราจะหาก่อนว่าจากคำที่เรามีทั้งหมด เอามาย่อเป็นอะไรได้บ้าง อย่างที่เกริ่นไปก่อนหน้านี้ว่าเราจะย่อตามจำนวนพยางค์ เพราะฉะนั้นในแต่ละคำเราต้องตัดแบ่งพยางค์ออกมา หลังจากนั้น เราจะดึงพยัญชนะต้นของแต่ละพยางค์ให้ออกมาเป็นตัวย่อของคำนั้นๆ ยกตัวอย่างเช่น

ตัวอย่างการตัดแบ่งคำให้เป็นพยางค์ และดึงพยัญชนะต้นออกมาเป็นอักษรย่อ

คลังคำที่เลือกใช้ดึงมาจาก corpus ของ PyThaiNLP ซึ่งมีคำไทยที่พบบ่อยในชีวิตประจำวัน ชื่อประเทศทั่วโลก และชื่อจังหวัดต่างๆ ในประเทศไทย จากนั้นเราจะตัดคำออกเป็นพยางค์ด้วย CRF syllable segmenter for Thai แล้วดึงอักษรตัวแรกออกมา ในกรณีที่คำนั้นมีพยัญชนะต้นเป็นอักษรนำ เราจะตัดพยัญชนะ​แรกทิ้งไปเช่น

ตัวอย่างการหาอักษรย่อกรณีที่คำมีอักษรนำ

การตัดตัวอักษรนำนั้นซับซ้อนกว่าที่เห็น เพราะบางคำดูเหมือนเป็นอักษรนำ แต่ในบางบริบทก็ไม่ใช่อักษรนำ เช่น ‘แหน’ จะอ่านต่างกันในคำว่า จอกแหน กับหวงแหน หรือ ‘เหย’ ในคำว่า เหยเก กับ เหยแกร หรือ ‘แห่ง’ กับ ‘แหง่’ ที่ออกเสียงต่างกันตามตำแหน่งของวรรณยุกต์ ในโปรเจ็กต์นี้เราเขียนกฎเกณฑ์แบบง่ายๆ ขึ้นมาตัดอักษรนำเหล่านี้ ซึ่งจะไม่ถูกต้อง 100% เมื่อเจอกรณีที่นำเสนอให้ดู หากใครมีวิธีดีๆ สำหรับจัดการอักษรนำเหล่านี้ ยินดีรับข้อเสนอแนะครับ

เมื่อจบขั้นตอนนี้เราจะได้พจนานุกรมคำย่อของทุกคำที่เรามี หน้าตาประมาณนี้

ก → กก,กด,กรอก,กราฟ,กลิ้ง,กุด,... กก → กงการ,กดกริ่ง,กรรไกร,กลไก,... ข → ขด,ขบ,ข่วน,ขุด,เขิน,ไข่,... ขน → ขนนก,ขวดนม,ของนอก,ขาวนวล,... ...

เอาตัวย่อมาสับ

วิธีหาว่า ‘ผนงรจตกม’ ย่อมาจากอะไร แบบง่ายที่สุดคือการให้ตัวอักษรแต่ละตัวแทนหนึ่งคำไปเลย นั่นคือเราจะตัดแบ่ง ‘ผนงรจตกม’ เป็น ‘ผ|น|ง|ร|จ|ต|ก|ม’ แล้วเราก็ไปเปิดพจนานุกรมคำย่อที่เราหามาเมื่อครู่นี้ว่ามีคำอะไรที่เป็นไปได้บ้าง

แต่คำบางคำมีหลายพยางค์ ขอบเขตของคำจึงครอบคลุมมากกว่าหนึ่งตัวอักษร ยกตัวอย่างเช่นหากตัวย่อของเราคือ ‘กกต’ มันอาจจะประกอบขึ้นมาจาก สามคำ (ก|ก|ต) เช่น ‘เกร็ง|กลาง|ตัว’ สองคำและคำแรกมีสองพยางค์ (กก|ต) เช่น ‘กวัดแกว่ง|ตีน’ สองคำและคำแรกมีพยางค์เดียว(ก|กต) เช่น ‘กิน|ก๋วยเตี๋ยว​’ คำเดียว (กกต) เช่น กัลกัตตา (ชื่อเมืองในอินเดีย)

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

จะเห็นว่ามีวิธีตัดแบ่งอักษรย่อที่เป็นไปได้มากมาย สำหรับอักษรย่อ n ตัว จะมีวิธีตัดแบ่งอักษรย่อที่เป็นไปได้ทั้งหมด 2 ⁿ ⁻ ¹ แบบ แต่การตัดที่ใช้ได้ เราต้องได้อักษรย่อที่ปรากฏในพจนานุกรมคำย่อของเราด้วย เช่นหากเราตัดออกมาเป็น ผน|ง|รจตกม เมื่อเปิดพจนานุกรมคำย่อของเราดู เราอาจพบคำย่อของ ‘ผน’ หรือ ‘ง’ แต่เราจะไม่พบคำเดี่ยวๆ ที่ย่อว่า ‘รจตกม’ เลย เพราะฉะนั้นผลของการตัดบางกรณีจะถูกคัดออกไป

ยกตัวอย่างเช่น การตัด ‘ผนงรจตกม’ ได้ผลลัพธ์ที่ใช้ได้เพียง 54 แบบ จากผลลัพธ์ที่เป็นไปได้ทั้งหมด 128 แบบดังนี้

ผลลัพธ์การตัด ‘ผนงรจตกม’ 54 รูปแบบที่ทุกอักษรย่อปรากฏอยู่ในพจนานุกรม

หลังจากตัดแบ่งตัวย่อเรียบร้อย เราจะเอาคำมาใส่ลงไปในตัวย่อ แต่ปัญหาคือ มีคำที่เป็นไปได้เต็มไปหมด เราจะมีหลักการเลือกคำที่เหมาะสมอย่างไรดี?

สถิติของคำที่ติดกัน

วิธีการหนึ่งคือพิจารณาคำที่อยู่ติดกันเป็นคู่ เรียกว่า bigram เราจะสั่งให้คอมพิวเตอร์ไปอ่านบทความ นิยาย ข่าว จากหนังสือหรือเว็บไซต์จำนวนมาก แล้วลองหาว่าคำคู่ใดที่มักปรากฏติดกันบ่อยๆ สมมติว่าเราให้คอมพิวเตอร์อ่านประโยคไปทั้งหมด 5 ประโยคได้แก่

เราจะสั่งให้คอมพิวเตอร์แยกคำออกมาทีละคู่ และนับว่าเกิดขึ้นทั้งหมดกี่ครั้ง (กำหนดให้ <s/> แทนการขึ้นต้นหรือจบประโยค)

c(<s/>,ข้า) = 4 แปลว่าพบคำว่า ข้า ขึ้นต้นประโยค 4 ครั้ง c(ชอบ,เจ้า) = 2 แปลว่าพบคำว่า เจ้า ต่อจากคำว่า ชอบ 2 ครั้ง c(เจ้า,<s/>) = 2 แปลว่าพบคำว่า เจ้า ลงท้ายประโยค 2 ครั้ง

ข้อมูลพวกนี้บอกอะไรเรา?

มันบอกกับเราว่า ถ้าเรารู้คำก่อนหน้าว่าคืออะไร คำถัดไปจะมีโอกาสเป็นอะไรได้บ้าง เช่นถ้าเรารู้ว่าคำแรกเป็นคำว่า ‘ข้า’ คำถัดไปที่เป็นไปได้มีดังนี้

คำที่อยู่ต่อจาก ‘ข้า’ แสดงตามความถี่ (ซ้าย) และแสดงตามความน่าจะเป็น (ขวา)

จากเอกสารที่เราอ่านมา มีคำว่า ‘ข้า’ ปรากฏอยู่ 4 ครั้ง จะมีคำว่า ‘ไม่’ ตามมา 2 ครั้ง คิดเป็นโอกาส P(ข้า →ไม่) = 2/4 = 50% จะมีคำว่า ‘ชอบ’ ตามมา 1 ครั้ง คิดเป็นโอกาส P(ข้า →ชอบ) =1/4 = 25% จะมีคำว่า ‘เกลียด’ ตามมา 1 ครั้ง คิดเป็นโอกาส P(ข้า →เกลียด) = 1/4 = 25%

เราจะสรุปได้ว่า ถ้าคำแรกเป็น ‘ข้า’ คำถัดไปที่เป็นไปได้มากที่สุดคือ ‘ไม่’

เราสามารถสรุปวิธีการคำนวณความน่าจะเป็นที่คำหนึ่งจะอยู่ต่อจากอีกคำหนึ่งได้ว่า

P(word1→word2) = count(word1,word2)/count(word1)

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

P(เราชอบเจ้า) = P(<s/> → เรา)×P(เรา → ชอบ)×P(ชอบ → เจ้า)×P(เจ้า → <s/>) P(เราชอบทราย) = P(<s/> → เรา)×P(เรา→ ชอบ)×P(ชอบ → ทราย)×P(ทราย → <s/>)

จาก bigram ที่กำหนดให้ด้านบน เราคำนวณออกมาแล้วพบว่า

P(เราชอบเจ้า) = 0.1 P(เราชอบทราย) = 0.05

ดังนั้นประโยค ‘เราชอบเจ้า’ เป็นประโยคที่น่าจะเกิดขึ้นมากกว่า ‘เราชอบทราย’

การพิจารณาคำที่ติดกันสองตัวในลักษณะนี้ รู้จักกันทั่วไปในชื่อ bigram เราอาจพิจารณาคำที่อยู่ติดกันที่ยาวกว่านี้ได้เช่นดูคำที่ติดกัน 3 ตัว (trigram) หรือ 4 ตัว (4-gram) ไปจนถึง n ตัว (n-gram)

สัญลักษณ์ที่ใช้ในบล็อกนี้ อาจไม่ได้ตรงกับที่ใช้ในตำราเรียนหรืองานวิจัยเป๊ะๆ แต่เขียนให้เข้าใจง่าย ในโอกาสหน้าเราจะแวะกลับมาลงรายละเอียดเรื่อง n-gram อีกครั้งครับ

bigram ที่ใช้ในโปรเจ็กต์นี้นำมาจาก คลังข้อมูลภาษาไทยแห่งชาติ (Thai National Corpus) ซึ่งนับ bigram จากบทความวิชาการ นิยาย เรื่องสั้น ข่าว ฯลฯ มีคำที่ไม่ซ้ำกันมากกว่า 50,000 คำ และ bigram มากกว่า 1 ล้านคู่ ซึ่งขอคัดออกมาให้ดูเป็นตัวอย่าง 10 คู่ ดังนี้

... ความ เคารพ 799 เซนติเมตร <s/> 798 เป็น ได้ 798 ด้าน เศรษฐกิจ 798 ตื่น ขึ้น 798 วัน รุ่ง 798 มี แรง 797 ไม่ ปรากฏ 797 ทำให้ เป็น 797 <s/> คำถาม 797 ...

ผนงรจตกม?

กลับมาที่ตัวย่อของเรากันต่อ สำหรับการตัดแบ่งอักษรย่อแต่ละแบบ เราสามารถใส่คำต่างๆที่ปรากฏในพจนานุกรมอักษรย่อลงไป โดยเอาแต่ละคำที่เป็นไปได้มาเรียงต่อกันจนจบ จากนั้นเราก็ใช้ bigram คำนวณหาความน่าจะเป็นของลำดับคำแต่ละชุดออกมา ผลลัพธ์สุดท้ายที่เราต้องการคือลำดับคำที่ให้ค่าความน่าจะเป็นสูงที่สุด

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

เราจะแก้ปัญหานี้โดยใช้ Viterbi algorithm ซึ่งใช้แนวคิด dynamic programming มาคำนวณหาลำดับคำที่ความน่าจะเป็นสูงสุด จากจำนวนลูป 36 ล้านล้านล้านรอบ จะลดเหลือแค่ประมาณ 6 แสนกว่ารอบเท่านั้น แนวคิดคร่าวๆ คือมองปัญหานี้เป็นกราฟ โดยให้ node แทนแต่ละคำ มีเส้นเชื่อมแทนความน่าจะเป็นจาก bigram แล้วหาเส้นทางที่ยาวที่สุด (longest path) จากอักษรย่อตัวแรกถึงอักษรย่อตัวสุดท้าย เราก็จะได้ลำดับคำที่ความน่าจะเป็นสูงสุดออกมา

การแปลงปัญหาให้เป็นกราฟ โดยให้คำแทน node และมีเส้นเชื่อมจากคำก่อนหน้าไปยังคำถัดไป โดยมีน้ำหนักเท่ากับ P(คำก่อนหน้า→คำถัดไป) ลำดับคำที่ความน่าจะเป็นสูงสุดคือเส้นทางยาวที่สุดที่เชื่อมจากจุดเริ่มต้นไปยังจุดสุดท้าย

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

หวึ่ง กว่าที่คิด! นี่มันลางบอกเหตุอะไรรึเปล่า หรือนิสิตกลุ่มนั้นพยายามจะส่งสัญญาณเตือนอะไรพวกเรารึเปล่านะ (ความน่าจะเป็นจะคำนวณโดยใช้ logarithm ผลที่ได้เลยออกมาเป็นเลขยกกำลังของ e ยิ่งเลขชี้กำลังเข้าใกล้ 0 ความน่าจะเป็นยิ่งสูง)

การตัดแบ่งตัวย่อไม่ได้มีแบบเดียว ‘ผนงรจตกม’ สามารถตัดแบ่งออกมาได้ถึง 54 วิธี เพราะฉะนั้นเราจะได้ผลลัพธ์ออกมา 54 รูปแบบ แต่ขอคัดมาให้ดูเฉพาะอันที่ความน่าจะเป็นสูงสุด 5 อันดับแรกเท่านั้น

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

นอกจากนี้เรายังสามารถบังคับคำขึ้นต้นได้ด้วย เช่นหากกำหนดให้คำแรก = ‘ผัว’

จะเห็นว่าพอมีคำว่าผัว นอกจากจะพูดถึงเรื่องกฎหมายแล้ว จะเริ่มมีคำว่า ‘นาง’ และ ‘เงือก’ ปรากฏขึ้นมา และทำให้เรื่องราวเปลี่ยนไปอีกทาง แต่ก็ยังอ่านไม่ค่อยรู้เรื่องอยู่ดีนั่นแหละ

มาดูตัวย่อสั้นๆ ดีกว่า

ถ้าตัวย่อยาวๆ อ่านไม่รู้เรื่อง มาดูตัวย่อสั้นๆ กันบ้างขอเริ่มจากคำที่รู้จักกันดีอยู่แล้วได้แก่

ซึ่งถือว่าทำได้ไม่เลว แต่ปัญหาของการนำเสนอในลักษณะนี้คือ เราแสดงผลลัพธ์ที่ดีที่สุดของการตัดคำแต่ละแบบเท่านั้น ทั้งๆที่ในการตัดคำแต่ละแบบอาจมีผลลัพธ์ที่ดีซ่อนอยู่อีกมากมาย เช่น กรณีของ ‘จขกท’

ถ้าเราคัดเฉพาะผลลัพธ์ที่ดีที่สุดของ ‘จข|กท’ เราจะได้คำว่า ‘เจ้าของกระท่อม’ แต่ถ้าเราสั่งให้หาผลลัพธ์ที่ดีที่สุด 3 อันดับแรกของ ‘จข|กท’ เราจะได้คำว่า ‘เจ้าของกระทู้’ และ ‘เจ้าของกองทุน’ เพิ่มมา ซึ่งให้ค่าความน่าจะเป็นสูงกว่า ‘จะเข้ากองทุน’ ด้วยซ้ำไป ดังนั้นแทนที่เราจะรัน Viterbi algorithm ให้หาเส้นทางที่ยาวที่สุดเพียงเส้นทางเดียว เราสามารถสั่งให้มันจดจำเส้นทางที่ดีที่สุด k อันดับแรกได้ด้วย เราเรียกวิธีการนี้ว่า Top-k Viterbi algorithm ซึ่งจะทำให้เห็นตัวเลือกที่หลากหลายมากขึ้น สำหรับการตัดคำแต่ละแบบ

ผลลัพธ์จะดีกว่านี้ถ้า…

  • ใช้ n-gram ที่ยาวขึ้น เช่น trigram หรือ 4-gram ก็จะช่วยให้อ่านรู้เรื่องในลำดับคำที่ยาวขึ้น แต่ทางที่ดีควรจะเพิ่มข้อถัดไปคือ
  • ใช้ n-gram ของชนิดคำ (Part of Speech: PoS) มาคิดด้วย แทนที่จะนับว่าคำอะไรติดกับคำอะไร เราจะนับว่าคำนามจะติดกับคำนามกี่ครั้ง ติดกับคำกริยากี่ครั้ง และคำนวณความน่าจะเป็นออกมา ในลำดับคำหนึ่งเราอาจหาก่อนว่าตัวย่อแต่ละตัวควรจะมีหน้าที่เป็นคำนาม คำกริยา คำวิเศษณ์ ฯลฯ แล้วค่อยหาคำที่เหมาะสมมาใส่ลงไป การคำนึงถึง PoS จะช่วยให้ประโยคของเรา ร้อยเรียงออกมาเป็นเรื่องราวได้ดีกว่านี้
  • ตัดพยางค์แม่นยำกว่านี้ เท่าที่ลองใช้มา ตัวตัดพยางค์ยังไม่สามารถตัดพยางค์ที่เป็นสระอะกึ่งเสียงบางกรณี ทำให้พจนานุกรมคำย่อของเราคลาดเคลื่อนไป เช่น

พยายาม → พยา|ยาม แทนที่จะเป็น พะ|ยา|ยาม จินตนาการ → จิน|ตนา|การ แทนที่จะเป็น จิน|ตะ|นา|การ สวัสดี → สวัส|ดี แทนที่จะเป็น สะ|วัส|ดี แสดง → แสดง แทนที่จะเป็น สะ|แดง

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

ข้อควรระวัง

  • Underflow เกิดจากการคูณตัวเลขน้อยๆ ต่อกันหลายๆครั้ง จนน้อยกว่าค่าต่ำสุดที่เป็นไปได้ของตัวแปร ซึ่งสามารถเกิดขึ้นได้เวลาคำนวณหาความน่าจะเป็นของประโยคยาวๆ แทนที่เราจะคูณความน่าจะเป็นต่อไปเรื่อยๆ เราจะใช้ log ของความน่าจะเป็นแทน วิธีการนี้ทำให้เราเปลี่ยนวิธีคำนวณจากการคูณเป็นการบวกซึ่งคอมพิวเตอร์ทำได้รวดเร็วกว่า และป้องกันปัญหา underflow ไปในตัวด้วย
  • Out-of-vocabulary (OOV) คือคำที่ไม่เคยอยู่ใน bigram ของเรามาก่อน เช่นวันดีคืนดีประเทศไทยก็มีจังหวัด ‘บึงกาฬ’ งอกขึ้นมาใหม่ ถ้าเราคำนวณความน่าจะเป็นที่จะพบคำนี้ต่อจากคำใดๆ ก็แล้วแต่จะได้ออกมาเป็น 0 เพราะคอมพิวเตอร์ไม่เคยเห็นคำนี้มาก่อนเลย แต่เราก็ไม่ควรตัดคำนี้ทิ้งไปดื้อๆ เพราะถือว่ามีฐานะเทียบเท่าจังหวัดหนึ่ง ซึ่งอาจไปเชื่อมกับคำอื่นๆ แล้วมีความหมายขึ้นมาก็ได้ วิธีรับมือกับ OOV ในโปรเจ็กต์นี้ขอเลือกวิธีที่ง่ายที่สุด คือให้ความน่าจะเป็นที่จะพบคำนี้ต่อจากคำอื่นๆ = 1/จำนวนคำที่เรามีทั้งหมด

เอาไปใช้ทำอะไรได้บ้าง

ไม่แน่ใจว่าภาษาไทยเคยมีงานลักษณะนี้ออกมาหรือไม่ แต่มีงานวิจัยจำนวนมากเกิดขึ้นในภาษาอังกฤษดังที่สรุปไว้ใน survey นี้ งานวิจัยเหล่านี้ต้องการถอดอักษรย่อเพื่อลดความกำกวมในเอกสารทางการแพทย์ หรือคู่มือเฉพาะทางที่อักษรย่อยุบยับ ทำให้อ่านง่ายขึ้น หรือทำให้คอมพิวเตอร์เข้าใจอักษรย่อได้ดีขึ้น แล้วเอาไปต่อยอดสำหรับงานประมวลผลทางภาษาด้านอื่นๆ ต่อไป

ขอ​ขอบคุณ

โปรเจ็กต์นี้คงสำเร็จไม่ได้ในเวลาอันสั้นหากขาดตัวตัดพยางค์ CRF syllable segmenter for Thai คลังคำภาษาไทยจาก PyThaiNLP และ bigram จาก คลังข้อมูลภาษาไทยแห่งชาติ (Thai National Corpus จึงขอขอบคุณผู้มีส่วนเกี่ยวข้องในโครงการดังกล่าวมา ณ ที่นี้ครับ