มาลองใช้ RNN แต่งเป็นกลอน (ตอนที่ 2)

ppp mena
mena.ai
Published in
2 min readJul 23, 2018

Language Model

แบบจำลองภาษา (language model) ในที่นี้ คือ probabilistic model ที่รับเป็น sequence เข้ามา แล้วดูว่ามีความน่าจะเป็นที่ sequence นี้จะอยู่ในภาษาที่แบบจำลองเรียนรู้มามากน้อยแค่ไหน หรืออาจเขียนได้ว่าแบบจำลองภาษาจะให้ค่าของ

ออกมา เมื่อ u คือหน่วยทางภาษาที่เราสนใจ ซึ่งโดยส่วนใหญ่อยู่ในระดับคำ แต่ที่จะใช้ในบทความนี้จะเป็นระดับอักขระครับ

ถ้าเรามองว่า u เข้ามาเรียงกัน โดยตัวที่ 1 เข้ามาก่อน ต่อด้วยตัวที่ 2 ไปจนจบตัวที่ T จากค่า P ข้างต้น เมื่อใช้ product rule ของ probability จะได้ว่าค่านี้เท่ากับ ความน่าจะเป็นในการเกิด u ตัวที่ 1 คูณด้วยความน่าจะเป็นในการเกิด u ตัวที่ 2 เมื่อก่อนหน้านี้คือ u ตัวที่ 1 แล้วคูณไปเรื่อยๆ ด้วยความน่าจะเป็นในการเกิด u ตัวต่อไป เมื่อเกิด u ตัวก่อนๆ หน้าขึ้นมาแล้ว ซึ่งจะเขียนเป็นสมการได้ว่า

แทบทุกงานทางด้าน machine learning ที่มีภาษาเข้ามาเกี่ยวข้อง แบบจำลองภาษาจะเข้ามาช่วยได้ ไม่ว่าจะเป็นงานเช่น machine translation เรื่อยไปจนถึง speech recognition และ OCR โดยในสมัยก่อนงานเหล่านี้จะมีหลาย module ประกอบกัน และส่วนใหญ่แบบจำลองภาษาจะถูกปลั๊กเข้าไปข้างหลัง เป็น module ตัวสุดท้ายเพื่อแก้ไขผลลัพธ์ที่ออกมาให้มีความถูกต้องมากยิ่งขึ้น แต่ในปัจจุบันงานเหล่านี้จะใช้ deep learning ที่เป็น end-to-end ซึ่งแบบจำลองภาษาจะถูกเรียนรู้ขึ้นมาเสร็จสรรพโดยอัตโนมัติใน neural network ขนาดใหญ่นี้เลย และนอกจากจะนำไปใช้ช่วยเหลือในงานอื่นแล้ว แบบจำลองภาษาด้วยตัวของมันเองก็อาจเอามาใช้ผลิต sequence ออกมาเล่นๆ เหมือนอย่างในบทความนี้ก็ได้ครับ

Statistical Language Model

การสร้างแบบจำลองภาษาแบบดั้งเดิม จะใช้วิธีการทางสถิติ นั่นคือค่า P ของ sequence ต่างๆ จะคำนวณมาจากการนับคำที่ปรากฏอยู่ใน corpus โดยตรง ค่า P ข้างต้นมักประมาณโดยใช้ข้อมูลแค่ n ตัว หรือที่เรียกว่า n-gram ดังนี้

ถึงแม้ n จะมีค่าไม่มากแล้ว แต่ sequence ของ n-gram ที่มีโอกาสเกิดขึ้นได้ในภาษาจริงนั้นก็มีมากมายเกินกว่าที่จะอยู่ใน corpus ใดๆ การให้ค่า count เป็น 0 สนิทเลยจึงไม่ใช่เรื่องที่ดี ทำให้ต้องมีเทคนิคเช่น smoothing หรือ back-off เข้ามาช่วยด้วยครับ

Neural Language Model

ในปี ค.ศ. 2003 Bengio et al. ได้นำ feedforward neural network มาใช้สร้างแบบจำลองภาษา เปเปอร์นี้มีเรื่อง word embedding มาก่อน word2vec และมาก่อนการใช้ RNN สำหรับ neural language model นับสิบปี ต่อมา Sutskever et al. และ Graves ได้ใช้ RNN และ LSTM สำหรับสร้างแบบจำลองภาษา ซึ่งเป็นรากฐานก่อนที่จะมาถึง Karpathy นี่เองครับ

ใน neural language model นี้ ค่า P จะออกมาจาก softmax นั่นคือ

เมื่อ V เป็นเซ็ตของหน่วยทางภาษา เช่นคำทั้งหมดที่ใช้ ส่วน h จะเป็นค่าที่ออกจาก hidden state ชั้นสุดท้าย และ v คือ output embedding ที่แม็พจาก h มาสู่ output ซึ่งเป็นหน่วยทางภาษาที่เราสนใจ

neural language model จะได้เปรียบตรงที่ information ทั้งหลายถูกเก็บอยู่ใน hidden state ซึ่งเป็น distributed representation ขณะที่ statistical language model จะทำการนับ discrete term ต่างๆ โดยตรง จึงเจอปัญหาการระเบิดแบบ exponential เพียงแค่เพิ่มค่าของ n จำนวนพจน์ต่างๆ ที่ต้องคำนวณจะมีเพิ่มขึ้นอย่างมหาศาล ทำให้เสมือนว่า neural language model สามารถใช้ information ย้อนไปได้ไกลกว่า

การวัดผล

ค่ามาตรฐานสำหรับการวัดผลของแบบจำลองภาษาคือ cross entropy ซึ่งเป็นการวัดความเคลื่อนคลาด ระหว่าง probability distribution ที่แบบจำลองทำนาย (P) กับสิ่งที่เกิดขึ้นจริง (Q) และเนื่องจากสิ่งที่เกิดขึ้นจริงคือหน่วยทางภาษาหน่วยเดียว เช่นเป็นคำคำนึง จากคำที่เป็นไปได้ทั้งหมด ค่า Q ของคำคำนั้นจึงเป็น 1 และค่าที่เหลือเป็น 0 หมด ทำให้ลดรูปได้เป็นบรรทัดสุดท้าย ในสมการด้านล่างนี้

สำหรับแบบจำลองระดับอักขระ ในตอนทดสอบจะเรียกค่า cross entropy นี้ว่า bit per character (bpc) ส่วนในตอนเรียนรู้ ค่านี้ก็คือ loss ที่ใช้กับ softmax layer ครับ

--

--