ในช่วงเวลาส่งท้ายปลายปีแบบนี้ หลายๆ ท่านอาจจะนั่งนึกทบทวนถึงสิ่งต่างๆ ที่ผ่านมา แน่นอนว่าในปี ค.ศ. 2018 ที่กำลังจะผ่านพ้นไปนี้ มีเหตุการณ์สำคัญเกิดขึ้นมากมาย สำหรับวงการ NLP ก็นับว่าปีนี้เป็นการเปิดศักราชของ transfer learning อย่างยิ่งใหญ่ นับตั้งแต่ ELMo ที่เป็นหัวขบวนในช่วงต้นปี ตามมาด้วย ULMFiT และ OpenAI Transformer จนกระทั่งถึง BERT ที่แรงปลายส่งท้ายปี เป็นที่โจษขานกันทั่วไป ในบทความนี้เราลองมาทำความรู้จักกับเทคนิกเหล่านี้อย่างคร่าวๆ กันครับ
ก่อนอื่นต้องเท้าความเสียก่อนว่า การที่ deep learning ลือเลื่องเฟื่องฟูในปัจจุบัน ส่วนสำคัญเริ่มต้นมาจากงานทางฝั่ง computer vision โดยเฉพาะการประกวดแข่งขัน ILSVRC ที่ใช้ข้อมูล ImageNet (สามารถอ่านเรื่องราวของ ImageNet Challenge เพิ่มเติมได้ที่บทความนี้ครับ) ซึ่งทำให้เป็นที่ยอมรับโดยทั่วกันว่า deep learning คือคำตอบของปัญหานี้ และไม่เพียงเท่านั้น ในเวลาไม่นานนัก นักวิจัยด้าน deep learning ก็ได้ตระหนักว่าปัญหาอื่นๆ ทาง computer vision ก็สามารถนำโมเดลที่ได้จากงาน ILSVRC ไปใช้ได้เช่นกัน
สำหรับผู้ที่คุ้นเคยกับการใช้ deep learning ในงาน computer vision เมื่อเจอกับปัญหาใหม่ๆ ที่จำนวนข้อมูลมีไม่มากพอ เช่น ปัญหาหมากับแมว วิธีการแรกที่จะทำโดยอัตโนมัติก็คือการนำเอาโมเดลที่เทรนจากงาน ILSVRC มาใช้ โดยตัดโมเดลส่วนบนทิ้ง แต่คงส่วนล่างๆ ไว้ ทั้งนี้เป็นเพราะว่าในการเทรนข้อมูล ImageNet นั้น โมเดลได้เรียนรู้ representation ที่สำคัญๆ เอาไว้ด้วย ไม่ว่าจะเป็น เส้นขอบ รูปทรง ลวดลาย สีสัน หรือบรรดา abstraction ต่างๆ ซึ่งปัญหาใหม่ก็สามารถนำสิ่งเหล่านี้ไปใช้ได้เลย โดยไม่ต้องเทรนเพื่อหา representation เหล่านี้เองตั้งแต่ต้น
ในเวลานั้น ทางฝั่ง NLP ก็ได้แต่นั่งดูพัฒนาการของฝั่ง computer vision กันตาปริบๆ แล้วคิดว่าเมื่อไหร่ทางนี้จะมีอะไรที่สะดวกๆ เช่นนั้นบ้าง ที่ใกล้เคียงที่สุดเห็นจะได้แก่เรื่องของ word embedding ซึ่งนับว่าเป็นการคิดค้นที่ทรงอิทธิพลมาก แทบทุกงานทางด้าน deep learning NLP ได้มีการนำ word embedding (หรือ subword embedding) เช่น word2vec Glove fastText และ BPE มาใช้กัน แต่สิ่งเหล่านี้ยังคงเป็นเพียง representation ในชั้นแรกสุดเท่านั้น จนกระทั่งถึงปีนี้ ยุคสมัยของ transfer learning สำหรับ NLP ก็ได้ถือกำเนิดขึ้น
(Embeddings from Language Models)
วิธีการของ ELMo คือทำการเรียนรู้ language model จากทั้งฝั่งขาไปและขากลับ โดยใช้ LSTM เมื่อทำการเรียนรู้เรียบร้อยแล้ว เวลาเอาไปใช้งาน ก็ป้อนข้อความของเราเข้าที่โมเดลนี้ แล้วก็นำ hidden state ที่ชั้นต่างๆ ออกมา โดยให้ weight ว่าแต่ละชั้นควรมีความสำคัญเท่าไหร่ ซึ่งก็ขึ้นอยู่กับงานที่เรานำไปใช้ครับ ซึ่ง hidden state ในแต่ละชั้นของ ELMo นี้ ก็เปรียบเสมือน representation ในแต่ละระดับที่แตกต่างกันไป
การใช้งานของ ELMo นับว่าเป็น contextual embedding ซึ่งดีกว่า word embedding โดยทั่วไป ตรงที่ representation จาก ELMo จะมีการคำนึงถึง context ด้วย เช่น ใน word embedding ธรรมดา คำว่า bank ที่หมายถึง ธนาคาร กับที่หมายถึง ตลิ่ง จะเป็น vector ตัวเดียวกัน แต่เนื่องจาก ELMo เป็นโมเดลที่รับทั้งข้อความเข้ามายัง LSTM ทำให้ representation ที่ได้แตกต่างกันไปตามข้อความที่เข้ามาด้วย และในการไปใช้งานก็อาจนำ contextual embedding ที่ได้ ไปเสริมเป็น input ใน embedding layer ดังรูปด้านล่างนี้ครับ
เมื่อใช้ ELMo เข้ามาเสริมแล้ว พบว่าสามารถช่วยให้ผลการทดสอบในชุดข้อมูลต่างๆ ดีขึ้นมากเลยทีเดียว
(Universal Language Model Fine-tuning)
สำหรับ ULMFiT นี้ มีส่วนประกอบหลักคือ AWD-LSTM ซึ่งเป็น LSTM ตัวที่ดีที่สุดสำหรับงาน language modeling ในปัจจุบัน เมื่อ ULMFiT ทำการเรียนรู้ language model เรียบร้อยแล้ว ก็สามารถนำไปใช้ในงานต่างๆ ได้ โดยคงส่วนล่างๆ ไว้ และเปลี่ยนเพียงแค่ชั้นบนสุด แต่การนำไปใช้อาจจะต้องทำ fine-tuning อีกสองขั้นตอน โดยเริ่มจากการเทรน language model สำหรับงานที่นำไปใช้ ต่อจากนั้นจึงค่อยเทรนงานนั้นจริงๆ เช่น การเทรนให้เป็น classifier
ในขั้นตอนการปรับจูนนี้ มีข้อแนะนำว่าควรทำ discriminative fine-tuning คือปรับจูนในแต่ละชั้นต่างกันไป เนื่องจากโมเดลของแต่ละชั้นเป็น representation ที่คนละระดับกัน และควรใช้ slanted triangular learning rates เพื่อให้สามารถลู่เข้าค่าที่ดีๆ ได้ในช่วงแรก แล้วค่อยๆ ปรับค่าไปในช่วงหลัง และในการปรับจูนขั้นสุดท้าย เช่น การเทรนให้เป็น classifier ก็ควรจะปรับ weight ลงไปทีละชั้น โดย weight ในชั้นที่ยังไม่ถูกปรับก็จะถูกแช่แข็งไว้ก่อน (คือคงค่าเดิมไว้)
ในปีที่แล้ว กระบวนการ self-attention และโมเดล Transformer เปิดตัวได้เป็นที่ฮือฮา มาในปีนี้ก็มีการนำไปใช้กันอย่างแพร่หลายมากยิ่งขึ้น เช่นในงาน Story Generation หรือ SAGAN รวมทั้งใน OpenAI Transformer และ BERT ที่เราจะกล่าวถึงด้วย สำหรับเรื่องของ self-attention และ Transformer นั้น ทาง ThAIKeras เคยเขียนเป็นบทความไว้ ผู้ที่สนใจสามารถอ่านได้ที่นี่ครับ
ในส่วนของ OpenAI Transformer นี้ ก็มีการนำฝั่ง decoder ของ Transformer ซึ่งเป็น masked self-attention มาใช้ในการเรียนรู้ language model จากนั้นเมื่อจะนำไปใช้ในงานอื่น ก็สามารถต่อ feedforward neural networks เข้าที่ส่วนบนได้เลย ดังนี้ครับ
(Bidirectional Encoder Representations from Transformers)
สำหรับ BERT ซึ่งเป็นโมเดลล่าสุดนี้ ได้ตัดสินใจใช้ self-attention อย่างเต็มรูปแบบ หรือก็คือ Transformer ส่วน encoder นั่นเอง แต่ในการเรียนรู้ language model อย่างที่ผ่านมานั้น มีข้อจำกัดอยู่ตรงที่ทำให้ไม่สามารถใช้ bi-directional LSTM หรือ self-attention อย่างเต็มรูปแบบได้ เนื่องจาก language modeling เป็นการทำนายคำที่จะมาถัดไป ซึ่งต้องไล่ข้อความที่เข้ามาไปในทิศทางเดียวเท่านั้น ถ้าไล่จากอีกทิศทางมาด้วย หรือใช้ข้อความทั้งหมดเข้ามา จะเท่ากับว่าเห็นคำตอบที่ถูกต้องแล้ว ในการเรียนรู้ของ BERT จึงเปลี่ยนปัญหาจาก language model เป็น masked language model คือทำการสุ่มปิดคำจำนวนนึงไว้ แล้วให้โมเดลทำนายคำนั้น เหมือนกับ cloze test หรือข้อสอบที่ให้เราเดาคำในช่องว่าง
นอกจากนี้ BERT จะทำการเรียนรู้ความสัมพันธ์ของประโยคด้วย เพื่อให้มีความเข้าใจความหมายของข้อความมากขึ้น โดยการป้อนประโยคสองประโยคเข้าไป แล้วให้ BERT ทำนายว่าสองประโยคนี้ต่อกันจริงหรือเปล่า
ทางทีมงาน ThAIKeras ได้มีการจัดทำโมเดล BERT ที่เป็นภาษาไทยล้วนเอาไว้ ผู้ที่สนใจสามารถลองนำไปใช้งานได้จากที่นี่ครับ
โมเดลทั้งสี่สามารถสรุปได้ดังตารางนี้ครับ
learning task | architecture | paper | source code | by | |
---|---|---|---|---|---|
ELMo | language modeling | Bi-LSTM | ↗ | ↗ | AllenNLP |
ULMFiT | language modeling | AWD-LSTM | ↗ | ↗ | fast.ai |
OpenAI Transformer | language modeling | Transformer (decoder) | ↗ | ↗ | OpenAI |
BERT | cloze test & sentence prediction | Transformer (encoder) | ↗ | ↗ |
นอกเหนือจากเปเปอร์และเอกสารอย่างเป็นทางการของโมเดลต่างๆ แล้ว ยังมีบทความที่เขียนอธิบายเรื่องนี้ไว้อย่างดี เช่นสองบทความด้านล่างนี้
และในปีหน้าจะมีตัวละครจาก Sesame Street ตัวไหน ออกมามาโลดแล่นในวงการ NLP อีก ต้องติดตามต่อไปครับ
(สำหรับบทความนี้เป็นรีวิวแบบคร่าวๆ ถ้าเพื่อนๆ มีข้อสงสัยหรืออยากรู้อะไรเพิ่มเติมเข้ามาคุยกันได้ใน Forum ของเราครับ)