A.I. สร้างภาษาเอง?

มีอะไรในกอไผ่น้อ

Sanparith Marukatat
2 min readAug 1, 2017

ในช่วงสัปดาห์ที่ผ่านมาเห็นหลายคนแชร์บทความจากสำนักข่าวต่อๆ กันเรื่องนักวิจัยที่ Facebook ที่พบว่า chat bot ที่เขาพัฒนานั้นสร้างภาษาเองแล้วกลัวเลยปิดมัน ต้องรอจนเมื่อวานนี้ (31 กค. 60) ถึงมีคนแชร์ว่ามันไม่จริง ผมเองมาเห็นบทความนี้ก็ตอนนั่งเขียนบล็อกนี้อยู่แหละ แต่ไหนๆ ตั้งใจจะเขียนแล้วก็เอาให้จบละกัน

บทความข่าวตอนแรกๆ นั้นบอกตรงกันว่าข้อมูลที่อ้างถึงมาจาก blog ของ Facebook และบทความใน ArXiv

เรามาลองแกะๆ ดูสิว่าเจ้างานชิ้นนี้มันทำอะไรกันแน่

สิ่งที่นักวิจัยจาก Facebook ต้องการพัฒนาคือ end-to-end negotiation bot คำว่า end-to-end นั้นคือเขาต้องการให้ user สื่อสารกับ bot หรือที่ใน paper เรียกว่า agent ตัวนี้ในภาษาที่ใช้กันปกติ หรือที่เรียกว่าภาษาธรรมชาติ (natural language) โดยตรงได้เลย นั่นแปลว่า bot ตัวนี้ต้องเข้าใจสิ่งที่ user ต้องการสื่อสารดีระดับหนึ่ง ดังนั้นเลยต้องจำกัด domain ที่พิจารณาก่อน เพราะ NLP ไม่ใช่ประเด็นหลักในงานนี้

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

เท่าที่เข้าใจจากบทความ (ไม่ได้ไปแกะโค้ดดู) bot นี้ประกอบด้วยโครงสร้างแบบ GRU หลายตัวที่ทำงานด้วยกัน โดยการทำงานของมันคร่าวๆ มีดังนี้

  • เป้าหมายของ bot นี้จะถูก encode ไว้ในเวคเตอร์ g ที่มี 6 มิติที่เก็บจำนวนและมูลค่าของของทั้ง 3 ชนิดในรอบหนึ่งๆ ของการต่อรอง
  • GRUg ทำหน้าที่ embed เวคเตอร์ g นี้ให้อยู่ในปริภูมิ 64 มิติ เวคเตอร์ที่ได้คือ h_g
  • GRUw ที่คำนวณ hidden state h(t) จากคำในบทสนทนาก่อนนี้ x(t-1) และ h_g ซึ่ง h(t) นี้จะถูกใช้ในการสุ่มคำถัดใหม่ x(t) ไปเรื่อยๆ
    เท่าที่อ่านดู เหมือนกับ GRU เหล่านี้ share hidden state เหล่านี้กัน
    บทสนทนาจบลงเมื่อสุ่มได้รหัส end-of-dialogue
  • เมื่อบทสนทนาจบลง bot จะนำเอาลำดับ x(1),…,x(T), h(1),…,h(T) และ h_g มาใช้ในการตัดสินใจผ่าน bi-directional GRU อีก 2 ตัว ได้เป็นผลการตัดสินใจ
    แต่ทั้งนี้การตัดสินใจที่ได้ต้องนำไปตรวจดูความสอนคล้องด้วย ว่าไม่มีของที่ถูกแจกให้ 2 ฝ่ายพร้อมๆ กัน

ในงานนี้เขาใช้ GRU แบบเดียวกันในการ model ทั้งบทสนทนาของทั้งสองฝ่าย ซึ่งในตอนต้นนั้นบทสนทนาที่นำมา train นั้นได้มาจาก user ที่เป็นคนโดยทำผ่านระบบ Mechanical Turk
ผลที่ได้จากขั้นตอนนี้คือ bot นั้นจะ “เลียนแบบ” บทสนทนาของคนในการ negotiate เพื่อให้ bot นี้เรียนรู้ที่จะต่อรองจริงๆ เขาเลยให้มันฝึกต่อ โดยให้หัดต่อรองกับตัวเองผ่านกระบวนการ reinforcement learning

ในการทำ reinforcement learning นี้เขามี bot 2 ตัวคือ A และ B โดยทั้งคู่นั้นถูก train ตอนต้นเหมือนๆ กันให้เลียนแบบการต่อรองจากบทสนทนาของคน จากนั้นเขาใช้ B เป็นคู่สนทนาเพื่อทำการ train A

ในตอนเริ่มต้นนั้น bot ตัวหนึ่งจะถูกสุ่มมาเริ่มบทสนทนา สมมติว่าเป็น A ซึ่ง A ก็จะสร้างประโยค หรือลำดับของคำออกมา ถ้าประโยคนี้จนจบที่รหัส end-of-turn ระบบก็จะตัดไปให้ B เป็นคนสร้างประโยคถัดไป และถ้าประโยคใหม่จบที่รหัส end-of-turn อีกระบบก็จะสลับมาที่ A และจะทำซ้ำไปเรื่อยๆ จนกว่าฝ่ายหนึ่งจะจบประโยคด้วยรหัส end-of-dialogue

หลังจากบทสนทนาจบลง bot ทั้งคู่จะทำการตัดสินใจจากลำดับของคำทั้งหมดในบทสนทนานี้ และส่งผลการตัดสินใจออกมา ถ้าผลการตัดสินใจของ A และ B ไม่ตรงกัน ก็จะถือว่า reward ของรอบนั้นเป็น 0 ถ้าตรงกัน A ก็จะนำเอาค่า reward นี้ไปแจกย้อนกลับให้คำต่างๆ ในประโยคที่ A สร้างขึ้นในบทสนทนานี้

ข้อสังเกต

  • ระบบนี้ต่างจาก autonomous agent ปกติที่ไม่มีการนิยาม “action” แต่ใช้ “คำ” ในประโยคแทน action ดังนั้น reward ที่กระจายย้อนกลับนั้นจึงไปที่ “คำ” ที่อยู่ในบทสนทนาโดยตรง
  • นั่นแปลว่าเราไม่ได้สอนให้ bot เลือก “action” ที่เหมาะสมในการต่อรอง แต่ให้มันเลือก “คำ” ที่เหมาะสมมากกว่า
    ตัวอย่างในบทความเช่นจากชุดข้อมูลสอนประโยค “I agree” มักตามมาด้วย end-of-dialogue โดยอีกฝ่ายไม่ต่อรองต่อเพิ่ม ดังนั้น bot เลยจำเอามาใช้เป็นวิธีกันไม่ให้อีกฝ่ายต่อรองต่อ แต่ตัวเองยังเสนอข้อต่อรองใหม่ อันนี้ทำให้คนใช้รำคาญได้ วิธีแก้ดูเหมือนว่าน่าจะต้องใช้ความรู้ด้าน NLP มาเสริม
  • จากการที่เราสอนให้มันเลือกคำจึงไม่น่าแปลกใจเมื่อใน paper บอกว่าถ้าเราปรับทั้ง A และ B พร้อมๆ กัน ผลคือบทสนทนาที่ได้นั้นไม่เป็นภาษาคน (ที่มาของข่าวมั่วนั่นเอง) นั่นเพราะในการคำนวณ reward ไม่มีอะไรที่บังคับว่ามันต้องเป็นภาษาคน
    วิธีแก้ในบทความคือให้ B fix ไว้ก่อนแล้วปรับ A ฝั่งเดียว ซึ่งก็เป็นการ regularize กลายๆ เพราะว่าบทสนทนาที่ B จะเข้าใจได้ต้องมาในรูปที่คล้ายกับบทสนทนาของคนที่มันใช้ในการ train ตอนต้นนั่นเอง ถ้า A สร้างประโยคมั่วๆ ผลการตัดสินใจสุดท้ายก็อาจไม่ตรงกัน ได้ reward เป็นศูนย์ไป
  • ผมว่าถ้าเอา hidden state ของ GRU เป็น “action” ก็อาจได้อะไรที่น่าสนนะ มีใครทำแล้วบอกผลด้วย
  • งานนี้น่าสนอีกอย่างคือเป็นตัวอย่างที่ดีให้เห็นความแตกต่างระหว่างการ “เลียนแบบ” ที่ได้จาก supervised learning และการ “เรียนรู้ที่จะต่อรอง” หรือ “เรียนรู้ที่จะเลือกคำมาใช้ในต่อรอง” ที่ได้จากการทำ reinforcement learning

--

--

No responses yet