SID Tech Talent 2017 — `Machine learning` (2)
สืบเนื่องจาก blog ที่แล้วที่พูดเรื่องตอนเรียนนะคะ ตอนนี้เป็นตอนสุดท้ายของการเรียน SID Tech Talent Machine Learning
` แล้ว ตอนแข่ง hackathon ค่ะ (อ่านตอนแรกได้ที่ https://medium.com/@icooker811_/sid-tech-talent-2017-machine-learning-1-5b782c145f38)
ทำไมถึงตอน Hackathon
จริงๆ เป็นการตกลงกันตั้งแต่เริ่มเรียนเลยว่า ไหนๆ จบคอร์สนี้เราจะได้ทำ Data Product
` ของตัวเองกัน ก็เลยมีการจัด Hakathon กันในอาทิตย์สุดท้ายของการเรียน คือวันที่ 27(เย็น)–29 ตุลาคมค่ะ (ไม่ต้องหลับไม่ต้องนอนกันเลย :D)
Hackathon ทำอะไร?
แล้ว hackathon จะทำอะไรล่ะ? ด้วยความที่ต้องออกไปแนะนำตัวในคาบแรกของการเรียน ก็ออกไปแนะนำตัวว่าเป็นใครมาจากไหน ทำงานอะไร แล้วสนใจจะเอา machine learning ไปใช้ทำอะไร เราก็เลยบอกว่าเราอยากทำ chatbot สุขภาพประมาณนี้ แล้วเมื่อต้องจับกลุ่มทำ hackathon พี่ที่นั่งข้างๆ ตอนนั้นคือ `พี่ตุล` ก็เลยมาชวนจับกลุ่มกัน ว่าทำ chatbot กันนะ เหตุผลก็คือ เราสองคนต่างขี้เกียจเดินออกไปหากลุ่มด้วย ก็เลย โอเคเลยค่ะ chatbot แล้วพี่ตุลก็แค่ทำงานด้านนี้มาด้วย ก็เลยโอเคใหญ่เลย จากนั้นมี `พี่น้อย` เข้ามาตามและ `น้องเพ้นท์` ตามมา จนครบทีม 4 คน มาเริ่มทำ chatbot กัน
เริ่มทำ Chatbot ?
พอมันเป็นหัวข้อ chatbot มันจะดูเหมือนง่ายๆ แต่จริงๆ มันช่างกว้างใหญ่มากกกกกเหลือเกิน~ แล้ว chatbot จะทำเกี่ยวกับอะไรอีกละ? นั่นคือคำถาม ฮ่าๆ เพราะถ้าทำ chatbot ต้องไม่กากนะ แล้ว chatbot ที่ไม่กากเป็นยังไงนะ?
ความกากของ chatbot มาจากไหน? แน่นอนว่า bot เราไม่รู้ว่าคำถามของทุกคนเป็นยังไง ต้องตอบแบบไหน วิธีการคือเราต้องเทรนให้ bot รู้ว่า อ่อ คำถามที่เข้ามาเป็นคำถามหัวข้อนี้ ให้ตอบแบบนี้นะ ก็เป็น rule-based ง่ายๆ
ตัวอย่างเช่น
Khun A: ‘วันนี้อากาศเป็นยัง’
Bot: ‘ท้องฟ้าแจ่มใส’
สมมติว่าเรามีคนถามว่า วันนี้อากาศเป็นยังไงบ้าง? แล้วเราสอนให้ bot รู้ว่าคำถามที่ Khun A ถามมาเกี่ยวกับสภาพอากาศ งั้นตอบว่า ‘ท้องฟ้าแจ่มใสนะ’
Khun A: ‘ร้องเพลงให้ฟังหน่อยสิ’
Bot: ‘….’
แต่ถ้า Khun A ถามว่า ‘ร้องเพลงให้ฟังหน่อยสิ’ แต่เราไม่เคยมี rule ไหนที่ตอบเกี่ยกับ ‘ร้องเพลง’ เลย ถามว่า bot จะตอบยังไง? อันนี้แหละค่ะ เป็นความกากที่เกิดขึ้นได้ คือคำถามเท่าไหร่กัน มันถึงจะพอให้ bot เราตอบได้
ฉะนั้นเราเลยต้องกำหนด scope ของ bot ให้ชัดเจน เช่น bot จองตั๋วเครื่องบิน คำถามของลูกค้าอาจจะเป็น ต้องการบินจากเมือง A ไปเมือง B? บินกี่โมง? ราคายังไง? ซึ่ง pattern ของคำถามมันชัดเจนกว่าที่ทำ bot อะไรไม่รู้เน้อ
ถามว่าแล้วเราไม่ทำ ruled-based ได้ไหม ให้ bot คิดเองได้เลยมีวิธีไหนบ้าง? มีค่ะ คือการทำ NLP (natural language processing) ที่สนใจและเคยอยากเอามาลองทำคือ seq-seq (อ่านต่อ https://blog.statsbot.co/chatbots-machine-learning-e83698b1a91e) จริงๆ อยากลองทำอันนี้มากสุด นี่ไปถามเทพไฮเลยว่า ไฮมันคืออะไรนะ ทำยังไง? ฮ่าาา แต่เนื่องจากคิดว่าเวลา 3 วันคงไม่ไหว ภาษาไทยด้วย ก็เลยตัดว่าเป็น rule-based เลยแล้วกัน ฮ่าาา
Talent Chatbot
พอเริ่มเข้าใจว่า bot ต้องมีหัวข้อที่ชัดเจนก็เลยเริ่มคิดว่า เอาอะไรดี? เอาที่เราอยากได้แล้วกัน? ตอนนั้นกำลังเรียน recommendation ด้วย อยู่ดีๆ ก็คิดว่า มันคงจะดีเนอะ ถ้าแบบเราพิมถาม bot ร้านหนังสือ แล้ว bot ตอบเราได้ว่า ‘แกๆ หาหนังสือเล่มนี้อยู่ป่าว’, ‘เอาหนังสือเล่มนี้ไหม’ ก็เลย เออดีเนอะ แล้วข้อมูลล่ะ? หาจากไหน? kinokuniya เค้าจะให้ไหม? งั้น kaggle? ไม่มี!!!!!! ฮ่าาาาาา ก็เลย งั้นเปลี่ยนเป็นร้านค้าแล้วกัน มีไหม? มี!! โอเค งั้นเสนอกลุ่มเลยแล้วกัน ว่าเป็น bot ร้านค้าเนอะ !!
Implementation
พอไปๆ มาก็ทำ chatbot + recommendation ไปเฉย ฮ่าๆ ก็เลยคิดว่า งานใหญ่มากเลยนะเนี่ย ฮ่าๆ ก็โอเคค่ะ ต้องแบ่งกันทำละ
พี่ตุลทำ chatbot ค่ะ พี่น้อย น้องเพ้นท์ช่วยกันคิดคำถาม-คำตอบของ bot กัน ส่วนเราทำ recommender เพราะดูโอเคกับมือแล้ว django สบายๆ ทำมาตั้ง 3 ปี (แต่ไม่ได้เขียนมา 3 เดือนแล้ว) ฮ่าๆๆๆ แย่เลย เขียนช้าไปมากกก TT ส่วน chatbot ui ใช้ facebook messager กับ line ค่ะ เพราะไม่ต้องทำ ui เองเด้อ จริงๆ กะทำ app อีกอันแต่ไม่ทันเอง ฮ่าๆ
ส่วนของเรา recommender ข้อมูลมาจาก https://www.kaggle.com/PromptCloudHQ/flipkart-products/ แล้วทำ recommender แบบ full-search ค่ะ ใช้ nearest-neighbor แบบธรรมดาเลยมาช่วยหาว่า ของที่ลูกค้าสนใจ ใกล้เคลียงกับอันไหน เช่นเค้าพิมมา ‘อยากได้เสื้อเชิ๊ตสำดำ ราคาประมาณ 500 บาท’ ก็ใช้วิธีการ search ผ่าน description ของสินค้าแทน
การ implement บน cloud เนี่ยแหละค่ะ เลือกใช้ google-cloud เนอะ เพราะเพิ่งไป GDG dev fest มา อินๆ อยากจัดซะหน่อย จริงๆ
พอเลือก google-cloud ไปก็เป็นสิ่งที่ดีเลย คือ ram ไม่พอในการทำ model ฮ่าาาา (ต้องถอยคอมใหม่แล้วเนี่ย!!) ก็เลยโอเค อัด google-cloud มา แปปหนึ่งแล้วกัน สร้าง model แล้วปิด (โชคดีเหลือเกินที่โลกนี้มี cloud ให้ใช้ ฮ่าาา) พอ model หนักมาก รัน server เทสไปเรื่อยๆ uwsgi ทำเมมเต็มอีก เง้ออออ+ ก็เลยโอเค!! ไม่ได้นอนด้วย อัด server เลยแล้วกัน ต่อกับ chatbot ที่พี่ตุลทำ อัด vdo สำหรับ presentation เป็นอันจบเนอะ :D
Finally
ถึงวัน present จริงแล้ว พี่น้อย น้องเพ้นท์ทำ slide ข้อมูลให้ (มี market size ด้วยอ่า dev อย่างเราอึ้งไปเลย ฮ่าๆ ) แล้วให้พี่ตุลขายของแล้วกัน ฮ่าๆ (ขนาดไปพูดให้ต้าฟังไม่รู้เรื่อง ต้องส่งพี่ตุลไปละ ฮ่าา) ซึ่งพี่ตุลขายของงงงงงงเก่งมากกกกกกกกกกกกกก ให้ดาวล้านดวงงงงง ฮ่าๆ ฟังแล้ว โห… นี่โปรเจคที่ตัวเองทำมาขนาดนี้เลยเหรอ ฮ่าๆ
จบมาที่อยู่ดีๆ ได้เข้ารอบ 5 ทีมสุดท้ายด้วย ฮ่าๆ งงๆ แต่ก็แอบดีใจว่าอย่างน้อยก็มี Product
` ก็ดีใจแล้วค่ะ ฮ่าาาาาา แต่จริงๆ ต้องให้คนอื่นเลย เค้า present ได้ดีมากกก จนเราอึ้งไปเลย ฮ่าาา ยังไงก็ขอบคุณทุกคนในทีมนะคะ ที่มาได้ถึงจุดนี้ :D
ท้ายสุดเลย ไม่คิดว่าเขียนตอนนี้จะยาวมาขนาดนี้ ฮ่าา
- ขอบคุณทุกคนในทีม สุดยอดจริงๆ ไม่คิดว่าจะขนาดนี้กัน ฮ่าๆ
- ขอบคุณพี่อาร์ม เจมส์ และเหล่า TA ที่ช่วยสอนแล้วมาช่วยทำตอนติดปัญหา hackathon ด้วย
- ขอบคุณกรรมการที่ดังๆ ขนาดนี้ไม่คิดว่าจะมีโอกาสได้ present ขนาดนี้ด้วย
- ขอบคุณคนในคลาส ที่ช่วยให้รู้สึกว่าเราต้องมีพลังมากกว่า เห็นงานทุกคนแล้วรู้สึกว่าต้องพยายามมากกว่านี้อีก
- ขอบคุณ SID — CU Innovation Hub ที่ให้โอกาสเรียนอะไรแบบนี้ คือดีย์อ่าาา :D
หวังว่าคลาสต่อไปจะได้มีโอกาสแบบนี้อีก ขอบคุณทุกคนที่อ่านยาวกันขนาดนี้นะคะ ขอบคุณค่ะ :D