🎞️ Videos Hybrid Semantic web with MongoDB and Vector Search using LangChain.js and Phi-3

Description

This talk provides the way to build intelligent applications powered by semantic search and GenAI over any type of data using a full-featured vector database, LLM framework, and open small language models with low-cost development. For the frontend site, I will use Vercel using Vue.js. For the backend site, I will use Node.js for MongoDB API and Ollama API. The agenda is described below. - Preparing local environments - Ollama with Phi-3-mini - Cloudflare Tunnel - MongoDB Atlas and Atlas Vector Search using Podman - Integrate MongoDB and Ollama using Ollama JavaScript library - Hybrid Semantic search with Reciprocal Rank Fusion (RRF) - Deploying GenAI web application with a low-cost budget to Vercel (Vue.js) and MongoDB App Services (Node.js) - Key takeaways and challenges. MongoDB Thailand User Group https://www.facebook.com/groups/mongodbthailand

Chapters

  • แนะนำตัวและ MongoDB User Group 0:00
  • Web Search และ MongoDB Killer Feature คืออะไร? 0:32
  • Flexible Schema: จุดเด่นของ MongoDB 2:02
  • MongoDB Atlas: SaaS/PaaS ของ MongoDB 3:05
  • GenAI กับ MongoDB ทำงานร่วมกันอย่างไร 3:40
  • Semantic Web คืออะไร? ทำไมต้อง Semantic Search? 4:43
  • Semantic Web เชื่อมโยงทุกอย่างอย่างไร? และ AI/GenAI มีบทบาทอย่างไร? 6:54
  • MongoDB เก็บข้อมูลอย่างไรใน Semantic Web Search? 8:19
  • Vector Search ใน MongoDB คืออะไร? 8:43
  • Embedding Model และ Large Language Model คืออะไร? 9:22
  • Embedding Model ใน MongoDB ทำงานอย่างไร? 11:49
  • Vector Search บน MongoDB Atlas 12:50
  • Search Score ใน Vector Search สำคัญอย่างไร? 15:13
  • วิธีการให้คะแนน Search Score ใน MongoDB Atlas 17:19
  • Demo: การใช้งาน Vector Search กับ Local Model (Ollama) 20:16
  • สรุปการใช้งาน Vector Search และ Local Model แบบ Offline 23:52

Transcript

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

แนะนำตัวและ MongoDB User Group0:00

สวัสดีครับ

ผมมาเป็นตัวแทนของ MongoDB User Group นะครับ เราจะมี QR code นะครับขอโฆษณานิดหน่อย ก็คือว่าเรามี MongoDB User Group ใน Thailand นะครับ สำหรับคนที่สนใจหรือว่าใช้งานของตัว MongoDB นะครับ เผื่อต้องการที่อยากจะสอบถามปัญหานะครับ เราเป็น community นะครับ อันนี้เป็น non-commercial นะครับ

Web Search และ MongoDB Killer Feature คืออะไร?0:32

โอเคนะครับ วันนี้ผมจะมาพูดถึงตัวการใช้งานของ

web search นะครับ ผมเข้าใจว่าทุกท่านน่าจะรู้จัก web search อยู่แล้วนะครับ ก่อนอื่นเลยนะครับอยากสอบถามว่ามีใครที่ไม่เคยใช้

MongoDB เลย

อ้อ 2 ท่าน 3 ท่านนะครับ

โอเคครับไม่เป็นไรครับ

แสดงว่าคนส่วนใหญ่รู้จัก MongoDB มาก่อนถูกมั้ยครับ มีการลองเล่นมาเล็กๆ น้อยๆ เนาะนะครับ งั้นในวันนี้ผมก็จะไม่ได้พูดถึง MongoDB ที่เป็นส่วนของ core database นะครับ แค่กล่าวว่า MongoDB ที่ทุกท่านใช้งานอยู่ปัจจุบัน เนี่ยนะครับ สิ่งนึงที่เป็นจุดหลัก ถ้าเวลาเราพูดถึง MongoDB สิ่งที่เป็น killer feature เลยนะครับ มีใครสามารถตอบได้มั้ยว่า MongoDB killer feature เลยทำไมคนถึงนิยมใช้ MongoDB มากเพราะอะไร

อาจจะไม่มีของแถมนะครับ ณ ตอนนี้ แต่แค่อยากทราบว่ามีความคิดเห็นว่ายังไง เพราะว่าในห้องส่งนี้ทุกคนบอกว่าใช้ MongoDB หมดเลย ส่วนใหญ่นั่นก็หมายความว่าทุกคนต้องรู้ว่าทำไม เราถึงใช้ MongoDB อาจจะบอกบริษัทบังคับเหรอ หรือว่าเพราะว่ามันทำอะไรได้บ้างนะครับ อันนี้เลยอยากสอบถามนะครับว่า มีใครพอจะอาสาตอบได้มั้ยครับว่าทำไมคุณถึงเลือกใช้

MongoDB

Flexible Schema: จุดเด่นของ MongoDB2:02

ขอบคุณมากครับ

ในความส่วนตัวคือว่าผมเองนะครับ เรามีเวลาเยอะนะ ผมก็เลยจะพูดนิดนึงนะครับว่า ปกติแล้วผมมาทำ SQL Server มาก่อน ผมเป็นสาย relational database มาก่อนประมาณ 15 ปีเป็นอย่างน้อย เพราะฉะนั้นผมมาทำ MongoDB เนี่ย สิ่งนึงที่ MongoDB killer แน่นอนก็คือ flexible schema จุดชูโรงเลยนะ มากกว่าแค่ easy to development โอเคมั้ยครับ เพราะงั้นผมรู้แล้วว่ามัน easy นะเพราะมันเป็น flexible แปลว่าคุณอยากจะ insert อะไรก็ได้ทั้งนั้นแหละ ขอให้ใช้ driver แล้วกันขอให้มันลง MongoDB แล้วกัน มันก็จะมาเลย schema มาเลย เพราะฉะนั้นมันคือ flexible schema อันนี้เป็นการบอกว่า ถ้าเราไปเปรียบเทียบกับยี่ห้ออื่น อะไรล่ะที่ MongoDB รู้สึกว่าดีก็คือ flexible schema

นะครับ อันนี้คือสิ่งที่เหมือนขายของนะแต่เป็นการอธิบายว่า มันแตกต่างอย่างไรนะครับ

MongoDB Atlas: SaaS/PaaS ของ MongoDB3:05

ณ ปัจจุบันครับ MongoDB เนี่ยนะครับ ไม่ใช่เป็นแค่ database อย่างเดียว MongoDB เนี่ยมี SaaS เราเรียกว่าเหมือนเป็น SaaS หรือเป็น PaaS นะครับ ของตัวเองชื่อว่า MongoDB Atlas คือใช้งานได้ฟรี limited storage นะครับบน cloud

3 เจ้า ที่ทุกท่านสามารถจะเลือกใช้ได้คือฟรีนะ นอกจากเราจะ develop ใช้งานแล้วทุกคน ผมเชื่อว่าทุกคนใช้ community edition อยู่แล้ว เพราะงั้นทุกคนก็สามารถที่จะเล่นฟรี เอาสิ่งที่ตัวเอง develop ไปขายได้ ทำได้ทุกอย่างนะครับ

GenAI กับ MongoDB ทำงานร่วมกันอย่างไร3:40

แต่ในวันนี้ที่เราจะพูดถึงเนี่ยเป็น feature นึงที่ มันก็อาจจะมีบน community edition ใน soon นะครับ

แต่ ณ ปัจจุบันตอนนี้ที่เราจะมีการ demo กันเนี่ย ก็คือ เป็นการใช้ feature นึงที่ปัจจุบันเรานิยมกันพูดถึงกันมาก ก็คือการใส่ feature ที่เรียกว่า AI หรือบางทีเราจะเรียกคำว่า application ที่เป็น GenAI application นะครับ ซึ่งเดี๋ยวเรามาดูว่ามันสามารถทำงานได้เข้ากับตัว MongoDB แล้วก็เป็น web frontend ได้ยังไง โดยที่เราจะ simulate ในการ develop ทุกอย่าง บนเครื่องคอมพิวเตอร์ของเรา โอเคมั้ยครับ เราแทบจะบอกว่าเราปิดเน็ตเราก็สามารถจะ develop งานได้ครบวงจร ของการทำตัวแอป GenAI นะครับ ซึ่งผมก็จะแน่นอนครับเป็นงาน JavaScript เนาะ เพราะฉะนั้นเราก็จะเน้นไปที่ตัว JavaScript framework ทั้งหมดนะครับ ผมจะใช้ตัว Vue.js นะครับแล้วก็ตัวที่เป็น Node.js

นะครับ

Semantic Web คืออะไร? ทำไมต้อง Semantic Search?4:43

สิ่งที่เราจะพูดกันก็คือผมจะพูดถึงการกล่าว สิ่งที่มันเกิดขึ้น ณ ปัจจุบันก็คือ semantic web คืออะไร ผมคิดว่าหลายๆ ท่านอาจจะพอรู้อยู่แล้วเนาะ ผมก็จะแบบค่อยๆ ข้ามไปนะอย่างช้าๆ แต่เรามีเวลาเยอะนะครับ ต่อไปก็คือเราพูดถึงว่าอะไรคือ Atlas Vector Search แล้วเราสามารถทำอะไรกับมันได้บนเครื่องคอมพิวเตอร์ ของเรานะครับ แล้วก็มี demo ให้ดูนะครับ แล้วก็อาจจะมี code ที่ผมอัพโหลดไว้บน Git อยู่แล้ว นะครับ ซึ่งมันอาจจะยังไม่เรียบร้อยเนาะ แต่สามารถที่จะเอาตัวอย่าง code ไปลองเล่นเองได้ นะครับ เป็นแบบ offline ได้ด้วยนะครับ

ถ้าพูดถึงตัว semantic web นะครับ อันนี้ผมก็นะครับนิยามทุกคนทราบอยู่แล้วนะว่า semantic web ก็คือการสร้างระบบ web search บางอย่าง ผมเน้น focus ที่ search แล้วกันเนาะ search บางอย่างที่มันสามารถที่จะฉลาดพอที่รู้เรา ที่รู้สิ่งที่เราพิมพ์ไปเนี่ยหมายถึงอะไรที่ไม่ใช่ matching exactly ก็คือหมายความว่า คุณ search คำว่า car มันไม่ได้สนใจเป็นคำว่า car เป๊ะๆ มันอาจจะเป็นบริบทที่มันรู้เองจากที่คุณรู้เรื่องนะครับ เราเรียกว่าเป็น semantic web หรือ web ที่เน้นความหมายของมัน นะครับซึ่งมันอาจจะเป็นเรื่องที่เก่ามาหลายปีแล้ว แต่ผมคิดว่าปัจจุบันมันเป็นการ implement จริงมากขึ้น นะครับ เพราะงั้นมันก็จะพูดถึงแบบ smart search เนาะ มันก็จะมีเรื่อง core feature หลักของตัว semantic web ที่เรารู้จักกันเนี่ยก็คือหมายความว่า มัน search มันรู้จัก by context เช่นตัวอย่างข้างบนก็คือ คำว่า jaguar เนาะ

jaguar มันสามารถที่จะรู้บริบทของเรานะครับได้ว่า

โอเค smart search มันคืออะไร คือรู้ว่าเราพูดถึง jaguar ที่เป็นอะไร มันอาจจะมีการเก็บสิ่งต่างๆ รอบตัวเรา ที่เราเข้าไปในเว็บไซต์หรือระบบ search engine ที่สามารถ เก็บข้อมูลทุกอย่างที่เรารู้ได้นะครับ เพราะงั้นมันก็จะรู้เรื่องของแบบ smart search เนาะ รู้ว่าเราพูดถึง brand หรือเราพูดถึง

สัตว์นะครับ นี่คือสิ่งที่เรียกว่าเป็น semantic search นะของ semantic web อย่างที่สองมันสามารถที่จะรู้ได้ว่าถ้าเราต้องการอยากจะพิมพ์ space มันรู้ว่า space เนี่ยหมายถึงอะไรอย่างเงี้ยครับเป็นต้น

Semantic Web เชื่อมโยงทุกอย่างอย่างไร? และ AI/GenAI มีบทบาทอย่างไร?6:54

อันนี้คือความหมายของ semantic web คือมันสามารถที่จะ connect the dots ได้ในความหมาย แน่นอนครับมันไม่ใช่แค่เราพิมพ์ประโยคเดียวแล้วมันจะรู้นะ เราอาจจะพิมพ์แบบยาวๆ แล้วมันก็จะเรียนรู้ของเราว่าโอเค ตอนนี้คุณเข้ามาในหมวดเช่น เช่นสมมติเราพูดถึงเว็บ Amazon นะที่เป็นเว็บไซต์ ที่เป็นเว็บขายหนังสือขายอะไรก็แล้วแต่ที่เราเข้าไป แล้วพิมพ์บางอย่างมันรู้ว่าเรากำลังเข้าหมวดเนี้ย ถ้าเราถามคำแบบเนี้ย มันน่าจะหมายถึงหมวดนี้ ไม่ใช่แบบครอบจักรวาลแล้วมาตอบเราหลายแบบถูกไหมครับ เพราะฉะนั้นเราจะรู้สึกว่าทุกอย่างมันเป็นการเชื่อมโยงกัน แล้วออกแบบมาเป็นเว็บที่เรียกว่า semantic ก็คือเว็บที่ค้นหาข้อมูลแล้วเป็นรู้ความหมายของเรา

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

ทำให้มันเก็บข้อมูลเข้าไปอีก ทำให้ระบบของเรามันก็คือการ learning ไปเรื่อยๆ มันนำไปสู่โลกปัจจุบันที่เราเรียกว่ามันเป็นการใช้เครื่องมือ ที่เป็น AI มากขึ้นหรือเป็น generative AI มากขึ้น เพราะว่ามันได้สะสมข้อมูลมาเพียงพอแล้ว ถึงจุดที่มันสามารถจะรู้จักเราได้มากขึ้น ถูกไหมครับมันรู้จักเรามากขึ้น นั่นคือสิ่งที่ตัวแอปพลิเคชันที่เราถูกพัฒนาในปีเนี้ยมากขึ้น หรือคนพูดถึงมากขึ้นนะครับ ซึ่งแน่นอนมันจะมีคนใช้งานอยู่แล้ว

MongoDB เก็บข้อมูลอย่างไรใน Semantic Web Search?8:19

งั้นสำคัญก็คือเราต้องมีข้อมูล ดังนั้นพอเราพูดถึงข้อมูลเราต้องมี data ที่เก็บนะ ในที่นี้ผมก็เลยจะมาพูดว่าตัว MongoDB

เราสามารถเก็บอะไรได้บ้างและทำอะไรได้บ้างนะครับ ในมุมมองของ semantic web search นะครับ โอเคนะครับ

Vector Search ใน MongoDB คืออะไร?8:43

ต่อมาก็คือบน MongoDB เนี่ยครับจะมี feature นึง นะครับเรียกว่า vector search ก่อน vector search เนี่ยนะครับมันจะมีการ search ข้อมูลนะ ทุกคนรู้จักวิธีการ query ข้อมูลถูกไหมครับ ก็คือ select ข้อมูลเข้ามาค้นหาข้อมูลตาม condition ต่างๆ เรียกว่าเป็นการ search ทั่วๆ ไปนะครับ แต่พอเราอยาก search text มากขึ้นเนี่ย มันจะมีอีกตัวนึงที่เราเรียกว่า full-text search full-text search ก็คือเป็นการ search แบบค้นหาคำๆ นี้อยู่ในข้อมูลมหาศาลอย่างไร เรียกว่าเป็นการค้นหาไม่ใช่เป็นคำเฉพาะตรงเป๊ะๆ

แต่อาจจะเป็นแบบมีคำนี้อยู่ในข้อความนั้นหรือเปล่านะครับ อันนี้เราจะเรียกว่าเป็นตัว full-text search

Embedding Model และ Large Language Model คืออะไร?9:22

จนมาถึงยุคที่เป็น generative AI นะครับ เราเลยเรียกกระบวนการนั้นมากขึ้น ก็คือเรียกว่า vector search นะครับ ใน vector search เนี่ยนะครับ สิ่งที่ทุกคนเห็นก็คือข้อมูลมันจะมีการทำแบบนึง ที่เราเรียกว่าปัจจุบันมันจะมี 2 คำที่ทุกคนรู้จัก ที่เรียกว่าเป็น model ก็คือ embedding model กับ large language model มันจะมี 2 คำที่ ณ ปัจจุบันเนี่ยเรามีการพูดถึงกันมากเลย แต่ผมจะโฟกัสที่เรียกว่า embed นะครับ embed ก็คือมันอาจจะเป็นเรื่องที่ทุกคนแบบฟังมาแล้วเยอะเนาะ ผมแค่ปูให้เข้าใจจนไปถึงว่า MongoDB ทำอะไรได้บ้างนะครับ เพราะฉะนั้นง่ายๆ ก็คือเราแปลงในตัวอย่างนี้ ก็คือเรามีรูปภาพครับ รูปภาพเราเป็น binary เนาะ ถูกไหมครับ ภาพ 1 ภาพมีชื่อภาพ เราก็แปลง content ของภาพที่เป็น binary ทั้งหมดเนี่ยนะครับ ให้มันกลายเป็นตัวเลข ตัวเลขมันเรียงกันเป็นกลุ่ม แล้วเรียกกลุ่มที่เรียงเป็นตัวเลขยาวๆ เนี่ยว่า vector ซึ่ง vector มีหลายรูปแบบครับ ปัจจุบันเนี่ยถูกพัฒนา algorithm ที่เป็น core พื้นฐานเนี่ย ลดทอนจากเลขทศนิยมแบบเนี้ย ให้เหลือแค่ 0 กับ 1 หรือค่าที่ต่ำกว่า เพราะเหตุผลเพราะว่ายิ่งมีค่าที่มากกว่าเท่าไหร่เนี่ย มันจะใช้ compute engine เยอะ แล้วปัจจุบันเนี่ยนะครับมันอยู่ในยุคที่เราจะเริ่มใช้ device compute

แปลว่ามันก็ต้องมี size ที่เล็กลง มีตัวเลขที่คำนวณน้อยลง น้อยลงแต่แม่นยำต้องมากขึ้น เพราะว่าเราใช้ mobile เราคำนวณได้นะครับ หรือใช้แค่ browser คำนวณได้ นั่นคือเหตุผลที่ algorithm เนี่ยก็คือมันถูกพัฒนานะครับ นั่นก็หมายความว่าเรากำลังพยายามแปลงสิ่งที่คนรู้เรื่อง ให้คอมรู้เรื่อง คอมรู้เรื่องก็คือตัวเลข

เพราะมันชื่อคอมพิวเตอร์เนาะ เพราะฉะนั้นแปลว่ามันก็คือการคำนวณครับ บวกลบคูณหารอะไรก็ว่ากันไปนะ ผมไม่ได้ลงตรงนั้น เพราะฉะนั้น embedding model คือการแปลงอะไรก็ตาม ที่มนุษย์อ่านรู้เรื่องให้คอมอ่านรู้เรื่อง เพื่อมาทำสูตรคำนวณบางอย่าง ซึ่งมีนักวิจัยทำไว้หมดแล้วมากมาย ดังนั้นเรามีหน้าที่แค่จะทำยังไงก็ตามให้มันแปลงเป็นเลขให้ได้ เราจึงไปเลือกหาตัวที่เรียกว่า embedding model หลากหลายมากปัจจุบันมี มีแบบโอ้ มาก มหาศาลนะครับ มีหลายค่าย ออกมาทุกอาทิตย์ ออกมาทุกเดือน เล็กเข้าไปเล็กเข้าไป ดีขึ้นดีขึ้น แต่ถ้าเราไม่รู้ว่าเราไปทำอะไรมันก็ไม่มีประโยชน์ถูกไหมครับ โอเค เพราะฉะนั้นเดี๋ยวเรามาดูกันว่ามันจะมีประโยชน์อย่างไรนะครับ

Embedding Model ใน MongoDB ทำงานอย่างไร?11:49

เพราะฉะนั้นตัว embedding model เนี่ยก็คือ เราเก็บ MongoDB เนี่ยมีตัวนึงก็คือ

มันสามารถจะเก็บ data type ที่เป็นตัวเลขได้ ภาพที่เห็นเนี่ยมันก็คือ data type ที่เป็น square bracket

มองออกอยู่แล้วว่ามันคือ array นะครับ มันเก็บ array ที่เป็นตัวเลขไม่มีอะไรแปลกเลยนะครับ มันเก็บ array ตัวเลขเท่านั้นเอง MongoDB ทำหน้าที่เก็บ array ตัวเลข แต่สิ่งที่มันมากกว่านั้นก็คือ มันจะมี feature นึงใน MongoDB ชื่อว่า vector search คือเราไม่ต้องมีความรู้ในระดับ

บางอย่างเรา apply ถนัดกว่าเราต้องการเป็นผู้สร้างในบางอย่างนะ ผมไม่ได้บอกว่าเราจำเป็นจะต้องเป็นผู้ apply อย่างเดียว หรือเป็นผู้สร้างก็ได้ แต่ในเชิงประยุกต์ใช้งาน MongoDB บอกว่า เราสามารถประยุกต์ใช้งานได้ มันมีลูกเล่นให้เราทำในระดับที่เราไม่ต้องใช้เวลา เป็นหลายๆ ปีเพื่อเข้าใจมันมากขึ้น แต่เราสามารถทำผลิตภัณฑ์ออกสู่ market ได้เร็วขึ้นได้นะครับ

Vector Search บน MongoDB Atlas12:50

ดังนั้นตัวนี้เราจะเรียกว่า vector search vector search เป็น feature ที่อยู่บน MongoDB Atlas นะครับ ก็คือเราสามารถใช้งาน free เหมือนกัน ทุกอย่าง free หมดนะครับ แต่แค่ limit นะครับ limit ก็หมายความว่า เช่น Atlas เนี่ยมี free tier ที่ทุกคนสามารถใช้งาน free ได้ ไม่ต้องกรอกบัตรเครดิตใดๆ เลย สมัครเข้าไปใช้งานได้เลย free tier 512 MB นะครับ

free 512 MB ถ้าใช้เกินกว่านั้นก็แค่ใช้ไม่ได้นะ หรือคุณก็ค่อยไปเลือก tier อื่นนะ แต่มันเป็น tier ที่เป็น free นะครับ เพราะฉะนั้นเรากำลัง embed นะครับ ฝั่งซ้ายก็คือมันเก็บข้อมูล ฝั่งขวาก็คือเวลาเรา search ครับ หน้าตาอันนี้แน่นอนหลายๆ คนที่ใช้ MongoDB อยู่แล้ว มักจะคุ้นมันคือ Mongo Query Language ปกติเรารู้จัก SQL ก็คือ Structured Query Language ถูกไหมครับ เป็นคำที่แบบ select star from where order by grouping group by having นะครับ อันนี้ก็จะเหมือนกันมันก็จะใช้คำว่า aggregate เนี่ยนะครับ ประโยคนี้เป็นประโยคที่ถ้าเราใช้งาน MongoDB อยู่แล้วรู้จัก มันคือเรียกว่า aggregation framework ก็คือเขียน query แบบเป็น stage นะครับ เพราะฉะนั้นมันก็ใช้คำว่า search ครับ แต่ search ของ MongoDB ถ้าเป็น search แบบแนว AI

หรือเรียกว่าเป็น similarity นะ ตรงนี้ผมจะเขียนว่าเป็นการทำ similarity search นะครับ ก็คือหาข้อมูลที่มีความหมายคล้ายกันด้วยเอาตัวเลขไป match กัน นะครับ เราจะเรียกว่า vector search นะครับ เพราะฉะนั้นนี่คือความหมายนะ vector search เราจะใช้ feature นี้นะครับ อันนี้คือรูปแบบก็คือ data เก็บเป็นตัวเลขให้ได้ ไปใช้เครื่องมือ open source ตัวไหนก็ได้ ในที่นี้เราจะใช้ Ollama ให้ดูนะครับ ว่าเป็นตัว local language model ที่เป็นแบบ small นะครับ

เพื่อจะ embed ข้อมูลชุดนี้ แล้วก็เอา vector search ไป search ค้นหาข้อมูลนะครับ นั่นคือเหตุผลที่ฝั่งซ้ายคือ data ฝั่งขวาก็คือ search feature ซึ่ง Atlas มีให้อยู่แล้ว เราไม่ต้องคิดค้นอะไรใหม่ ก็เหมือนเราใช้ database ยี่ห้อนึง แล้วกดคำสั่งว่าโอเคต้องการ search แบบ similarity search ให้หน่อย ก็มันก็จะ search ให้อัตโนมัติตาม feature ที่เราสร้างนะครับ โอเคนะครับ

ต่อไปนะครับ เมื่อกี้เป็นให้ดูว่า vector search มันทำงานยังไงเนาะ มันจะเก็บตัวเลขเฉยๆ แล้วก็มี feature

Search Score ใน Vector Search สำคัญอย่างไร?15:13

ต่อไปเรามาพูดถึงวิธีการให้คะแนนครับ เพราะว่าการ search similarity หรือโลกปัจจุบันก็คือ เรา search similarity หมายความว่าเรา search เหมือนนะ เราไม่ได้ search เป๊ะ พอไม่มีคำว่าเป๊ะแปลว่าไม่มีตัวเลขแน่ชัดว่า 100% เป็นยังไง

โอเคไหมครับ ไม่มีตัวเลขแน่ชัด เราเป็นผู้กำหนดว่าอะไรที่แปลว่า 100% สำหรับมุมมองของเรา นะครับ ดังนั้นมันก็จะมีคำว่า search score แทน มันจะให้ score ของคุณ แล้วคุณก็เชื่อเองว่าคุณเป็นผู้ตัดสินว่า score เนี่ย ในบริบทของ application ของคุณ คุณเชื่อถือหรือไม่ โอเคไหมครับ มันไม่มีความเป๊ะนะ เพราะฉะนั้นตัว score เนี่ยใน vector search ของ MongoDB Atlas เนี่ยมันก็จะมีอยู่ 3 ประเภทเป็น by default เลย ผมเชื่อว่าอันนี้เป็น standard ของ application ประเภทนี้ของทุกเจ้า เบื้องหลังมันก็จะมี cosine similarity สูตรก็ว่ากันไปมี dot product มี Euclidean distance ซึ่งแน่นอนครับ พื้นฐานของ similarity วิธีที่ง่ายที่สุดก็คือมันชื่อว่า KNN เนาะ

ตัว nearest neighbor นะครับ เพราะฉะนั้นมันก็จะใช้หลักการว่าอะไรคล้ายกัน เอามา search ด้วยกันหน่อย แล้วคุณก็เลือกเอานะว่าคุณจะเลือกประเภทนี้หรือเปล่า ด้วย score ที่คุณยอมรับได้ไหมนะครับ อันนี้คือ search score ใน MongoDB Atlas จะมี search score pattern ให้คุณเลือก algorithm ผมก็จะเขียนไว้ว่า use case แต่ละอันครับ ควรเลือกประเภทไหนสำหรับบริบทของการใช้ MongoDB Atlas อันนี้ผมไม่ได้ไปที่อื่นนะ ผมพูดถึง Atlas 100% นะครับ เพราะฉะนั้น cos ถ้าเราใช้ feature ว่า cosine score จะเหมาะสำหรับ text search หรือ recommendation ถ้าคุณใช้ dot product นะครับ เหมาะสำหรับการทำ collaborative filter นะครับ ถ้าคุณใช้แบบ Euclidean distance ก็คุณเหมาะสำหรับพวกที่เป็น clustering หรือตัว detect นะครับ แล้วแต่คุณเลือกนะครับ คุณสามารถกำหนดได้นะครับ อันนี้คือ score เพราะเราจะเป็นคนกำหนดว่า score ไหนเราพอใจ แล้วแต่ละ score เหมาะสำหรับ application ประเภทไหนนะครับ

วิธีการให้คะแนน Search Score ใน MongoDB Atlas17:19

โอเค ต่อไปนะครับ พอเรามาพูดถึงการใช้ score ในการ search

มันก็จะมีวิธีใน MongoDB มีหลายวิธีมาก วันนี้ผมจะพูดถึงวิธีล่างสุด ซึ่งผมเชื่อว่าทั้ง 3 อันเนี่ย ไป search ในโลกอินเทอร์เน็ตก็มีหมด มีคำอธิบาย advance อยู่แล้วว่าแบบไหน เขาใช้เหมือนๆ กัน เพียงแต่ว่า MongoDB build มันอยู่บน database เลย เพื่อให้เราหยิบมาใช้เลย เราแค่กำหนดเองนะครับ แน่นอนปัจจุบันมีอยู่ 3 แบบ ก็คือแบบ ANN นะ

ANN ก็คือหมายความว่า มีสินค้าอยู่ประเภทนึง เช่น เราพูดถึงแอปเปิ้ล แอปเปิ้ลพูดถึงสีและรูปทรงโอเคไหมครับ แอปเปิ้ลพูดถึงสีแดงและมีรูปทรงออกห้าเหลี่ยม เขาบอกว่ามีรูปใดก็ตามที่เหมือนแอปเปิ้ล แปลว่าเราไม่ต้องสนใจทั้ง 2 feature ผมเรียกคุณสมบัติของสีแดงกับคุณสมบัติของรูปทรงห้าเหลี่ยม สมมติเนาะว่า feature แปลว่า ANN เนี่ยไม่สนใจให้มัน match ทีเดียวทั้ง 2 feature ไม่จำเป็นโอเคไหมครับ ANN บอกว่าอันใดอันหนึ่งก็ได้ อันนี้คือสมมติให้เห็นภาพเนาะ มันแปลว่า approximate ก็คือแค่ประมาณการนะครับ แต่ถ้าเป็น exact แปลว่า 2 feature เนี่ยต้องเหมือน

อันนี้ให้เรามองเห็นภาพ concept ที่มันดูยากๆ ให้มันง่ายลงเนาะ แต่มันมี in detail มันอยู่แล้วนะครับ เพราะฉะนั้นนี่คือความหมายของ ANN เพราะฉะนั้น ANN จะเหมาะสำหรับข้อมูลขนาดใหญ่ครับ แต่ ENN จะเหมาะสำหรับข้อมูลขนาดเล็ก อันนี้คือสิ่งที่เป็น limited ของ vector search ของ MongoDB บอกว่าถ้ามีข้อมูลมากกว่า 10,000 document ให้เปรียบเสมือนว่า 10,000 row ถ้าเราต้องการค้นหาข้อมูล 10,000 row เราต้องการแบบ match จริงๆ เพื่อเพิ่มความแม่นยำของเรา เราใช้แบบ ENN ไปนะครับ ส่วนอันสุดท้ายเริ่มนิยมมากขึ้น ก็คือเป็นการ fusion เราเรียกว่า hybrid

ก็คือ search แบบ AI อย่าง search คือ search แบบเหมือน ผสมกับค่าที่ search แบบเป๊ะ แล้วมารวมค่ากัน แล้วดูว่าให้ score แบบไหน เพื่อค้นหาแบบ อันนี้ก็แม่นยำ อันนี้ก็แบบประมาณการ ลองดูซิ 2 ค่านี่รวมกันแล้วแบบ เพราะอะไรครับ เพราะว่าบางครั้งเราอยากจะรู้ว่าสินค้าบางอย่าง หรือข้อมูลบางอย่างเนี่ยต้องการแบบ ต้องการการผสมผสานนะ เพื่อความมั่นใจว่าข้อมูลเนี้ย จะมีความใกล้เคียงกับสิ่งที่เราต้องการมากยิ่งขึ้น จึงเป็นที่มาของ algorithm ตัวที่ 3 ที่มีใช้นะครับ

ปัจจุบันเนี้ยมีตัวที่ 4 ก็คือตัวผมจำชื่อไม่แม่น คือเป็น quantize เนาะ ที่คนเริ่มนิยมมากขึ้นนะครับ เพราะฉะนั้นทีม MongoDB ก็จะ develop งานวิจัย พอๆ กับที่ค่ายอื่นเขาทำกันเหมือนกันนะครับ โอเคนะ นี่คือ query มีทั้งหมด 3 แบบนะครับ

โอเคนะครับ ต่อมาก็คือ

Demo: การใช้งาน Vector Search กับ Local Model (Ollama)20:16

ในวันนี้ที่ผมจะมี demo ซึ่งผมเตรียมมาแล้วบางส่วน เพราะว่ามันใช้เวลาในการ develop นะครับ เพราะฉะนั้นผมจะ base ตัว Mac เพราะผมใช้เครื่อง Mac เป็นหลักนะครับ ผมก็เลยคิดว่าถ้าบางท่านใช้เครื่องอื่น แล้วมันเกิด fail เวลาเราไป copy code มา มันอาจจะมีเป็นไปได้ ผมไม่ได้ test ทุก OS เนาะนะครับ เพราะฉะนั้นผม test บนบริบทที่ผมมีบนเครื่องนี้นะครับ แล้วก็สิ่งที่ลงที่เครื่องของเราเนี่ยนะครับ เราสามารถที่จะลงไปตามลิงก์ได้ คือ 1 เราลง Atlas CLI ก็คือตัวจำลองให้เครื่องคอมพิวเตอร์ของเราเนี่ย เหมาะสำหรับ run MongoDB ทุกอย่าง ที่เป็นแบบ offline ได้เลย เน้นย้ำนะครับ เป็น offline นะครับ แล้วก็ 2 ก็คือตัว Ollama Ollama ก็คืออย่างที่ทุกคนทราบ คือเป็นตัวที่สามารถทำ run model ได้บนเครื่องตัวเอง

ในข้อมูลที่จำกัด เลือกได้ มากกว่า 100 model นะครับ

มีเยอะแยะมากมาย size เล็ก size ใหญ่ ก็แล้วแต่ RAM ที่คนเลือกนะครับ โอเคนะครับ แล้วก็ตัวนี้ก็จะเป็นตัวนะครับ step ก็คือ query Ollama ไปปุ๊บ backend มา Mongo นะครับ มีทั้งหมด 6 step นะครับ โอเค อันนี้ก็จะเป็นคำอธิบายแต่ละ step ก็ดู simple เนาะนะครับ โอเค เพื่อไม่เป็นการเสียเวลานะครับ เราก็จะมา demo ที่ผมทำไว้แล้วเนาะ โอเค แป๊บนึงนะครับ

หลักการเตรียม demo ต้องเตรียมให้ครบก่อนนะครับ เราไม่ต้องการพัง ณ ขณะ demo นะครับ เพราะฉะนั้นหลักการนี้มันเป็น data ที่มีอยู่แล้วเนาะ คุณไปดาวน์โหลดมาได้นะครับ ถ้าดูจากคู่มือ เรามี reference อยู่ ก็คือผมกำลังจะทำการ search Star Wars อันนี้เป็นข้อมูลที่เรามีอยู่แล้ว เรา copy ใส่นะครับ ซึ่งในตัว search Star Wars เนี่ยนะครับ

โอเค อันนี้นะครับ search Star Wars

เนี่ยผมก็ search บนเครื่องตัวเองล้วนๆ ทุกอย่างอยู่บนเครื่องหมดเลย แม้กระทั่ง embedding นะครับ เสร็จแล้วมันจะมี score 2 อันตรงนี้นะครับ หลักการก็คือเรา search คำว่า Star Wars มันก็จะไปค้นดู title นะครับ อันนี้คือ title เป็น Star Wars มันจะมีคำว่า VS score กับ FT score ก็คือผมสร้าง index ทุกอย่างต้องสร้าง index ก่อน database จะเร็วไม่เร็วอยู่ที่ index ด้วยเป็นส่วนหนึ่ง 100% นอกจาก modelling design ดังนั้น index เป็นจำเป็น ผมสร้าง index ขึ้นมา 2 ตัว 1 ก็ VS ย่อมาจาก vector search FTS ย่อมาจาก full text search โอเคไหมครับ ดังนั้นคะแนนของใครเอามารวมกันนะ เพราะฉะนั้นในบริบทนี้

แล้วก็ทำการ sorting score ครับ sorting จากมากไปน้อย ข้อมูลชุดนี้บ่งบอกว่า vector search score ให้เป็น 0 ไม่มีคะแนน เพราะว่า embed แล้วไม่รู้มันจะได้มายังไง แต่พอ search ด้วย FTS นะครับ ได้คะแนน โอเคไหมครับ อันนี้ความหมายคือ FTS ก็คือ search แบบ full text search ผ่าน title แล้วก็ vector search search ผ่าน embedding รวมกันนะครับ ประมาณนี้ เพราะฉะนั้นนี่คือเหตุผลที่ข้อมูลเนี่ย ก็จะได้ออกมานะครับ เป็นการ scrolling ไปเรื่อยๆ นะครับ จะเห็นว่าแล้วมันมีคะแนนประเภทที่

นี่ครับ vector เห็นไหมครับ อันนี้จะได้ vector แต่ไม่ได้ full text นะ แต่สุดท้ายเรา sort คะแนนรวมกัน เอา 2 คะแนนเนี่ยรวมกันแล้ว sort จากมากไปน้อย อันนี้คือท่าที่ MongoDB สามารถจะทำให้ เรียกว่าเป็นการ hybrid เรา search บางสิ่งบางอย่างด้วย similarity ผสมกับ exactly ของสิ่งที่เราต้องการ แล้วให้มัน sorting ขึ้นมานะครับ อันนี้ก็คือความหมายเนาะนะครับ

สรุปการใช้งาน Vector Search และ Local Model แบบ Offline23:52

โอเคนะครับ เสร็จแล้วก็

เพราะฉะนั้นก็คืออันนี้คือหลักนะครับ สุดท้ายนะครับ เพราะมันเป็น live talk เนาะ

อันนี้ก็คือให้เห็นภาพว่าเราสามารถที่จะ MongoDB มี tool นึงชื่อว่า Compass สามารถ break down แล้วก็ run ได้เลยนะครับผม พอเรารันปุ๊บก็จะได้คำตอบแบบนี้ ผมก็เอาคำตอบเนี้ยมาใส่หน้าเว็บ แสดงผลเฉยๆ แต่ทุกอย่างทำบน offline หมดนะครับ สุดท้ายนะครับ ก็คือ reference นะครับ

ก็คือถ้าใครสนใจก็ไปดาวน์โหลดนะครับ แต่ยังไม่มี repo ผมเฉยๆ แต่ดาวน์โหลดมันก็จะมีตัวอย่างให้ทำได้เลยนะครับผม ก็จะประมาณนี้นะครับ สำหรับเรื่องของตัวการใช้ vector search แล้วก็ local model ที่เป็น offline 100% นะครับผม ขอบคุณมากครับ

ขอบคุณครับ ขอบคุณพี่ปิติครับ