Videos Multimodal RAG for Images and Text with MongoDB

Description

มาร่วมสำรวจโลกของ Multimodal AI ใน session ที่จะพาไปรู้จักกับเทคโนโลยีที่ ChatGPT หรือ Gemini ใช้ ในการทำความเข้าใจทั้งรูปภาพและข้อความพร้อมๆ กัน บรรยายโดยโร่ AI engineer จาก Botnoi Group ที่จะอธิบายตั้งแต่พื้นฐานของ Multimodal ไปจนถึงการประยุกต์ใช้กับงานอย่าง VQA (Visual Question Answering) ผ่านเทคนิคอย่าง Image Captioning และ RAG (Retrieval Augmented Generation) Session นี้เหมาะสำหรับผู้ที่สนใจ AI และต้องการต่อยอดความรู้ไปสู่ Multimodal เพื่อสร้างแอปพลิเคชันที่สามารถเข้าใจข้อมูลได้หลากหลายรูปแบบมากขึ้น

Chapters

  • แนะนำตัวและเกริ่นนำ: Multimodal LLM 0:00
  • Multimodal คืออะไร? แตกต่างจาก Unimodal อย่างไร? 0:47
  • Multimodal ในอุดมคติ: เปลี่ยนทุกอย่างเป็น Text 3:02
  • โฟกัส Image + Text: เปลี่ยนรูปเป็น Text ได้อย่างไร? 6:45
  • Image Captioning & Visual Language Model: สอน AI ให้เข้าใจรูป 8:08
  • Fine-tuned Model vs. RAG: เลือกแบบไหนดี? 12:08
  • RAG คืออะไร? ทำงานอย่างไร? 13:38
  • Image Collection: เปลี่ยนรูปเป็น Vector ทำไม? 15:13
  • เตรียม Vector Database ให้พร้อม ก่อนทำ RAG 19:50
  • Question Answering: ถาม-ตอบ ฉบับ Multimodal 20:03
  • VQA with RAG: รวมรูปภาพในการถาม-ตอบ 21:45
  • VQA แบบ Advance: ใช้ Model ที่เข้าใจทั้งรูปและข้อความ 23:13
  • สรุป Multimodal & RAG: เปลี่ยนทุกอย่างเป็น Text แล้วค่อยถาม 24:11
  • Workshop: ลองทำ Image Captioning & Vector Search 26:12
  • สาธิตการใช้งาน: ค้นหารูปภาพด้วย Text 36:54
  • ปัญหาและการปรับปรุง: Image Captioning สำคัญมากแค่ไหน? 42:20
  • สรุปและคำขอบคุณ 43:20
  • ประกาศกิจกรรมเล่นเกมและแจกของรางวัล 43:45

Transcript

คำบรรยายต่อไปนี้อาจไม่ถูกต้องทั้งหมด หากคุณพบข้อผิดพลาดใดๆ คุณสามารถช่วยแก้ไขข้อผิดพลาดได้บน GitHub

แนะนำตัวและเกริ่นนำ: Multimodal LLM0:00

ทำไมเปิดยิ่งใหญ่จัง

โอเค ก็ขออนุญาต แนะนำตัวทุกคนนิดนึงนะครับ ผมก็ ผมโร่นะครับ ผมก็มาจาก เอ่อ Botnoi Group นะครับผม ปัจจุบันทำทำในส่วนของ AI engineer นะครับ เนื่องจากเนื้อหา วันนี้นะครับ เห็นว่าทุกคน ทุกคนน่าจะสนใจในเรื่องของ vector search vector database นะครับ ก็เลยแบบ ถ้าจะเอาเรื่อง LLM แล้ว ใครๆ ก็พูดเรื่อง LLM กันละ วันนี้เรา เรา change dimension นิดนึง LLM ธรรมดา มัน มันกระจอกไป วันนี้เรามาคุยกันเรื่องของ multi-modal กัน อ่า ว่า multi-modal คือ เป็นยังไง นะครับ เออ แล้วก็เพื่อความ อ่า ไม่ ไม่เหนื่อย ไม่น้ำลายยืดกันนิดนึงนะครับ ผมก็เลย

Multimodal คืออะไร? แตกต่างจาก Unimodal อย่างไร?0:47

นิดนึง ว่า วันนี้เราจะ เรียนไป เล่นไป อ่า

เรียนยังไงให้รู้สึกไม่เครียดนะครับ โอเค ก่อนอื่นเลย มีใครในห้องนี้ รู้จัก multimodal ไหมครับ ชูขึ้นหน่อย โอ้โห เอาแล้ว ความยากเกิดขึ้นแล้ว

โอเค คำถามแรกเลย multimodal คืออะไร ทุกวันนี้ผมเชื่อว่าทุกคน ใช้แล้วก็รู้จัก multimodal อยู่แล้ว แต่ว่ามันอยู่ในรูปแบบของแอปพลิเคชันครับผม multimodal จริงๆ อ่ะ มันก็คือ LLM ตัวนึงแหละ คำถาม คำถามต่อจากนั้นคือ มันคือ LLM จริงไหม คำตอบคือ ไม่รู้ ไม่รู้ บางทีก็ใช่ บางที ก็ไม่ใช่ นะครับ ทำไมผมถึงพูดอย่างงี้ นะครับ เราย้อนกลับไปดูนิดนึงว่า ก่อนที่จะมาเราจะมารู้จักกับคำว่า LLM นะครับ ก่อนหน้านี้มันมีคำคำนึงที่เป็นคำที่ยอดฮิตกันก็คือคำว่า generative AI นะครับ คือเรามี input ที่เป็น text เข้ามา นะครับผม ผ่าน generative AI แล้ว generative AI ก็ สร้าง คำตอบขึ้นมา สร้าง สังเกตมั้ยคำว่า generative AI คือการสร้างขึ้นมา การสร้างสิ่งใหม่สักอย่างนึง ขึ้นมานะครับผม เนี่ยสิ่งนี้คือเรา input เป็นด้วย text แล้วมันก็สร้างออกมาเป็น text ได้อย่างนี้เป็น text to text เนาะ ทีนี้ ทีนี้ ทีนี้ ทีนี้ แบบเนี้ย มันเป็น unimodel ก็คือมี input 1 type

generate ออกมาเป็น input อีก 1 type อันนี้เป็น keyword เลย ก่อนที่จะมากับคำว่า multimodal นะ ให้เรารู้จักกับคำนี้ก่อน นะครับ ทีนี้ คำถามคือ เอ้า เติมน้ำ หยิบไม่เป็นไร อะ ทีนี้คำถามว่า LLM อะ

สรุป มันเป็น multimodal ไหม เราใช้ chat gpt เรา เราเคย เราเคยให้ chat gpt มัน generate รูปมั้ย

เคยถูกมั้ย อะ ถือว่าเป็น unimodal มั้ย ไม่เป็นใช่มั้ย สุดท้าย LLM เป็น หรือ chat gpt เป็น เป็น multimodal หรือเป็น unimodal นะครับ คำตอบก็คือ ไม่รู้แล้วแต่ task บางทีหลังบ้านของ chatGPT มันอาจจะเป็น มันอาจจะเป็นก็ได้ หรือบางทีมันอาจจะเป็นแค่แบบ เอ๊ย เป็นโมเดลแล้วไปต่อกับ adapter หรือฟังก์ชัน เหมือนที่เมื่อกี้คุณเจมส์เขาเล่าให้ฟัง ก็จะเป็นได้นะครับผม

Multimodal ในอุดมคติ: เปลี่ยนทุกอย่างเป็น Text3:02

งั้นเรามาคุยกันเรื่องของโมเดลกันก่อน เนาะ อะ เราเอาใหม่ เรามี text อยู่ตัวเดียว อยู่ เมื่อกี้เหมือนเดิมเลย นะครับ เข้า generative AI ครับ แต่รอบนี้เราไม่ได้ใส่แค่ text อย่างเดียว อ่า เป็นเวลาเรา เรา เราคุยกับ chatGPT แล้วบอกว่า เฮ้ย ช่วย อธิบายคำนี้ให้หน่อย หรือช่วยอธิบายรูป รูปภาพรูปนี้ให้หน่อย แล้วใส่รูปเข้าไป แล้วใส่ text เข้าไป แล้วให้มันอธิบายให้ฟัง นะครับ อะ คำตอบแบบนี้ นะครับ คำถาม คำถามมี input ตัวที่ 1 เป็น text input ตัวที่ 2 เป็นรูปภาพ ให้มัน generate เป็น text

นะครับ แบบนี้เรียกว่า multimodal ยัง ตามคอนเซ็ปต์แล้ว ถือว่าเป็นครับ เพราะว่า มันมีการ input ของ ข้อมูลมากกว่า 1 type มันอาจจะไม่ได้ generate output ที่เป็น 2 type ก็ได้ มันอาจจะ generate output แค่ 1 type แต่เราก็ถือว่ามันเป็น multimodal แล้ว เพราะว่ามัน มันสามารถแบบทำ multi data type ที่เป็น input ได้นะครับ แต่ถ้าจะให้ดี ถ้าจะตรงคอนเซ็ปต์จริง นะครับ มันมี keyword อยู่นี่อยู่ คำว่า generate variety of outcomes ก็คือมันสามารถเข้า สร้างสิ่งใหม่ๆ ออกมาได้มากกว่าแค่ text นะครับ ถ้าเป็นไปได้ multimodal ควรจะสร้าง output type ได้มากกว่าหนึ่งนะครับผม อย่างเช่นรูปภาพ ครับผม แบบนี้ก็เป็น เป็นแบบ multimodal เหมือนกัน แต่ถามว่าสุดท้ายแล้ว input image กับรูปกับ text ไป 2 ตัวนี้ แล้วสร้างเป็น เป็น text แบบนี้ถือเป็น multimodal ไหม เป็นนะครับผม อะ ทีนี้ มาเข้าสู่นิยามของคำว่า multimodal จริงๆ นะครับผม อย่าเพิ่งน้ำลายไหลกัน หลังจากเห็นรูปภาพนี้ นะครับ multimodal ในอุดมคติ คือ เราจะบอกกันว่า นะครับ เรามี source ไม่ว่าจะเป็น text หรือเป็น object แต่ใดๆ ก็ตาม นะครับผม เราจะพยายามแปลง source ตัวเนี้ย ให้เป็น text นะครับผม อย่างเช่นรูปภาพ เนาะ เรามีรูปภาพ เรามี เรามีเสียง เรามีวีดีโอ เราอยากจะ change มันนะครับ แล้วทำ projector นะครับผม ให้เกิด เกิดออกมาเป็น text นะครับ ไปเข้า LLM อ่า สังเกตมั้ย เรามี LLM อยู่ตัวนึง

LLM ที่เราพยายามจะเข้าใจภาษา เข้าใจภาษา ความสามารถของ LLM ที่สามารถเข้าใจเรื่องภาษาได้ เราแปลง image เป็น text เพื่อให้มันเข้าใจภาษา เราแปลง audio เป็น text เพื่อให้มันเข้าใจเหมือนกัน ครับ หลังจากมันทำความเข้าใจละ ทีนี้ มันทำ encode เสร็จละ มัน ทีนี้มันต้องทำ decode อย่างเช่น เราจะ generate รูปภาพอยู่รูปนึง นึกถึง นึกถึงคนเรา เราจะ generate รูปภาพ เรา เราเข้าใจคำว่า เออ ช่วย ช่วยสร้างรูปปิกาจูให้ฉันหน่อย นะครับ มันอาจจะมีแค่ text เป็นคำเดียวเลย ทีนี้ มันจะแปลง text คำเนี้ยให้เป็นรูปภาพยังไง ถูกมั้ย เราก็ต้องเหมือนเวลาเราทำโมเดล AI สัก ตัวนึงอ่ะ เราก็ต้องมีการจับคู่กันระหว่างรูปภาพกับ text นะครับ เราเทรนด้วยการเอารูปภาพไป

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

นะครับ คำตอบคือเริ่มมีแล้ว แต่ว่ายังไม่ได้เป็น

ยูนิเวอร์แซลขนาดนั้นนะครับผม เพราะงั้นมันก็ยังเลยยังเป็นเรื่องของงานวิจัยกัน นะ ถ้าอย่างนั้นทอปปิกในเรื่องของ multimodal อะ มันก็เลยถูกเริ่มพูดกัน แต่ว่ายังไม่ได้ถูกเอามาใช้จริงหรือว่าทำให้แบบเราเข้าถึงกันได้ นะครับผม อย่างตัวที่ใกล้เคียงที่สุด นะครับ อย่างที่เราใช้กันอยู่ทุกวันนี้อย่างเช่น ChatGPT หรือว่า Gemini หรือว่า Claude พวกนี้ก็เป็น เรียกว่าเป็น multimodal แล้ว นะครับ เพราะว่ามันเริ่มเข้าใจพวก source พวก image audio วีดีโอ อะไรพวกนี้ รวมถึงว่ามันจะสามารถแบบแปลงออกมา เป็นอะไรเป็นรูปภาพ บอกให้มันสร้างรูปภาพได้มั้ย มันบอกให้มันสร้าง audio อะไรพวกนี้ ได้มั้ย คำตอบคือปัจจุบันมันเริ่มทำได้แล้ว นะครับผม อ่า เอ่อ

โฟกัส Image + Text: เปลี่ยนรูปเป็น Text ได้อย่างไร?6:45

ซึ่ง เอา วันนี้ หลักๆ เลย วันนี้ เนื่องจากว่ามันเป็นเซกชันของ มันเป็นเซกชันที่ผมมองว่า เออ 30 นาทีเอง เราจะทำยังไงกับ multimodal ตัวนี้ให้ทุกคน เข้าใจคอนเซ็ปต์ของมันก็คือ เพราะงั้นเราจะเริ่มจากคำว่า image กับ text แค่นี้พอ แค่นี้พอ เราจะอินพุต 2 อย่างเนี้ย แล้วให้มันตอบคำถามออกมาเป็น text ให้ได้ นะครับ ความยากความง่ายคืออะไร ความยากคือ เรามี LLM ตรงกลางอยู่ 1 ตัว ทีนี้ เราจะ ทำยังไงให้มัน input ทั้ง text ทั้ง image ได้ อ่า อันนี้คือความยาก อันนี้คือ challenge ของเราในวันนี้ นะครับผม เมื่อกี้สังเกตจาก class ของพี่เจมส์ สังเกตจาก พี่เจมส์ พี่เจมส์เค้าใช้ วิธีการ พิมพ์ด้วย ข้อความอย่างเดียว ถูกมั้ย พิมพ์ด้วยข้อความอย่างเดียว แล้วมันก็ไป search หา similarity ทีนี้ สิ่งที่มันใกล้เคียงกัน ทีนี้ เราจะรู้ได้ไงอ่ะ image กับ text มันใกล้เคียงกัน 2 อย่างเนี้ย มัน มันอยู่กันคนละโดเมนกันเลย ตัวนึงอยู่โดเมนของ text อีกตัวนึงอยู่ในโดเมนของรูปภาพ เราทำยังไงให้มันรู้เรื่องตรงนี้ได้นะครับผม ในที่ step แรกนะครับ เราจะทำยังไงให้อิมเมจเป็น text ก่อน step แรกเลย image

เราจะเข้าใจ image เราคนเราเข้าใจ image ว่ายังไง นะครับผม สมมุติมีภาพมา 1 ภาพ

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

Image Captioning & Visual Language Model: สอน AI ให้เข้าใจรูป8:08

มันมีงาน งานนึงที่เราเรียกกันก็คือ เรียกว่า image captioning คือการพยายามอธิบายภาพภาพนี้ ว่าภาพภาพเนี้ยสื่อถึงอะไร นะครับผม เราจะพยายามอธิบายมันให้ให้เป็นภาษาภาษาภาษา text เนี่ยแหละ หรือภาษา language language ทั่วๆ ไปจาก 1 ภาพตรงนี้ นะครับ แปลงแบล็กบ็อกซ์ เข้าแบล็กบ็อกซ์ แบล็กบ็อกซ์สักตัวนึงก่อน เป็น AI สักตัวนึง นะครับ แล้วออกมา นะครับ เป็น เท็กซ์สักกล่องนึง นะครับ อันนี้ อันนี้เป็น มีม ปล่อยมันไป นะครับ อันนี้หลักๆ ถามว่าทำไมต้องทำ image captioning เพราะว่า จากฟังติโมเดลเมื่อกี้ เมื่อกี้เราเห็นกันเนาะ เราบอกว่าการที่ จะให้ ให้ multimodal มันเข้าใจ source อื่นที่ไม่ใช่ text ได้เนี่ย มันต้องแปลงพวก other source อ่ะ เป็น text ก่อน แล้วมัน มันถึงจะแปลงเข้า เข้าสู่โมเดล เพราะงั้นกระบวนการแรกเลย แปลง source อื่นให้เป็น text แปลยังไง อย่าง image วิธีง่ายที่สุด ทำเป็น image captioning ครับผม อ่า อ่า ทีนี้ มันก็มีอีก อีกงานวิจัยนึง

นะครับผม เราบอกว่า เมื่อกี้เราทำ image อย่างเดียว image อย่างเดียวมัน มันก็รู้นี่ image กับ text image แปลงเป็น text แต่ว่า ถ้าเราจะตั้งคำถามกับ text text นั้นๆ น่ะ เราจะตั้งคำถามกับ text นั้นๆ เช่น รูปรูปนี้คืออะไร นะครับ อ่า รูปนี้คืออะไร เราใส่ปิกาจูไป แล้วเราตั้งคำถามกับมัน คำถามนี้อาจจะเป็นอะไรก็ได้ เป็นคำถามอื่นก็ได้ แต่คำตอบของมันต้อง ออกมา นะครับผม ออกมาอาจจะเป็น text ก็ได้ อาจจะเป็น image ก็ได้ ทีนี้ ความยาก ความยาก หรือความ ความที่มันเกิดขึ้นก็คือ เราจะแมตชิ่งมันยังไง ระหว่าง text กับ image งานวิจัยเนี้ย เราเรียกกันว่า Visual Language Model คือเราใส่ทั้ง image text เข้าไป เพื่อให้ AI มันเรียนรู้ว่า สิ่งสิ่งเนี้ย ทั้ง input แล้วก็ ทั้ง input ที่เป็น image แล้วก็ input ที่เป็น text นะครับผม สองสิ่งเนี้ย มัน relate กันยังไงเนาะ มันจะแปลง image เป็นเวกเตอร์นะครับ แล้วก็แปลง text เป็นเวกเตอร์เหมือนที่เมื่อกี้คุณเจมส์บอกเนาะ แล้วมันก็จะไปเข้าฟังก์ชันหรือกระบวนการทางคณิตศาสตร์ของมันสักตัวนึง นะครับ แล้วก็ ออกมาบอกว่า โอเค สิ่งสิ่งนี้คืออะไร ก็คืออิงจากคำถาม กับรูปภาพ 2 อย่างนี้ที่มันจะ relate กัน นะครับ มันก็จะเป็นเรื่องของการเตรียมโมเดลกับการทำ การเตรียมดาต้ากับการทำโมเดลเนาะ เรื่องซึ่ง 2 เรื่องเนี้ย ระหว่างการทำ image captioning กับ VLM เนาะ 2 ตัวนี้มันก็จะทำให้มัน relate กันได้ แต่ว่า ความยากอีกอย่างนึงของเราก็คือ

มันฮาลูซิเนต ถ้าเราทำอย่างนี้ ถ้าเราทำอย่างงี้แล้วเดต้าเราไม่ดีอ่ะ แน่นอน 1 เลยคือโมเดลมันฮาลูซิเนตแน่นอนนะครับผม คือ เรามีดาต้า image แล้วเรามีดาต้า text 2 ตัวที่มัน captioning กัน แล้วเราเอามาทำ question and answering เนาะ อ่า อันนี้เป็น leader board นะครับว่าปัจจุบันเนี้ยมีโมเดลตัวไหนที่มัน มันเก่งมากๆ เนาะ ถ้าเราสังเกตตัว ตัว อ่า

ได้ไหม หรือไม่ ไม่ได้

อ่ะ ขยายไม่ได้ อ่ะ ตัวบนสุดคือ GPT-4o สังเกตโมเดลที่เราบอกว่า เอ้ย เรา เราจะใช้ เราจะทำโมเดล VLM เนาะ

VLM โมเดลที่ตอน ตอนนี้ที่ดีที่สุดก็คือ GPT-4o เอ๊า ไหนบอก GPT-4o เป็น เป็น multimodal ใช่ครับ multimodal ก็คือเป็นโมเดล เนาะ VLM ก็คือเป็น เป็นงาน งาน หรือว่าเป็นโจทย์ปัญหาที่เราจะ จะใช้โมเดลสักตัวนึงเข้าไป solve นะครับ ในปัจจุบันเนี้ยพวก multimodal หลายๆ ตัวมันก็เริ่มแบบ solve ปัญหาเรื่อง เรื่องวิชัน อ่า พวก visual language modeling ได้แล้ว เนาะครับผม อย่าง อ่า ทุกวันนี้ตัว Claude มันก็สามารถใส่ทั้ง image แล้วก็ text ในการถามคำถามมัน มันได้ละ เนาะ เพราะงั้นไอ้ตัวเนี้ยมันคือเรื่องของโมเดลดิบ เนาะ อันนี้มี testing score อยู่ ถ้าเกิดว่าใครอยากจะไปเล่นนะครับ ลอง ลองสามารถเข้าไปเล่นใน vision arena ได้ อ๋อ อ่า ที่นี่เป็นคำถามที่

Fine-tuned Model vs. RAG: เลือกแบบไหนดี?12:08

ที่ทุกคนน่าจะ น่าจะสน น่าจะสน ให้ความสนใจกันมาก มากในช่วงนี้คือ ถ้าสมมุติเรามี เรามี choice อยู่ตัวนึง คือเราจะทำ RAG หรือเราทำ fine tuned model ครับทำ RAG ทำไมไม่ทำ fine-tune ครับ แพงครับ โอ้โห คำถามนี้น่าสนใจ ใช่ RAG

RAG ถูกไหม ก็ ก็ไม่ถูกมั้ย ก็ไม่ค่อยถูกเท่าไหร่เนาะ แต่จริงๆ อ่ะ คำ อย่างเราที่เป็น AI engineer 1 คน น่ะครับผม การที่เราจะเลือกว่าเรา แล้ว ระหว่างเราจะทำ RAG กับการทำ Fine-tune อ่ะ ถ้าเราสมมุติว่าเราทำ Fine-tune เราต้องมีโมเดลอยู่โมเดลนึงเนาะ ที่เมื่อกี้เรา เราไปนั่ง สรรหามา นั่งดูรีซอร์ทมาว่าโมเดลสักตัวนึงเนี่ยจะเอามา มาทำ ทำ problem แก้ปัญหาเรื่อง VQA อะไรพวกเนี้ย เอ่อ โมเดลพวกนั้นน่ะ ว่าจะทำยังไงให้มันเก่ง เก่งพอที่จะมาทำเรื่องพวกนี้ เราก็ต้องมาทำไฟน์จูน เราก็ต้องไปเตรียม data set อีกเยอะแยะมากมายเลย เพราะงั้น ในโซลูชั่นที่ดีที่สุดก็คือ ณ ตอนนี้ก็คือ การทำ RAG ในสำหรับเคสที่เป็น startup แบบ ทำแบบเร็วๆ บอกว่าฉันมี vector database นะ ฉันมี document ฉันมี image นะครับ ไม่งั้นทุก วันนี้ทุกคนก็คงไม่ ทุกคนก็คงคงกระโดดไปทำ fine-tuning กัน ถ้าอยากทำ RAG ก็ง่ายมาก ก็แค่มี vector database แต่ถ้าทำ fine-tune คุณต้องมี 1 การ์ดจอ

2 คุณต้องมีเงิน ต้องมีเงินเยอะมาก ถ้า ถ้าจะทำ fine-tuning model สักตัวนึง นะครับ ครับ เพราะงั้นเรากลับมาที่ RAG กันนะครับ

RAG คืออะไร? ทำงานอย่างไร?13:38

ครับ RAG เอ่อ ผมเชื่อว่าคุณเจมส์น่าจะ น่าจะพูดเรื่อง RAG ไป พอสมควรละ จริงๆ RAG อ่ะ คอนเซ็ปต์มันก็คือว่าเรา เรามี vector database อยู่ ตัวนะครับผม เรามี source อย่างเมื่อกี้ เมื่อกี้ตัว source ของ ของ คุณเจมส์เนาะ อาจจะเป็นเรื่องของ document หรือว่าเป็น เป็นตัวพวกข้อมูล text อะไรพวกนี้เนาะ ส่วนผมอาจจะมองเป็น เป็น other source สักตัวนึง ก็คือว่า เราอาจจะมีเป็น document เราอาจจะมีเป็นรูปภาพ อาจจะมีเป็นวีดีโอ เราทำการ embed embed source เหล่าเนี้ย นะครับผม แล้วก็เข้าไปในเวกเตอร์ดาต้าเบส เป็นเวกเตอร์เวกเตอร์นึงที่ถูกเก็บไว้ว่า เวกเตอร์ระบุตัวนี้ ระบุว่า มันคือ source ตัวไหน มันคือ image ตัวไหน มันคือวีดีโอ channel ไหน นะครับผม แล้วเราก็มี user เนาะครับ 2 ฝั่ง user ทำการทำ query embedding นะครับผม ไปที่เวกเตอร์ ได้ออกมาเป็น เป็นข้อมูลที่เราต้องการจะ search นะครับ หลังจากนั้นก็เอาข้อมูลที่ search ไปผ่าน LLM นะครับผม เพื่อแปลง แปลงผลออกมา จะ 2 step นี้เราเรียกว่า collection กับ question and answer นะครับผม ในส่วนของ collection ก็คือการเตรียม data เราจะเตรียม database สักตัวนึงอะ อย่างเมื่อกี้ อย่างเมื่อกี้ใน ใน ในแลปเมื่อกี้ เราเห็นละว่าเอ๊ยคุณ คุณเจมส์มี database ที่ prepare พร้อมแล้ว ที่นี้ถ้าคุณอยากจะเตรียม vector database เอง เราต้องเตรียมยังไง นะครับผม ใน ใน section นี้มีการพูดถึงกัน แล้วก็หลังจากเราเตรียม collection database เสร็จละ นะครับ เราได้ vector database มา 1 ที่นี้เราอยากจะทำ VQA หรือเราจะอยากจะทำ

image searching image image image ใดๆ ก็ตาม นะครับผม แล้วก็ใช้ question answering มาการทำกัน เนาะ อะ เราเริ่มที่ step แรก

Image Collection: เปลี่ยนรูปเป็น Vector ทำไม?15:13

image collection นะครับผม คอนเซ็ปต์ง่ายมาก เราก็แค่แปลงรูปภาพ นะครับผม เป็นเวกเตอร์ แล้วก็ไปเข้าในเวกเตอร์ดีบี นะครับ ง่าย ง่ายนิดเดียว คำถามคือ ทำยังไง นะครับ สเต็ปแรก อะ สเต็ปแรก เอาเข้าใจง่ายๆ นะครับผม เรา มี image ใช่ไหม เมื่อกี้เราบอกแล้ว ว่า การที่เราจะทำ ทำ image หรือเราจะทำ model สักตัวนึงอะ เราต้องแปลง แปลง other source ให้เป็น text ก่อน แล้ว text อ่ะมันถึงจะไปให้ LLM ใช้ในการเรียนรู้ นะครับผม เพราะงั้นเราก็จะคงคอนเซ็ปต์นี้คือเราจะแปลง text แปลง other source อย่างเช่น image เนี่ย มาเป็น text ก่อน นะครับผม คำถามคือแปลง image เป็น text ยังไง ครับ เมื่อกี้พูดไปแล้ว นะครับ เราก็ผ่าน image captioning ไง เรามีรูปภาพ เราแปลง image นะครับผม เป็น text หลังจากเราได้เป็น text แล้ว นะครับ อะจริงๆ ง่ายเลย ง่ายเลย เราจะทำ RAG จากจาก text หรือ LLM ทำยังไง

ไม่ยาก อีก text ก็ไปทำ embedding ไง ไปทำ text embedding นะครับผม ได้ออกมาเป็นเวกเตอร์ละ เวกเตอร์เราก็แค่ไป สุดท้ายเราก็ไป insert เข้า vector database นะครับผม vector database วันนี้เดี๋ยวเราโชว์กันใน ในตัวของ MongoDB เนาะ อ่ะ คำถามที่น่าสนใจมากๆ เลย ที่ผมเชื่อว่าทุกคนน่าจะตั้งคำถามกัน นะครับ ทำไมเราไม่แปลง image เป็นเป็นเวกเตอร์เลย

อ่ะ อันนี้เป็นคำถามที่น่าสนใจมาก ตอบ ตอบหน่อย มีใครตอบมั้ย

แจกของมั้ย เอาแจกอะไรดี

แจกสมุด 1 เล่มครับ แจกสมุด 1 เล่ม อ่า ใคร ใคร ใครตอบได้ ใครตอบได้ ทำไมเราไม่แปลง แปลง image เป็น เป็นเวกเตอร์เลย

เฮ้ย ทำได้ ทำได้ คุณ คุณดูถูกพลัง พลังโมเดลลิ่งเกินไปละ

ละน้ำลายหยดละ โอเคไม่เป็นไร โอเค อะ ฮือ ห๊ะ อะไรนะ ใช้ ส ไม่ไม่เกี่ยวไม่เกี่ยวไม่เกี่ยวไม่เกี่ยว ห๊ะ อะ โอเคเฉลย ขอบคุณขอบคุณ เป็น เอาของมั้ย อ้าว โอเค อะ เราเฉลย เราเฉลย สาเหตุว่าทำไม นะครับผม เพราะว่า การเราจะทำ RAG เราอยากจะเสิร์ช เราอยากจะเสิร์ชรูปภาพ 1 รูปภาพ นะครับผม ถ้าเราจะทำ เราทำเสิร์ชรูปภาพด้วย คำว่า เฮ้ย ฉันขอเสื้อสีแดงหน่อย

ฉันขอเสื้อสีแดงหน่อย ฉันถาม ถาม ถาม RAG ไปด้วย ไปด้วย text แล้วมันจะไปเสิร์ชรูปภาพ คำถามคือ ในเวกเตอร์ดาตาเบสที่เราเก็บอยู่อ่ะตอนเนี้ย เราแปลง image เป็นเวกเตอร์ด้วย image embedding ถูกมะ

มันแปลง มันแปลงหาพฤติกรรมของรูปภาพ แต่ว่ามันไม่ได้หาพฤติกรรมของ text เพราะงั้นทางที่ดีเราควรจะ ทำรูปภาพก่อนแล้วค่อยแปลงเป็น image captioning เป็น text แล้วหลังจากนั้นค่อยแปลงเป็น text เป็นเวกเตอร์ แล้วถามว่า image embedding อ่ะ ทำไม มันเหมาะกับเคสไหนนะครับผม use case ที่เรามักจะใช้กัน นะครับผมไม่ได้บอกว่ามันไม่ดีแต่ มันเหมาะมันไม่ได้เหมาะกับแอปพลิเคชันที่เราใช้ใน ใน multimodal RAG เนาะ use case ที่มันน่าสนใจและผมเชื่อว่าทุกคนน่าจะใช้กัน ก็คือ image similarity สมมุติคุณบอกว่าคุณมีรูปอยู่ 1 รูป

คุณอยากจะ คุณอยากจะแมตชิ่งรูปนี้กับรูปที่ใกล้เคียงที่สุด เช่น คุณบอกว่า เอ๊ย คุณฉันไป ฉันเข้าไปในแอป

แอป แอปหนึ่ง มีรูปภาพ product product หนึ่ง บอก มา อยากได้สินค้าประมาณเนี้ย แล้วก็ส่งรูปเข้าไป แล้วเดี๋ยวมันเสิร์ชแมตช์รูปภาพที่มันใกล้เคียงที่สุด อันนี้ได้ อันนี้เหมาะ อันนี้เหมาะมาก นะครับผม ใน image similarity หรือการทำ identify item เนาะ อันนี้ การทำ image embedding เหมาะกับเคสนี้ แต่ถ้าสมมุติเราจะทำ multimodal RAG use case ที่เรามักจะใช้กันก็คือเรื่องของ VQA คือเรามีรูปภาพที่อยู่ในเวกเตอร์ดาตาเบส เราบอกว่าฉันอยากจะหา identify ด้วย ด้วย text ถ้าสมมุติจะบอกว่าหา identify ด้วย text ปั๊บเนี่ย ไอ้วิธีข้างล่างอ่ะเวิร์กกว่า เห็นๆ เลยครับ โอเค ทีนี้เมื่อกี้เราตั้งคำถามไปแล้ว บอกว่า เอ๊ย เราทำคอลเล็กชันกัน เรา เรา เราจะทำ source แล้วก็เก็บในเวกเตอร์ดาตาเบสนะ อะ เวกเตอร์ดาตาเบสเราพร้อมละ ถ้า vector database เราไม่พร้อม เราไม่ควรทำ RAG อ่ะ อันนี้เป็นพอยต์หนึ่งที่อยากจะเตือนทุกคนนะครับผม

เตรียม Vector Database ให้พร้อม ก่อนทำ RAG19:50

กรุณาขอให้เวกเตอร์ดาตาเบสพร้อมก่อนแล้วค่อยทำ RAG นะครับ ไม่งั้นคุณจะทำ RAG โดยที่ไม่มี databaseนะครับ ก็จะ query อะไร

ในความว่างเปล่า นิดนึง นะครับ อ่ะ โอเค เป็น

Question Answering: ถาม-ตอบ ฉบับ Multimodal20:03

meme joke ไป เนาะ question answering เนาะ concept ง่ายๆ คนถาม คนถาม คนถามไป คนถามเขาไป มันไป query ในเวกเตอร์ดาตาเบส ได้คำตอบออกมา

generate คำตอบ ไม่มีอะไร นะครับ เรามาดูคอนเซ็ปต์กัน คอนเซ็ปต์เมื่อกี้ อาจจะขยายความเพิ่มเติมจากของพี่เจมส์ เนาะ ยึดหลักการเดียวกันกับ LLM คือ เรามี Query User Query ไป Query เป็น Text หรือถามข้อความเป็น Text ไป นะครับ ผ่าน Text Embedding นะครับ แปลง Text เป็น เป็นเวกเตอร์ นะครับ เอาเวกเตอร์ไป Search เสร็จแล้วเนี่ย ทำ Similarity Search เนี่ย หาความใกล้เคียงใน vector database นะครับ ได้คำตอบออกมา ทำ Ranking เสร็จปั๊บ นะครับ ผ่าน Prompt Engineer อ่า เดี๋ยว เดี๋ยวเรามาคุย เดี๋ยวเรามา มาคุยคอนเซ็ปต์กับ Prompt Engineer ก่อนดีกว่า ว่าทำไมต้องมีสัก สังเกตมั้ย ทำไมมันต้องมีเส้นจาก Query มาสู่ Prompt Engineer นะครับผม เพราะว่ามันจะเป็นการ Ranking มันจะเป็นการ Matching กันระหว่าง คำถาม กับคำตอบ

แล้วเราเอา Prompt Engineer ตรงเนี้ย ไปให้ LLM มันจะได้คำตอบที่มันดูดีที่สุด เนาะ ถามว่าทำไมต้องทำแบบนี้ ถ้าสมมุติว่าเรามีแค่คำตอบอย่างเดียว เราเข้า LLM คำถามคือเรา เราเอาคำตอบเข้า LLM เลย LLM มัน generate อะไรก็ไม่รู้ มันอาจจะ เจนเนอเรทจากพร้อมสักอย่างหนึ่งแล้วมันก็มั่ว แต่ถ้าเกิดว่าเรามีลู่ทางว่า user ถามอะไร แล้วคำตอบเป็นอะไร ช่วยสร้างคำตอบออกมาให้มัน ใกล้เคียงกับคนตอบให้ได้มากที่สุด นี่แหละจะเป็นความสามารถของ prompt engineer เนี่ย เพราะมันจะแมทชิ่งกันระหว่าง query เป็น question กับ answer ที่มันถูก query ออกมา นะครับผม แล้วก็ได้เป็นคำตอบตอบกับ user กลับไป นะครับผม อ่ะ กลับมาที่ VQA

VQA with RAG: รวมรูปภาพในการถาม-ตอบ21:45

นะครับผม เมื่อกี้เราบอกว่าเราทำ เราทำ RAG โอ้ ง่ายๆ มากเลย LLM ทำ แล้ว LLM ก็แค่ถาม ถามไป แล้วมันก็แค่ตอบมา

ทีนี้ถ้าเราจะทำ VQA ที่เป็น RAG จริงๆ คำถามคือทำยังไง นะครับผม คอนเซ็ปต์แบบเดิม เหมือน LLM เลย เพียงแต่ user query เพิ่มขึ้นมาจากเดิมที่ที่มีแค่ text user ใส่ image ไปด้วย อ่า เหมือนที่เราทำกับ ChatGPT บ่อยๆ ไง เรา crop รูปภาพมาแล้วเราใส่ ใส่คำถามไปว่า เฮ้ย รูปภาพ รูปภาพนี้คืออะไร หรือช่วย explain รูปภาพ รูปภาพนี้ให้หน่อย นะครับผม ถามว่า เอ้ย ถ้าเป็นแบบนี้แก้ปัญหายังไง โอ้ ง่ายมาก

แปลง image เป็น text นะครับ ได้เป็น caption ได้เป็น caption เสร็จปุ๊บ เข้า query ตรงๆ เลย บอกว่ารูปภาพรูปนี้คืออะไร วิธีการนี้เป็นวิธีการทำ VQA ที่สิ้นคิด ที่สุดนะครับผม แต่ไม่ใช่เบสเคส อันนี้บอกไว้ก่อน ถามว่าทำได้มั้ย ทำได้ ทำได้เลย คุณไม่ต้องไป optimize model อะไรเยอะ คุณสามารถทำ ทำ query ด้วย text ตรงนี้ได้เลย เพียงแต่ ถ้าเกิดว่า

รูปภาพรูปนั้น รูปภาพรูปนั้น ทำ captioning มาไม่ดี RAG จะวุ่นวายทันที นะครับผม เพราะงั้น พึงระวังไว้ แล้ววิธีที่มันดีกว่าคือยังไงล่ะ

VQA แบบ Advance: ใช้ Model ที่เข้าใจทั้งรูปและข้อความ23:13

นะครับ อ่ะ อันนี้เป็น อันนี้เป็น additional ถ้าใครอยากจะ อยากจะไปต่อ นะครับ อ่า ถ้าใครไม่ไปต่อ เอ่อ สามารถหยุดตรงนี้ได้เลย นะครับ โอเค อ่ะ ถ้าไปต่อ นะครับ มี มี solution ไหนบ้าง นะครับ

1 เมื่อกี้เราบอกว่าเรา เรา เราใส่ทั้ง image ทั้ง text ลงไปละ เราจะต้องแมทชิ่งกับคำตอบ ครับผม เมื่อกี้เหมือนกัน เราจะทำ text embedding หรือทำ image to text embedding ยังไง นะครับผม วิธีการง่ายคือ เอ้า เราก็จะไปใช้โมเดลที่มันเหมาะกับ VQA RAG เลย นะครับ เราไป เราไปใช้ solution นั้นเลย นะครับผม ที่ VQA ตัวนั้นจะเข้าใจได้ทั้ง image แล้วก็ text นะครับผม 2 input พร้อมกัน ถ้าโมเดลตัวนั้นมันเข้าใจได้ แนะนำว่าให้ไปในเวย์นั้นดีกว่า ผมจะไม่ได้ลงรายละเอียดตรงนั้นมากว่าโมเดลมัน มันทำงานยังไงเนาะ เอ่อ สามารถเข้าไปได้ที่ลิ้งค์ตรงข้างล่าง เดี๋ยวสไลด์เดี๋ยวผมมีแจกให้ หรือใครอยากจะไปเสิร์ช keyword ก็ได้ นะครับผม

สรุป Multimodal & RAG: เปลี่ยนทุกอย่างเป็น Text แล้วค่อยถาม24:11

โอเค เนาะ คอนคลูชั่นวันนี้ อยากวันนี้ อยากให้ ให้รู้ อะไร นะครับผม อยากให้ วันนี้ไม่ได้ ไม่ได้คาดหวังว่าทุกคนจะเข้าใจคำว่า multimodal กับคำว่า multimodal with RAG เนาะ วันนี้อยากให้ทุกคนมาเข้าเข้าใจแล้วก็มาเปิด

เปิดโลกว่า วันเนี้ย multimodal มันเข้ามาแล้วนะ ที่ทุกวันนี้ที่เราใช้กันอยู่ มัน multimodal นะ แต่ว่ายังไม่มีใครพูดถึง อย่างวันเนี้ย ผมก็ไปหา ข้อมูลมาว่า เฮ้ย มีคำว่า multimodal กับ RAG หรือยัง นะครับ

คำตอบคือถ้าแทบไม่ค่อยมีคนพูดเลย นะครับ แต่คอนเซ็ปต์พอคอนเซ็ปต์มันง่ายๆ ครับผม เหมือน เหมือนกับ RAG เลย คือเราก็แค่ มี multi-source

นะครับผม จาก source หลายๆ ที่ image มีรูปภาพ มี text มีวิดีโอ นะครับผม เราทำการ multi modal encoding นะครับผม เราจะไม่ใช้คำว่า image encoding ละ เราจะไม่ใช้ในการทำ captioning ละ text captioning หรือ video extraction นะครับผม เราจะทำอะไรก็ได้แบ็คบล็อกตัวนึง ในการแปลง source ตัวเนี้ย ให้มาเป็น text นะครับ แล้วเราก็แปลง text มาเป็นเวกเตอร์ นะครับผม เวกเตอร์เราเก็บในเวกเตอร์ดาต้าเบส แล้วก็สุดท้ายแล้วก็จะเป็นการถามแบบเดียวกัน มี query ครับ question answer นะครับผม แล้วก็ถามไป ทำ similarity search นะครับผม ได้ออกมาเป็นคำตอบแล้วก็ถามผ่าน prompt engineer LLM แล้วก็ดึงออกมาเป็นคำตอบ นั่นเอง นะครับผม อันนี้เป็น conclusion แบบ วิธีแบบ basic ที่สุด คือเราถาม

แค่คำถามที่เป็น text แต่ถ้าเราอยากจะถามที่เป็น text และถามที่เป็นวีดีโอ ถามที่เป็น image ถามที่เป็น audio นะครับ เราไม่สามารถทำ query แบบนี้ได้แล้ว เราอาจจะทำ เราอาจจะทำได้เหมือนเมื่อกี้ เราอาจจะทำได้เหมือนเมื่อกี้ คือเรา เราทำ multi modal encoding เป็น text แล้วเราก็เอา text อ่ะ มาอัดใน query แบบนั้นทำได้ แต่ ผลลัพธ์มันอาจจะไม่ดี ในการทำ RAG นะครับผม เพราะงั้นก็ เอ่อ ถ้าใครจะทำ ก็แนะนำว่า เอ่อ ลองไปศึกษาเพิ่มเติมดูได้ครับผม

Workshop: ลองทำ Image Captioning & Vector Search26:12

เพราะงั้น เดี๋ยวเราจะเข้าสู่ workshop ของ อ่า section ของ workshop ละ ว่า วันนี้มีอะไรกันบ้าง นะครับผม หลักๆ วันนี้เราจะเข้าใจคำว่า image captioning นะครับผม แล้วก็การทำ image collection ในการเตรียม vector database ทั้งหมดแล้วก็การทำ vector search นะครับผม มา เอ่อ จาก จากฝั่งของ image นะครับ ที่เราเก็บใน vector database แล้วอ่ะ เราจะไป query ข้อมูลยังไง นะครับ โอเค

โอเค จึดๆ อะ โอเค นะครับผม อ่ะ ถ้าเขา ทุกคนเข้า เข้าไปแล้ว มันจะ มันจะเข้าไปที่ GitHub เนาะ เอ่อ ถ้าผมจำไม่ผิดมันจะ มันจะลิงก์กิ้งไปที่ GitHub

มีใคร มีใคร อ๋อ โอเค อะ อ่ะ ถ่ายไว้ก่อน

ถ่ายไว้ก่อน วันนี้ผมอาจจะไม่รันจริงนะครับ เนื่องจากว่าการรัน ผมรันไปแล้วเมื่อเช้า มันผ่านเนาะ แต่ถ้าใครไม่ผ่านก็ ก็ ทักมาในเรโปได้ เดี๋ยวเค้าไปแก้

อ่า ใช้เวลา Run ทั้งหมดเนี่ย จริงๆ จริงๆ ใน ในโค้ดที่ผมเตรียมไว้ ในเรโปที่ผมเตรียมไว้อ่ะ มันใช้เวลา Run ประมาณ 2 ชั่วโมง แบบ No GPU นะครับ เพราะงั้นก็ ก็ถ้าใครอยากจะ Run ก็ผม เดาว่า Section นี้น่าจะจบประมาณ ประมาณ 5 ทุ่ม เที่ยงคืน คงไม่ว่ากันเนาะ อ่า อย่าเลย อะ โอเค ก็เข้าไปก็จะเป็น

อ่า สังเกตนะครับผม เพิ่งอัพเมื่อ 5 ชั่วโมงที่แล้วนะครับผม ตอน 4 โมงเย็นนะครับ แปลว่า เพราะว่าผมอัปโหลดในเวลาทำงานนะครับผม อ่า เป็นคนดีของสังคม 1 คน ครับ โอเค เข้าไปก็จะเป็นโคแล็บ มีใครไม่เคยใช้โคแล็บมั้ย เห้ย โอเค โอเค เป็น section แรกที่ไม่มีใคร ที่ทุกคนใช้โคแล็บกันได้ โอเค นะครับผม อ่ะ งั้นผม ผมจะไม่อธิบายอะไรเยอะเนาะ ก็ section มีประมาณนี้ครับผม ของๆ workshop ก็ ถ้าอยากลองไปรันเนาะ ก็ อ่า มีเรื่องของ install installation มีการ login login hugging face นะครับ ก็ เอ่อ เข้าไปล็อกอินกันได้เนาะ อ่า อันนี้ login image data set image data set เราจะใช้ เนื่องจากว่าเรามาเป็นทีมของโปเกมอนนะครับผม เราก็จะ ใช้โป pokemon blib นะครับ captioning

นะครับ ถามว่าข้อมูล ข้อมูล data เป็นยังไง ข้อมูล data ประมาณนี้ครับ อ่า ข้อมูล data ก็ ก็จะมีรูปภาพอยู่ เราจะเตรียม เตรียมข้อมูลไว้ก่อน คือมีรูปภาพ 1 อยู่ในรูป อยู่ แล้วก็ เราก็มี caption นะครับ caption ว่า เอ้ย text มันเป็นยังไง นะครับ สังเกตจาก caption ได้เลยว่าน่าจะใช้ LLM อ่า น่าจะใช้ model สักตัวนึง นะครับ ในการแปลง แปลง image เป็น text นะครับผม เพราะงั้นไม่ต้องคาดหวังกับผลลัพธ์ว่ามันจะดี ดี ดีมากน้อยแค่ไหน อันนี้ก็เป็นคอนเซ็ปต์ให้ ให้ดูนะ ว่าทำยัง นะครับ อ่ะ เราเริ่มกัน เริ่มกับการเตรียม data กัน นะครับ หลังจากเราได้ data มาเสร็จแล้วเนี่ย เราเอาไปทำ นะครับ เอ่อ ในเรื่องของ preparation เรื่องของตัว model image captioning เนาะ ก็ เอ่อ ผมใช้ Google vit base นะครับผม

ก็ เอ่อ vit - Vision Transformer ครับผม ถ้าใครอยากไปดูก็ไปลองดูได้นะครับ Vision Transformer base patch 16 ก็ เอ่อ จะเป็นโมเดลที่ เอ่อ เป็นโมเดล Vision Transformer ตัวแรกๆ ที่สามารถแบบทำ ทำพวก image captioning ได้นะครับ โอเค ก็ อ่า มีเอาต์พุตออกมา นะครับ เอ่อ เอาไปรันทำโทเคไนซ์ อันนี้ปล่อยไป ปล่อยไป อันนี้เป็น step ที่ผมเข้าใจว่าหลายๆ คนเป็น dev น่าจะไม่ ไม่ต้องอยากรู้เรื่องนี้ นะครับ อันนี้เป็นเรื่องของ AI researcher หรือว่าแบบ data scientist ในการ แปลง image เป็น text นะครับผม แล้วก็เทรนโมเดล ทำ เทรนโมเดลนะครับผม สำหรับคนที่อยากจะลอง อยากจะลองกลับไปบ้านแล้วบอกว่า เอ้ย ฉันมี custom data ระหว่าง image กับ caption อยู่ ฉันอยากจะเทรน image captioning เอง นะครับ เทรนยังไง ก็ เอ่อ มี sequence to sequence train argument นะครับ ก็เทรนมา อ่าแสดง output เอ่อ ก็ เอ่อ ผมหยุดเทรนไป เพราะว่าตอนนั้นผมเทรนไปได้ซักประมาณ ชั่วโมงกว่าๆ มั้ง เอ่อ นั่นแหละ แล้วก็ เอ่อ ผลลัพธ์มันไม่ได้ดีขึ้น เท่าไหร่ นะครับ ก็เป็นเรื่องที่แย่นิดนึง ก็ปล่อยไป

อ่ะ โอเค แล้วก็สุดท้ายก็เซฟโมเดลนะครับผม สำหรับคนที่ไม่ต้องการ สำหรับคนที่ไม่ต้องการเทรนโมเดลเองนะครับผม เอ่อ ให้กระโดดมาใน ในหน้าของ load pipeline เลยนะครับผม ก็ ก็ กระโดดมาเลย จากเดิมทีที่เราจะต้องโหลดพรีเทรนทำโมเดลทำ ทำ data set เตรียม data set train training model นะครับ เรากระโดดมาเลย เราไปหยิบโมเดลของคนอื่นเค้ามาใช้ นะครับ แบบง่ายที่สุด เราไปโหลดโมเดลของคนอื่น ซึ่งผมก็ push โมเดลไปแล้ว ใน Pokemon captioner ครับ ได้มาเสร็จปั๊บได้เป็น pipeline อ่ะ เรา เอ่อ ทำการ นะครับผม ทำ หลัง หลังจากเราได้ pipeline เสร็จปุ๊บ อุ๊ย ผมไม่น่ากดรันเลย ยาวละ

อ่า หลังจากเราได้ pipeline มาเสร็จปุ๊บ เราเอา image ที่เราต้องการนะครับผม ไปเข้า แล้วก็มันจะ generate รูปออกมา อ่า นะครับ อันนี้ก็ เรื่องของ อ่ะ ต่อจากนี้จะเป็นเรื่องของ RAG ละ ก็ เอ่อ เรามีการเตรียมนะครับ เรื่องของ dataframe ไว้ อ่า หลังจากเรามี dataset รูปภาพมาเสร็จปุ๊บ เรา เรามีรูปภาพนะครับ แล้วก็มี text ที่เป็น caption ที่เราเตรียมไว้ แต่เราเราจะไม่ใช้กัน เราจะใช้ความสามารถของ ของ เอ่อ image captioning ที่เราเทรนไว้นะครับผม ถ้าเรานึกถึงสภาพจริงๆ เรา ตอนเราเทรนโมเดลกับตอนเรา เราเราจะแปลงจาก image image to to text ด้วย image captioning นะครับผม เราก็จะมี เราก็มี data lake ของเราที่เป็นแค่ image อย่างเดียว นะครับ แล้วเอา image มาทำ image captioning เนาะ แล้วก็จะได้ caption ออกมา นะครับผม ถ้าสังเกต caption ดีๆ มันใกล้เคียงกันมากเลยนะครับ เนื่องจากว่ามันน่าจะได้ข้อมูล มันน่าจะได้ข้อมูล มาแบบเดียวกัน ผมขอผมสันนิษฐานอย่างนี้นะ มันน่าจะ เอ่อ dataset นี้น่าจะถูกเตรียมมาด้วย ด้วย AI AI ตัวโมเดลใกล้ๆ กันมันก็เลย generate คำตอบมาใกล้แบบเดียวกันมากเลย เนี่ย อย่างตัวเนี้ย รูปภาพรูปเนี้ย รูปภาพแต่ละรูป text ก็คือ

อ่า ข้อมูลที่เราตั้งไว้เป็น output เนาะ ส่วน caption ก็คือสิ่งที่โมเดลมันจะ generate ออกมาได้ นะครับ หลังจากนั้นเราก็ออมามาคอนเวริตรูปภาพนะครับผม

จากเดิมทีที่เป็นฟิว image เนาะ เป็น base64 เพื่อเราจะเก็บไว้ใน MongoDB เนาะ อ่า โอเค step ต่อไป step ต่อไปหลังจากเราทำเราทำ image captioning เราก็ได้เป็น caption ออกมาแล้วที่เป็น text นะครับ เราเอามาทำ text embedding ในการแปลงจาก แปลงจาก text นะครับผมให้ออกมาเป็นเวกเตอร์ อ่า ก็ผ่านโมเดลโมเดลนึงแหละ ผ่านโมเดลโมเดลหนึ่งไม่ต้องไปสนใจอะไรตรงนี้เยอะนะครับผม นะครับ อ่า ก็จะได้จาก caption นะครับผม จาก caption ตรงนี้ เราก็จะได้ embedding หน้าตาแบบ นะครับผม อย่างที่เมื่อกี้ครับ เมื่อกี้ของพี่เจมส์เขาบอกมาว่า เออ embedding มันหน้าตาอย่างไง image หน้าตาอย่างงี้ครับ เป็นชุดข้อมูลตัวนึงนะครับผม หลังจาก AI AI มัน learning มาเสร็จแล้ว มันพยายามทำความเข้าใจแล้วเรา เราก็จะได้แบบ base model มาตัวนึงเนาะ base model ตัวนั้นน่ะ จะบอกมาว่า เอ่อ เวกเตอร์แต่ละตัวของ ของตัว embedding อ่ะ มันหน้าตา หรือมีความสัมพันธ์ในเชิง vectorize ตัวนึงยังไงนะครับ

โอเค อ่ะ หลังจากนั้น หลังจากนั้น หลังจากเราเตรียม data set เสร็จละ นะครับ เราได้ เราได้ data ทั้งหมด 2 dimension ที่น่าสนใจ 2-3 dimension ที่น่าสนใจคือ เราได้ dimension ของรูปภาพ นะครับผม เราได้ dimension ของรูปภาพที่ ที่เรา input เตรียมไว้นะครับ เราได้ dimension ของ caption ที่หลังจากเราเอา image ไปผ่าน image captioning แล้ว เราได้ text text มาเพื่อที่จะเอาไปเก็บใน RAG ของ LLM นะครับ แล้วก็ อ่า จาก caption ที่เป็น text เราเอาไปทำทำ text embedding เพื่อออกมาให้ได้เป็น เป็นเวกเตอร์นะครับผม อยู่ในคอลัมน์ของ embedding นะครับ โอเค

แล้วก็ทีนี้เราจะมาเตรียมเข้าสู่ MongoDB ละ อ่า เดี๋ยวจะถามว่าไม่ใช่ไม่เป็น section ของ MongoDB นะครับ ก็ MongoDB นะครับผม เราจะใช้ตัว MongoDB Atlas นะครับ ผม ถ้าสำหรับใครที่ยังไม่เคยมีโปรเจกต์นะครับผม ให้ให้ไปสร้างอ่า ตัว organization นะครับผม แล้วก็โปรเจกต์แล้วก็ทำคลัสเตอร์สร้างคลัสเตอร์ออกมา ครับ อาจจะเลือก Free Tier ก่อนก็ได้นะครับผม สำหรับการทดลอง ในแลปครั้งนี้นะครับผม อ่า อย่าลืมเซ็ตเน็ตเวิร์คนะครับผม เป็น 0.0.0.0 เพื่อให้แบบ colab เข้าถึงได้นะครับ ก็ เอ่อ หลังจากเซ็ตตรงนี้เสร็จปั๊บ ไปเซ็ต Connection Config นะครับ อ่า ก็ไป connection config clustering แล้วก็ไปอัพเดทนะครับผม ทำผ่าน connection นะครับเราจะได้ URL มาตัวนึง นะครับ อย่าลืม อย่าลืมจำพาสเวิร์ดของคุณไว้ นะครับ เพราะถ้าพาสเวิร์ดหายคุณต้องรีเซ็ตพาสเวิร์ดอย่างเดียว นะครับแล้วมันจะมีปัญหา กับ production ตัวอื่นๆ อย่างมากมาย นะครับ อ่า เราได้ URL แล้วเอามาแปะ แปะใน แปะใน config URL ตัวนี้ โอ้โห ไม่น่ากดเลย นะครับ แล้วก็ โอ้โหยาวละ

นะครับ แล้วหลังจากนั้นก็ไป get client อ่าอันนี้ get client ไม่มีอะไร อ่าเราเตรียม data มา 3 3 คอลัมน์เนาะ อย่างที่เมื่อกี้บอกไปมี image ที่เราแปลงละจากจากเดิมทีที่เป็น image pil เนาะ image pil มันเป็น object ตัวนึงในใน ในการเก็บแคชของ image ใน Python เนาะ แต่ถ้าเราจะเอาตัว ที่ pil image อ่ะไปใส่ใน MongoDB อ่ะ มันจะใส่ไม่ได้ เราต้องแปลงมันเป็น base มาตรฐานก่อน ก็คือแปลงมันเป็น base64 แหละ วิธีง่ายที่สุดละ นะครับ แต่ทางความเป็นจริงอย่าไปทำอย่างงั้นเลย เราเอาไปเก็บใน object database ดีกว่าใช่ไหมครับ ใช่ไหมครับ อย่าทำอย่างงั้นเลย มันเป็นเรื่องที่ไม่ดีหรอก เนาะ แต่เนื่องจากว่าวันนี้เราไม่ได้ขึ้นตรงกับ cloud เจ้าไหน เพราะงั้นนะครับ เราก็แปลงเป็น base64 ง่ายๆ เลย นะครับ ได้ image อ่าแปะ เป็น image64 นะครับ เรามี caption ที่เราทำการทำ

ทำ image captioning แล้วก็ embedding นะครับผม ของ text text embedding นะครับ อ่า โอเค แล้วหลังจากนั้นเราก็ทำการ

insert มันเข้าไป insert มันเข้าไป อะ ก็จะได้หน้าตา ข้อมูลประมาณนี้ ในเวกเตอร์ clustering นะครับ ถ้าเราไปดู

ถ้าเขาไปดูใน database ก็จะหน้าตาแบบนี้

จริงๆ ก็เหมือนกันแหละ ไม่ต่างกัน

ไม่ต่างกัน อ่า นี่ ตึง โหลดแป๊บนึง

อ่ะ โหลดนาน ปล่อยไป

สาธิตการใช้งาน: ค้นหารูปภาพด้วย Text36:54

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

ไม่ชอบเขา กับความรู้สึกนี้ว่า มันเป็นยังไงอ่ะ นี่ๆๆๆๆ มันเป็น มันมีตรงนี้ มันมีตรงนี้ มันมี array มันมี embedding array 1,024 นะครับ จำตัวเลขไว้ จำตัวเลข 1,024 ไว้ แล้วเดี๋ยวเรา เราจะตอบ เราจะมาถาม ถามกัน ว่าไอ้ 1,024 คืออะไร ครับผม อ่า นะครับ อะ โอเค หลังจากเราเตรียม database พร้อมแล้ว เราจะไปทำเข้าสู่ การ search search ละ นะครับ vector search คืออะไร นะครับ vector search ก็คือ เรามี vector อยู่ตัวนึง แล้วเราอยากจะ ไป search เนาะ เราไป เราอยากจะไป search ใน ในถัง database เนาะ เพราะงั้นการที่เราจะทำ search อ่ะ เราต้องไปนั่งตั้งค่า search ก่อน ซึ่งใน mongoDB อ่ะ มี มีสิ่งที่เราเรียกกันว่า Atlas Search นะครับผม ก็คือจะเป็น เป็นการทำ vector vector searching อย่างนึง เนาะ ซึ่ง อ่า เราสามารถไปเลือกใช้ตรงนี้แล้ว นะครับ ใน Atlas Search แล้วก็ไปที่ Atlas Vector Search เลือก JSON Editor เนาะ แล้วมันก็จะมี มี ตัว JSON ที่เมื่อกี้คุณเจมส์อธิบายไป ว่า ว่า เอ้ย มัน มันสามารถ ทำ config อะไรพวกนี้ได้นะ ซึ่ง อ่า คุณจะไป select database ของคุณ ว่าคุณอยากจะทำ ทำ เอ่อ search ที่ ที่ database ตัวไหน นะครับผม แล้วก็มี indicator ในการ search แบบไหนบ้าง นะครับผม

คำถาม คำถาม คำถาม คำถาม คำถาม จากใน JSON ตัวเนี้ยครับผม เราเห็น type เนาะ type เป็น vector นะครับผม path เป็น embedding นะครับผม num dimensional เป็น 1,024 แล้วก็มี similarity นะครับผม เป็น dot product คำถาม dot product คืออะไรครับ

โอ้ ขอบคุณ

เคว้งคว้างมากเลย dot product คืออะไร ฮื้อ ตอบหน่อย โอ้ เคว้งคว้าง

อ่ะ อ่ะ โอเค เฉลย โอ้ เศร้าใจ dot product คือ คือ เป็น similarity similarity method ตัวนึง นะครับผม ในการหาความใกล้เคียงกัน ระหว่าง vector a กับเวกเตอร์ b นะครับผม อ่ะ แบบอธิบายแบบง่ายๆ ง่ายๆ นะครับผม เพราะงั้น เอ่อ เวลาเราจะใช้ similarity ครับผม เวลาเรา เราเลือก method แต่ละ method อย่างที่เมื่อกี้ เจมส์เขาบอกเนาะ มี dot product มี dot product มี cosine แล้วก็มี

Euclidean distance อ่า ใช่ๆ นะครับผม มี 3 ตัวนี้ เนาะ ซึ่งเราก็สามารถไปเลือกใช้ได้ ซึ่งแต่ละตัวมันก็จะมีวิธีการในการ ในการเสิร์ชที่ไม่เหมือนกัน คือถามว่ามันคำนวณมั้ย มันคำนวณเหมือนกัน แต่ว่า ไดเมนชั่น ที่มันจะได้ ออก ได้ออกมา ครับผม มันจะแตกต่างกัน ซึ่งแล้วแต่ ยูสเคสที่จะเราจะเอาไปใช้งาน เนาะ อ่า เวกเตอร์เสิร์ชชิ่ง ก็ อ่า ไม่มีอะไร โค้ดอันนี้ก็ใช้แบบเดียวกัน นะครับ เราจะทำลิมิต นะครับผม ลิมิตไว้ 4 แล้วก็ อ่า เซตแคนดิเดตไว้สัก 150 นะครับผม เราเซตไว้เลยว่า อ่า เราจะไป เราจะไป เราจะไปวิ่งไปดูที่ เอ่อ เราจะวิ่งไปดูที่ฟิวล์ไหน นะครับ ว่า อ่า ฟิวล์ไหนคือ embedding ที่เราเก็บไว้อยู่ หรือ vector ที่เราเก็บไว้อยู่ นะครับผม หลังจากนั้นเราจะ เราจะเอาอะไรออกมา นะครับผม สกอริ่งนะครับผม หลังจากเรา เราเช็ก มีการ searching ไปแล้วเราทำ scoring แล้วก็ sorting มันออกมาว่าเราจะเอาตัวไหน บ้างนะครับผม อ่า คอลัมน์ที่เราจะออกมา อ่า ถ้าสมมุติว่า

วาลูเป็น 0 นะครับผม คีย์ของไอดีเป็น 0 ก็คือเราจะไม่เอาตัวนั้นออกมา แต่ถ้าสมมุติ value เป็น 1 ก็คือเราจะเอาคอลัมน์นั้นออกมาเนาะ image64 โอ้ เราก็จะเอา image ออกมาว่า สิ่งที่เราเสิร์ชไปอะ image 64 หรือตัวรูปภาพรูปนั้นคืออะไร แล้วก็ caption ว่าเป็น caption อะไร นะครับผม เช่น เราตั้งคำถามมา query I want to see your your pikachu โอเค แล้วก็ทำ picture search มา นะครับ ก็จะได้ผลลัพธ์ออกมา 34 ตัว อย่างงี้ นะครับผม อ่า มี มี caption ที่ โอเค มี caption ที่โอเค a very cute looking for Pokemon picture with big eyes ครับผม อ่า ตัวที่ 2 เหมือนกัน อ่า โปเกมอน อ่า อือ อือ yellow-black pokemon pikachu with pink eyes นะครับ ทีนี้เรามาดู response ผลลัพธ์

หลังจากเราดู response แล้วเราค่อนข้างจะผิดหวังนิดนึง ตัวไหนเป็นพิคาชู พิคาชูบ้างครับ มีแค่ตัวขวาสุดเนาะ แล้วถามว่าทำไม ทำไม 3 ตัวที่เหลือมันไม่เป็นพิคาชูอ่ะ แต่แต่ caption มันดูเป็นพิคาชูมากเลยนะ เนี่ย เนี่ย เนี่ย เนี่ย เนี่ย caption บอกว่า อ้อ a very cute looking Pokemon Pikachu with big eyes big eyes with

ทั้ง 2 ตัวเหมือนกันเลย นะครับผม หมายความว่าไง หมายความว่า data ที่เราทำ image generation มันออกมาไม่ได้ ไม่ดี เวลาเรา searching ออกมา เรา searching image ออกมา มัน มันก็เลยได้ไม่ดีเหมือนกัน เพราะงั้นการที่เราจะทำ image captioning ให้ ให้ เอ่อ การที่เราจะทำ ทำตัว multimodal RAG นะครับผม ให้มันดีอะ อ่า การแปลงจาก image ออกมาเป็น text อ่ะ มันควรจะดีด้วยเหมือนกัน ก็คือหมายความว่า ณ ตอนเนี้ย

ปัญหาและการปรับปรุง: Image Captioning สำคัญมากแค่ไหน?42:20

เราทำ image captioning ได้ไม่ดีพอ เพราะงั้นเราจะแก้ปัญหานี้ยังไง เราต้องย้อนกลับไป back กลับไป back กลับไปแล้วแก้ไรได้บ้างนะครับ เราแก้ เราแก้ dataset ได้มั้ย เราแก้ dataset ไม่ได้ เราแก้ เราแก้ตัว image captioning ได้มั้ย นะครับผม เนี่ยเราแก้ back prop กลับไปว่า เออ เราจะทำตัวไหนให้มันได้ดีที่สุดอะ เราก็จะได้ผลลัพธ์ออกมาที่ดี แต่อย่างน้อย อย่างน้อยที่สุดวันนี้ นะครับผม มันสามารถเอารูปภาพออกมาได้แล้ว นะครับ มันสามารถเสิร์ชออกมาได้แล้วจากแค่คำว่า text จากคำว่า I want to see your Pikachu แล้วมันก็เสิร์ชออกมาได้แล้วแต่สิ่งที่มันใกล้เคียงที่สุดนะครับ ผลลัพธ์สุดท้าย เราสามารถเอา image กับ เราสามารถเอา text สองตัวเนี้ย ไปผ่าน LLM เพื่อ generate คำตอบออกมาได้ ต่อเนื่องไปเรื่อยๆ นะครับผม ส่วนในพาร์ทของ generate ผมจะไม่แสดงให้ดูเนาะ เพราะผมเชื่อว่า ทุกคนน่าจะเขียนพร้อม ได้กันอยู่แล้วเนาะ เพราะงั้นผลลัพธ์สุดท้ายตรงนี้ก็ขอฝากไปแล้วถ้าเกิดว่าใครมีคำถามอะไรหรือใครสนใจอะไรนะครับผม

สรุปและคำขอบคุณ43:20

ก็อ่าเข้ามาคุยกันได้นะ ครับผมก็สำหรับวันนี้พิคาชูก็ขอบคุณทุกคนนะครับ ピカ ピカ ピカ

กาวสมใจยัง? / ขอบคุณมากครับ ผมตอนแรกไม่คิดว่าจะมาเป็น ピカチュウ จริงๆ นะฮะ กำลังเซฟอยู่ ทำไมไม่แต่งเต็ม ทั้งตัวเลย อ๋อมีแล้วมีแล้วโอเค นะครับผม ก็เดี๋ยว

ประกาศกิจกรรมเล่นเกมและแจกของรางวัล43:45

ก่อนที่เดี๋ยวเราจะมาถ่ายรูปรวมกันนะครับผม พอดีของที่ระลึกนะฮะ ยังมีอีกเพียบเลยนะครับผม ก็เดี๋ยวเราจะมาเล่นเกมคาฮูทกันสั้นๆ ประมาณ 15 ข้อแบบไวๆ พี่ฟี่ ครับผม สำหรับคนที่ได้อันดับ 1 2 3 4 5 นะครับผม

ก็สามารถเลือกของที่ระลึกได้คนละ คนละ 3 ชิ้นละกันนะฮะ คนละ 3 ชิ้นไปเลยนะครับผม เออ สปีคเกอร์เล่นไม่ได้นะ สปีคเกอร์เล่นไม่ได้