วิธีการใช้ Vector Database: Pinecone กับ Langchain

Kan Yuenyong
4 min readJun 30, 2023

ใครที่กำลังค้นหาข้อมูลเรื่องนี้แสดงว่าคุณกำลังเดินทางมายังปากธรณีประตูของการเข้าสู่ขอบเขตเซียนเอไอ ถ้าจะพูดภาษากำลังภายในหน่อยต้องเรียกว่าเป็นวิชาไหมฟ้าขั้นที่ 7 ก่อนจะขยับขึ้นไปเป็นวิชาไหมฟ้าขั้นที่ 8 คือการสร้างพวก automated AI agent อย่างพวก AutoGPT หรือ BabyAGI รวมไปถึง GPT Engineer ด้วย ซึ่งพวกนี้ล้วนต้องอาศัยพื้นฐานจากขั้น 7 คือฐานข้อมูลแบบเว็คเตอร์ (Vector Database) นี้ทั้งนั้น ส่วนคนที่ดิ้นรนมาจนถึงขั้น 8 ก็มักจะต่อยอดไปอีกสายคือการริอ่านสร้าง AI ของตัวเองขึ้นมาจาก scratch แบบว่าครั้งหนึ่งจะได้คุยอวดว่าเอไอแบบ ChatGPT น่ะหรือ ไม่เท่าไหร่นักหรอก เพราะฉันก็สร้างมาเองกับมือแล้ว (แบบเดียวกับการสร้างระบบปฏิบัติการลีนุกซ์จาก scratch เหมือนกัน) พวกที่ผ่านขั้นตอนนี้ไปได้จะเปรียบเสมือนย่างก้าวเซียนหรือพวกไหมฟ้าขั้น 9 ที่เป็นขั้นสุดยอดคือการทำ “ควอนตัมเอไอ” ซึ่งไม่กี่วันนี้ผมก็เห็นแล็ป ลอส อลาโมส ซึ่งเป็นแหล่งสิงสถิตของบรรดาเทพแต่ไหนแต่ไรเพิ่งออกเปเปอร์เรื่องนี้ที่ทำ breakthrough (อีกแล้วครับท่าน) มาหมาด ๆ เมื่อสี่วันก่อนนี้เอง

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

ผมเพิ่งผ่านสมรภูมิ Hackathon ของ Pinecone มาสด ๆ ร้อน ๆ เรียกว่าแทบปางตาย Learning curve ของฐานข้อมูลแบบเว็คเตอร์นี่เรียกว่า “อย่างชัน” แต่ใครที่ผ่านขั้นตอนการเรียนรู้นี้มาแล้วจะเห็นประโยชน์ของเรื่องนี้อย่างมาก ตอนส่งงานเขาไปซึ่งก็ยังไม่รู้ผลว่าหมู่หรือจ่า ซึ่งก็ไม่รู้ว่าทำไปได้ยังไง พอมาทบทวนอีกครั้งก็ต้องทำให้ความคิดเรื่องนี้กระจ่างชัดเผื่อนำมาใช้ประโยชน์ภายหลัง หรือเป็นประโยชน์กับคนอื่นไม่มากก็น้อย ที่สำคัญข้อมูลเรื่องนี้ยังไม่มีใครที่ไหนตีพิมพ์เป็นหนังสือให้เราหาอ่านได้ง่าย ๆ โดยทั่วไปก็ต้องตามหาอ่านตามเว็บไซต์ต่าง ๆ แต่ก็จะมีความยุ่งยากในการทำความเข้าใจอยู่พอสมควร ซึ่งเรื่องนี้ก็นับเป็นเรื่องแปลกอย่างหนึ่งในวงการ Machine Learning Operations (MLOps) เพราะเจ้าฐานข้อมูลเว็คเตอร์นี้ถือเป็นเรื่องยอดนิยมอันหนึ่งในหมู่ stack MLOps แบบ Gen AI นี้เหมือนกัน

ฐานข้อมูลเว็คเตอร์จัดเป็นส่วนประกอบหลักในมิดเดิลแวร์ของ Gen AI รุ่นใหม่อยู่ไม่น้อย ที่มา: source
ฐานข้อมูลเว็คเตอร์มีปรากฎอยู่ใน Emerging LLM App Stack รุ่นใหม่อีกด้วย ที่มา: a16z
รูปกราฟฟิคนี้เปรียบเทียบระหว่างการถามเอไอผ่านพร้อมพท์จากโปรแกรมแชทบอทตามปกติ เทียบกับการประมวลผลเอไอแบบโปรแกรมสำเร็จรูปซึ่งต้องทำงานร่วมกับเครื่องมือต่าง ๆ หลากหลายทั้ง Langchain และฐานข้อมูลเว็คเตอร์ ที่มา: source
แผนผังข้อมูลผู้เล่นและผลิตภัณฑ์รวมถึงระดับการลงทุนในอุตสาหกรรมเอไอยุคใหม่ จาก รองศาสตราจารย์ ชาร์ลี เนฟ จะเห็นว่าแผนผังนี้ยังไม่ได้รวมผลิตภัณฑ์และผู้เล่นอย่างฐานข้อมูลเวคเตอร์เข้ามาด้วย แต่โดยทั่วไปก็มีความสมบูรณ์ดี เมื่อใช้ร่วมกับแผนภาพมิดเดิลแวร์ และ stack การพัฒนาเอไอยุคใหม่ รวมถึงการพัฒนา LLMs ที่เกิดจากชุมชนนักพัฒนาแบบโอเพนซอร์ส ก็จะทำให้เราเห็นภาพการ “ระเบิด” ของอุตสาหกรรมเอไอยุคใหม่ได้ชัดเจนยิ่งขึ้น อนึ่ง, คำ “ระเบิด” ในที่นี้หมายถึงการแตกตัวของสิ่งประกอบในระบบนิเวศนั้น ๆ ครั้งใหญ่ เช่นเดียวกับคำ “การระเบิดแคมเบรียน” (the cambrian explosion)

ทำไปทำไม

เป้าหมายหลักในการใช้ฐานข้อมูลแบบเว็คเตอร์มีสองเรื่องใหญ่ ประการแรกคือต้องการใช้ขยายหน่วยความจำของเอไอพวกโมเดลภาษาขนาดใหญ่ (Large Language Model: LLM) ซึ่งเป็นแขนงหนึ่งของพวกเอไอ “ปัญญาประดิษฐ์รู้สร้าง” (Generative AI หรือ Gen AI) เอไอแบบ LLM อย่างแชทจีพีทีนี้เป็นที่รู้กันว่ามีความจำสั้นแบบ “ความจำปลาทอง” นี่ส่วนหนึ่งเป็นเพราะวิธีการออกแบบให้เน้นการสนใจสิ่งที่ต้องการแก้ปัญหา เรียกว่า Long-short Term Memory (LSTM) ซึ่งฐานข้อมูลเว็คเตอร์จะมาขยายส่วนความจำนี้ให้เป็นความจำถาวรให้กับเอไอ (Long Memory)

หมายเหตุ: LSTM นี้เป็นเทคนิคการทำให้หน่วยความจำสามารถใช้ “จดจำ” ได้ยาวนานขึ้นข้าม stage ในการประมวลผล เมื่อเทียบกับ Short-term Memory (STM) ที่ใช้กันในระบบเอไอแบบ Recurrent Neural Networks (RNNs) ทั่วไป ความจำทั้งสองประเภทนี้จัดเป็นความจำภายในระบบ (internal memory) ไม่ใช่ความจำภายนอกระบบ (external memory) ที่เก็บไว้ในฮาร์ดดิสก์หรือคลาวด์ทั่วไป แต่ปัญหาของ LSTM นี้คือจะมีต้นทุนแพงกว่า STM และมีความเสี่ยงในการเพิ่มการ “ตัดให้เข้ากันพอดี” (overfitting) ของโมเดลมากเกินไป และงานส่วนใหญ่การใช้ STM ก็เหมาะสมกับการใช้งานทั่วไปของระบบเอไอแล้ว นอกจากนี้การใช้ LSTM ยังเสี่ยงต่อการเสียรายละเอียดเล็กน้อย (แต่อาจมีความสำคัญ) ในการเรียนรู้แบบป้อนย้อนกลับ (backpropagation) ของโมเดล เรียกเป็นศัพท์เทคนิคว่า vanishing gradient problem หรือปัญหาการเลือนของเฉดรายละเอียด ลองนึกถึงภาพว่าใน STM จะเก็บข้อมูลได้น้อย ดังนั้นความแตกต่างของข้อมูลที่น้อยนั้นจึงสำคัญ แต่ในขณะที่ LSTM มีขนาดการเก็บข้อมูลที่มากกว่าดังนั้น ข้อมูลส่วนใหญ่ที่เกิดจากการเรียนรู้นั้นมักจะคงตัวจึงไปครอบงำข้อมูลเล็กน้อยที่ยังมีการเปลี่ยนแปลงได้ (แต่ยังอาจสำคัญอยู่)

พิธีกรถาม แซม อัลท์แมน ว่างบประมาณในการเทรนเอไอเกิน $100 ล้านเหรียญหรือไม่ แซมไม่ตอบตามตรงเพราะเป็นความลับทางธุรกิจแต่เขาก็ใบ้ให้ว่ามันมีแนวโน้มไปแบบนั้น

ปกติเอไอแบบ LLM ทุกตัวจะมีขีดจำกัดในเรื่องฐานข้อมูลที่ว่ารู้ข้อมูลเท่าที่เราใส่ข้อมูลเทรนให้ (มีสองแบบเรียกว่า pre-trained และ fine-tuning) โดยทั่วไปกระบวนการทำ pre-trained หรือจะเรียกอีกอย่างว่าสร้างเอไอจาก scratch นี่มักเกี่ยวข้องกับการต้องป้อนข้อมูลขนาดใหญ่มาก ๆ ให้กับเอไอ และใช้เวลาในการทำ training ยาวนาน (ผมเข้าใจว่าแชทจีพีที หรือ จีพีที-4 นี่ใช้เวลาราว 6 เดือน ไม่นับว่าใช้ทรัพยากรจีพียูอีกหลักพัน แซม อัลท์แมนเคยตอบคำถามเป็นนัย ๆ ว่าเงินทุนที่ใช้แค่ในการเทรนเอไอนี้มากกว่า $100 ล้านเหรียญขึ้นไป) พวกเอไอที่ทำ pre-trained นี้มีความรู้แล้วสามารถพูดเป็นคำเป็นประโยคที่สื่อสารรู้เรื่องได้ แต่ไม่ใช่ว่ามันจะตอบคำถามได้ตรงกับความต้องการเสมอไป อย่างเราถามว่า “วันนี้อากาศดีไหม” มันอาจจะตอบมาว่า “หนังสือเล่มนี้สนุกจังเลย” เรียกว่าถามช้างตอบม้า ดังนั้นเราจะต้องทำ fine-tuning ให้มันถามตอบเป็นผู้คนเป็นคนและเข้าใจประเด็นที่เจรจากันมากขึ้น

เอไอตัวนี้ (GPT2-medium) เราเขียนโปรแกรมให้มันทำตัวเป็นแชทบอทอย่างง่ายได้ ซึ่งแม้จะถูก pre-trained มาแล้วและพูดภาษามนุษย์ (ภาษาอังกฤษ) รู้เรื่อง แต่ก็ใช่ว่าจะตอบคำถามเราให้เข้าใจได้เสมอไป อย่างในกรณีนี้มันจะนึกว่าเราสั่งให้มันแต่งประโยคต่อจากคำที่เราป้อนเข้าไปซึ่งไม่ใช่ เป้าหมายของคำสั่งนี้คือให้มันทักทายเราตอบ สำหรับเอไอที่มีการ fine-tuning ให้โต้ตอบกับมนุษย์ได้จะไม่มีปัญหานี้ โปรดดูชุดข้อมูลถามตอบของสแตนฟอร์ด (SQuAD 2.0) ที่ใช้สำหรับการเทรนในลักษณะนี้

ทีนี้ไม่ว่าจะเป็นการทำ pre-trained หรือ fine-tuning ต่างก็ใช้เวลาและทรัพยากรพอสมควรในการ “อัพเดต” ความรู้ให้กับเอไอแบบ LLM ในแต่ละรอบ เลยมีคนหัวใสคิดขึ้นมาว่าเอาล่ะถ้างั้นทำไมเราไม่ทำฐานข้อมูลเว็คเตอร์ ให้มันค้นความรู้ที่เราอัพเดตให้สิ การค้นข้อมูล (querying) ฐานข้อมูลแบบนี้ไม่ใช่วิธีการแบบ SQL แต่มีลักษณะการเทียบคำค้นโดยหาคำใกล้เคียงที่สุดแล้วดึงเอาชุดข้อมูลที่เกี่ยวข้องขึ้นมา (เรียกว่าเทคนิค Nearest Neighbor Indexes for Similarities Search) จึงมีธรรมชาติของการค้นข้อมูลใกล้เคียงกับการประมวลผลของเอไอหรือโปรแกรม machine learning อื่น ๆ วิธีการนี้เอาไปประยุกต์กับเอเจนท์เอไออัตโนมัติ แบบ AutoGPT หรือ BabyAGI ได้โดยเป็นที่พักและอัพเดตข้อมูลชั่วคราวเพื่อทำงานอัตโนมัติ

การใช้ฐานข้อมูลเว็คเตอร์ควบคู่กับเอเจนท์เอไออัตโนมัติ ที่มา: source

โดยการแตกเป้าประสงค์คำสั่งจากผู้ใช้ให้เป็นงานย่อย ๆ แล้วค่อย ๆ ทริกเกอร์คำสั่งหรือการตัดสินใจทำตามงานย่อย ๆ เหล่านั้นไปตามลำดับจนจบ (ที่พูดนี้เป็นการพูดย่อให้เข้าใจอย่างง่าย ๆ มีรายละเอียดเกี่ยวกับเรื่องการแตกคำสั่ง และการตรวจคำสั่งอย่างซับซ้อนอีกมากมาย แต่การทำงานของ AutoGPT และ BabyAGI พวกนี้ยังคงถูกวิจารณ์อยู่มาก ว่ายังห่างไกลจากความคาดหวังในทางปฏิบัติ)

การใช้เทคนิคการลด “ความหลอน” ของเอไอแบบต่าง ๆ โดยทั่วไปคนใช้งานปกติมักจะใช้ temperature setting ในทำนองว่าถ้าอุณหภูมิร้อนแรง จินตนาการก็บรรเจิด ดังนั้นเราก็ทำให้มัน “เย็นลง” เสียบ้าง เพื่อลด “จินตนาการ” ที่อาจจะเลยเถิดเตลิดไปไกลเกินของเอไอ ซึ่งเป็นวิธีการที่ทำได้ง่ายและใช้ความพยายามน้อยที่สุด (ดูตัวอย่างจากการเลือกเอไอใน Bing Chat ว่าจะเลือกเป็น “creative”, “balanced” หรือ “precise” ) โดยนัยคือจะช่วยลด “ความหลอน” ตามไปด้วย แต่ความจริงวิธีนี้ไม่ใช่วิธีที่ดีนัก หากเราต้องการใช้งานเอไอในการช่วยคิดในเรื่องที่ยังไม่เกิด เช่นฉากทัศน์หรือ scenario ในอนาคต นี่เป็นเรื่อง “จินตนาการ” ไม่ใช่ “ความหลอน” จึงไม่ถูกไม่ผิด จะสังเกตเห็นว่าในการใช้งานเอไอช่วยทำงานวิจัยสำหรับนักวิจัยที่มีความรู้ผมไม่แนะนำให้ใช้เทคนิคการลด temperature setting นี้เลย เพราะนักวิจัยเหล่านี้มักจะมี “จิตแข็ง” หรือไม่ก็เป็นพวกที่ผ่านการศึกษาในระดับปริญญาเอกแล้วมักจะมีวิธีการทดสอบความรู้อย่างเข้มงวด (rigorous) และกว้างขวาง พวกเขาจะรู้ว่าเวลาไหนควรจะ set temperature อย่างไร โดยทั่วไปก็มีวิธีการควบคุมแบบอื่นได้อยู่แล้ว ดังที่จะอธิบายต่อไปข้างหน้า

เป้าหมายหลักเรื่องที่สอง ของการใช้ฐานข้อมูลแบบเว็คเตอร์อีกเรื่องก็สำคัญไม่น้อยเลย คือการลด “ความหลอน” (Hallucination) ของเอไอ อย่างที่คนใช้แชทจีพีทีบ่อย ๆ จะทราบกันดีคือ การที่เราป้อนคำถามไป คำตอบที่ได้มาจากเอไอใช่ว่าจะถูกต้องหรือมีหลักฐานหรือแหล่งข้อมูลรองรับเสมอไป บางทีมันอาจจะมั่วได้ง่าย ๆ ด้วยความมั่นใจอีกต่างหาก ดังนั้นคนที่ใช้เอไอได้คล่องมือจึงต้อง “จิตแข็ง” พอสมควร ผมกำหนดมาตรฐานของผู้เชี่ยวชาญที่ “รู้ทัน” เรื่อง “ความหลอน” ของเอไอนี้ ว่าอย่างน้อยต้องศึกษาในระดับปริญญาเอกขึ้นไป เรื่องนี้ไม่ใช่อะไร ถ้าคนที่เรียนอยู่ในระดับนี้เราจะรู้ว่าการแลกเปลี่ยนในชั้นสัมมนา หรือการอภิปรายในการนำเสนองานวิชาการแบบมาตรฐาน โดยส่วนใหญ่จะมีการซักถามคู่สนทนาแบบเข้มข้นดุเดือด ที่มักจะหาทางรื้อถอนความรู้คู่สนทนาจากฐานรากในระดับปรัชญาสไตล์ปริญญาเอกอยู่อย่างเป็นปกติและอย่างสม่ำเสมอ คนที่เรียนในระดับนี้จึงจะมีพื้นฐานไม่เชื่ออะไรใครง่าย ๆ และมีวิธีการแสวงหาความรู้และทดสอบความรู้ที่เข้มข้นจริงจัง แต่การสงสัยอะไรไปหมดทุกเรื่องนี้พื้นฐานความรู้ของเราเองจะต้องมีความหนักแน่นเข้มแข็งไม่คลอนแคลน เรียกว่ากว่าจะตกผลึกและเลือกมั่นคงกับความรู้ของเราเองต้องผ่านการวิวาทะ (หรือวิวาท) ทดสอบลองผิดลองถูกกับตนเองมานับครั้งไม่ถ้วน

ประเด็นเรื่องการเลือกมั่นคงกับความรู้ของเราเอง ในด้านหนึ่งก็หมายถึงไม่ได้ตรวจสอบวิพากษ์ความรู้ของตัวเราเองที่มีการยึดมั่นอย่างแข็งแรงนี้ ให้เท่าเทียมเหมือนกับการตรวจสอบความรู้จากผู้อื่นหรือคู่สนทนาซึ่งบางทีก็นำมาสู่ปัญหาอีกด้านเหมือนกัน เรื่องนี้อิมเร ลาคาทอส อธิบายไว้ในบท “Falsification and the Methodology of Scientific Research Programmes” ของหนังสือ “Criticism and the Growth of Knowledge, the Proceedings” โดยเฉพาะอย่างยิ่งแนวคิดเรื่อง “แนวป้องกันความรู้” (protective belt) และ “โปรแกรมการวิจัย” (research program) ได้อย่างจะแจ้งกว่าแนวคิดเรื่องกระบวนทัศน์ของโทมัส คูห์น มากนัก ถ้าสนใจเรื่องนี้โปรดอ่านในบทความที่ผมเขียนได้ที่ Academia

เอไอแต่ละชนิดมีขีดความสามารถไม่เท่ากัน ซึ่งนอกจากเรื่องสถาปัตยกรรมภายในของเอไอแต่ละตัวแล้ว ยังจะขึ้นอยู่กับจำนวน parameter รวมไปถึงทั้งคุณภาพและปริมาณฐานข้อมูลที่ใช้ในการฝึกสอนอีกด้วย โดยทั่วไปเอไอที่มีจำนวน parameter ขนาดใหญ่กว่า มักจะมีขีดความสามารถมากกว่าเอไอที่มีขนาด parameter ที่เล็กกว่าเมื่อใช้ฐานข้อมูลเพื่อฝึกสอนแบบเดียวกัน เป้าหมายหลักของการสร้างระบบเฟรมเวิร์กของเอไอคือต้องหาจุด optimum จากแรงเค้นสามด้านคือ การคงความถูกต้องแม่นยำของข้อมูล (accuracy) การสามารถจินตนาการมีความสร้างสรรค์ดังที่ควรเป็น (creativity) และในขณะเดียวกันก็สามารถลดปัญหาการคิดเรื่องเพ้อเจ้อไม่มีอะไรรองรับ (hallucination) ข้อความที่ผลิตโดยเอไอจะต้องมีความคงเส้นคงวาทางตรรกะ เราสามารถดูตารางการจัดอันดับเอไอได้จาก: source

เอาล่ะ แล้วถ้างั้นฐานข้อมูลแบบเว็คเตอร์จะช่วยลดความหลอนได้อย่างไร โดยปกติเอไอแบบ LLM จะมีแนวโน้มเบี่ยงเบนไปตาม “ความรู้” ที่ป้อนเข้าไปใหม่ โดยเฉพาะความรู้ที่ป้อนเข้าไปใหม่นี้แล้ว หากมีขนาดความยาวของเนื้อหาพอสมควร มีการเรียบเรียงอย่างเป็นระบบ และมีการอ้างอิงหลักฐานประกอบ มีเนื้อหาเป็นตรรกะที่สอดคล้องต้องกันโดยบริบูรณ์ โดยเฉพาะถ้าเป็นข้อมูลที่เรียบเรียงจากวรรณกรรมในโลกวิชาการ ก็จะได้รับความเชื่อถือจากเอไออย่างมากจนสามารถคัดง้างหรืออย่างน้อยก็โต้แย้งกับฐานข้อมูลเก่าที่เอไอถืออยู่ เราสามารถใช้กลไกนี้ในการสร้างฐานข้อมูลใหม่ที่เอไอยังไม่มีแล้วนำไปเก็บไว้ในฐานข้อมูลเว็คเตอร์ แล้วกำหนดให้เอไอทำการค้นความรู้นี้ออกมาจากฐานข้อมูล นี่เป็นวิธีการหนึ่งในการ: 1) ทั้งลดช่องว่างความรู้ที่ยังไม่ได้อัพเดตใหม่ (แชทจีพีทีอัพเดตความรู้สุดท้ายเมื่อปี 2021), และ 2) การใช้เป็นฐานข้อมูลอ้างอิงไม่ให้เอไอเกิดอาการ “หลอน”

ขั้นตอนการทำงานกับฐานข้อมูลเว็คเตอร์

ความจริงฐานข้อมูลเว็คเตอร์นี้มีหลายยี่ห้อ มีตั้งแต่ฐานข้อมูลฟรีที่เก็บไว้ในเครื่องของเราเองอย่างตัวของเฟสบุ๊คที่ชื่อว่า Facebook AI Similarity Search (Faiss) ก็มีคนนิยมใช้มาก ไปจนถึงตัวที่ผมจะใช้อ้างอิงหลักในบทความนี้คือ Pinecone ซึ่งเป็น cloud vector database ยอดนิยมอีกตัวหนึ่ง

ชุดข้อมูล (dataset) wikipedia 20220301.en บน hugging face ที่เราจะเตรียมใช้กับการทดลองฐานข้อมูลเว็คเตอร์

ขั้นตอนแรกคือเราจำเป็นจะต้องเตรียมชุดข้อมูล (dataset) ที่เราจะอัพโหลดขึ้น Pinecone ให้พร้อมเสียก่อน โดยทั่วไปฐานข้อมูลเหล่านี้มักจะมีผู้บริจาคให้สาธารณะอยู่โดยเก็บไว้ที่เว็บ hugging face เป็นส่วนใหญ่ ชุดข้อมูลที่เราจะใช้นี้เรียกว่า 2022 wiki dataset คือเป็นชุดข้อมูลวิกิพีเดียเมื่อปี 2022 ซึ่งเป็นปีที่ใหม่กว่าปี cutoff ของแชทจีพีที

การใช้ชุดคำสั่งทำ vectorized ให้กับชุดข้อมูล แล้วอัพเดตขึ้นไปบนฐานข้อมูลเว็คเตอร์ ซึ่งจะเวลาประมาณ 1 ชั่วโมงเต็ม

เมื่อเราดาวน์โหลดชุดข้อมูลนี้มาได้แล้ว ขั้นต่อไปคือการแตกชุดข้อมูลนี้ให้เป็นเว็คเตอร์ (vectorized) เพื่อให้เหมาะสมกับการเก็บขึ้นสู่ฐานข้อมูลเว็คเตอร์ (จะเรียกว่าการ “upsert”) ใน pinecone ที่ลงทะเบียนแบบไม่มีค่าใช้จ่ายเราจะใช้ฐานข้อมูลได้ 1 ชุดข้อมูล (pod) หรืออ้างด้วย index ที่เราตั้งชื่อในการสร้างฐานข้อมูลนั้น ตัว pinecone จะเก็บข้อมูลให้เราระยะหนึ่ง ถ้าไม่มีการเรียกใช้งานจะมีการลบฐานข้อมูลนี้ไปโดยอัตโนมัติ ดังนั้นถ้าเราไม่ต้องการให้ฐานข้อมูลถูกลบไปก็ควรจะหมั่นเรียกใช้งานหรือเข้าไปตรวจสอบฐานข้อมูลนี้อย่างสม่ำเสมอ การ upsert ข้อมูลขึ้นไปยังฐานข้อมูลนี้ใช้เวลาประมาณ 1 ชั่วโมง

ฐานข้อมูลที่อัพโหลดชุดข้อมูล wikipedia ฉบับล่าสุดขึ้นไปแล้วในที่นี้เราจะเห็นว่ามันครองพื้นที่ pod ราว 10% ด้วยจำนวนเว็คเตอร์ทั้งหมด 28,424 ชุด

Langchain

ปกติการทำงานกับเอไอแบบ LLMs จะมีคลังโปรแกรมหรือไลบรารีสำเร็จรูปสารพัดประโยชน์ที่เป็นโอเพนซอร์ส มาให้ใช้งานคือ Langchain โดยทั่วไป Langchain จะเตรียมเครื่องมือและไลบรารีสำหรับฐานข้อมูลเว็คเตอร์สารพัดยี่ห้อซึ่งก็รวมทั้ง Pinecone นี้มาให้ด้วย วิธีการเรียกใช้งานก็เป็นไปตามรูปข้างล่างนี้

เมื่อเราจู่ ๆ ไปตั้งคำถามเอไอว่ามีการรุกรานของรัสเซียต่อยูเครนในปี 2022 ไหม เอไอ (ในที่นี้คือ GPT-3.5 turbo) จะบอกว่าข้อมูลที่ตนเองมีอยู่ จะถูก Cutoff เมื่อเดือนตุลาคม 2021 ดังนั้นตัวเอไอนี้จึงจะไม่ทราบเรื่องใหม่เกี่ยวกับการรุกรานของรัสเซียต่อยูเครนในปีที่เกินจากปี Cutoff ที่เราถามไปนี้ ซึ่งในที่นี้มันก็ตอบมาตามตรงว่ามันไม่ทราบเรื่องนี้ ในบางกรณีเอไออาจจะตอบว่าการรุกรานของรัสเซียต่อยูเครนเกิดขึ้นเมื่อปี 2014 ซึ่งเป็นปีที่เข้ายึดครองไครเมีย ข้อมูลนี้ก็ถูกต้องเหมือนกัน แต่เราต้องการให้หมายความถึงว่าการ “ทำสงครามรุกรานเต็มรูปแบบ” (Russian full-scale invasion of Ukraine) ซึ่งจะเกิดขึ้นในปี 2022 นั่นเอง
ขั้นตอนแรกใช้คำสั่งใน langchain ดึงข้อมูลเรื่องการรุกรานยูเครนของรัสเซียขึ้นมา โดยการใช้ prompt “which year have Russia invaded Ukraine?” เอไอจะดึงฐานข้อมูลเว็คเตอร์ขึ้นมาอย่างถูกต้องว่ามีการรุกรานเกิดขึ้นวันที่ 24 กุมภาพันธ์ 2022
เทคนิคการใช้งานฐานข้อมูลเว็คเตอร์เพื่ออัพเดตความรู้ให้กับเอไอ การทำงานใช้ช่องคำสั่งของ jupyter notebook นี้จะเชื่อมกับช่องคำสั่งข้างบน (ทำงานต่อเนื่องกันและใช้ตัวแปรที่เกี่ยวข้องกัน) เอไอจะรับรู้ว่ามีการรุกรานของรัสเซียต่อยูเครนในปี 2022 จริง จะเห็นว่าวิธีการเขียนพร้อมพท์เพื่อใช้งานเอไอผมตั้งใจไม่ใช้ไลบรารีสำเร็จรูปอย่าง langchain เลย เพื่อแสดงให้เห็นว่าวิธีการเรียกใช้งานตรง ๆ ก็ทำได้เหมือนกัน ส่วนข้อวิจารณ์ของการใช้เทคนิคเช่นนี้ คือแทนที่เราจะใช้วิธีการดึงข้อมูลจากฐานข้อมูลเวคเตอร์แต่เราไปค้นหาจาก search engine แล้วดึงขึ้นมาจากเว็บไซต์อย่างวิกิพีเดียโดยตรงก็จะได้ข้อมูลไม่ต่างกันหรืออาจจะดีกว่าหรือไม่?

เทคนิคการ “ประสาน” ความจำภายนอกจาก pinecone กับความรู้อื่นที่มีอยู่ภายในตัวเอไอเอง โดยทั่วไปเราจะใช้เทคนิคในการทำงานผ่านพื้นที่แชร์ร่วมกันของ prompt อย่างที่แสดงให้เห็นในโค้ดข้างต้น เทคนิคการทำงานนี้ยังมีข้อจำกัดอยู่ เพราะ gpt-3.5 / 4 ยังตั้งข้อจำกัด token ไว้ที่ 4,096 tokensในขณะที่ gpt-3.5-turbo-16k จะกำหนดให้ใช้ได้ถึง 16,384 tokens ตัวที่สามารถใช้จำนวน token มากกว่านี้ เช่น gpt-4–32k ซึ่งสามารถใช้ได้ที่ 32,768 tokens (มีปริมาณตัวอักษรคร่าว ๆ เทียบเท่ากับราว 30–50 หน้ากระดาษ A4) ยังไม่ถูกปล่อยออกให้ใช้งาน ดังนั้นจึงจำเป็นที่จะต้องมีเทคนิคพิเศษอื่นมาใช้งานร่วมเพิ่มเติม จึงจะสามารถทำให้การประสานความจำนี้เป็นไปอย่างมีประสิทธิภาพสูงสุด

ข้อมูลอ้างอิง

  • ข้อมูลเบื้องต้นของ Pinecone Vector Database หาอ่านได้จากบทความนี้: What is Vector Database
  • ข้อมูลเปรียบเทียบฐานข้อมูลเว็คเตอร์แบบต่าง ๆ ที่มีอยู่ในท้องตลาดสามารถหาอ่านได้จากบทความนี้: Optimize Data Processing with Vector Database
  • การใช้งาน pinecone กับ langchain ในบทความนี้จะอ้างอิงตามเอกสารชุดนี้: Langchain Retrieval Augmentation
  • บทความนี้จะอธิบายให้เราฟังว่าทำไมเวลาใช้ OpenAI API กับ Pinecone แล้วตอนสร้าง index จึงต้องกำหนดค่ามาตรฐานเป็น Cosine metric และใช้ตัวเลข dimension ที่ 1536 ซึ่งถือเป็นเลขกล (magic number): Pinecone and OpenAI magic: A guide to finding your long lost blog posts with vectorized search and ChatGPT
  • ดูตัวอย่างบทความที่พูดถึงสถาปัตยกรรมในการประยุกต์ใช้โมเดลภาษาเพื่อทำงานร่วมกับฐานข้อมูล: best practices for data-informed language model applications
  • บทความนี้พูดถึงวิธีการติดตั้ง AutoGPT เบื้องต้นและข้อมูลต่าง ๆ ที่เกี่ยวข้อง: Auto-GPT tutorial: How to set up Auto-GPT
  • บทความนี้พูดถึงวิธีการสร้างเอเจนท์เอไอที่ทำงานอัตโนมัติในลักษณะเดียวกับ AutoGPT ด้วย GPT-4, Langchain และ Pinecone: ask-driven Autonomous Agent Utilizing GPT-4, Pinecone, and LangChain for Diverse Applications
  • ดูรายชื่อเอเจนท์เอไออัตโนมัติอื่น ๆ ที่ปรับปรุงมาจาก BabyAGI ได้จาก source
  • นอกจากชุดข้อมูลที่ hugging face แล้วยังมีชุดข้อมูลที่เก็บไว้ที่แหล่งเก็บจากเว็บไซต์หรือแหล่งข้อมูลอื่นอีกมาก โปรดดูข้อมูลเพิ่มเติมได้จาก: Top 10 Platforms for Thousands of ML and AI Datasets You Need to Know
  • การฝึกสอนเอไอแบบ LLM ให้สามารถสนทนากับมนุษย์เป็นผู้เป็นคนมักต้องใช้ข้อมูลพร้อมพท์ที่ใช้งานจริงในการฝึกสอน มีการเก็บข้อมูลพร้อมพท์ที่ใช้งานได้จริงแล้วนำมาแบ่งปันกันที่ ShareGPT (ส่วนใหญ่มักเป็นพร้อมพท์ที่ใช้งานกับ ChatGPT) ซึ่งผมไม่แน่ใจว่าเจ้าของเกี่ยวข้องอะไรกับ dub.sh หรือไม่เพราะมีแนวคิดคล้ายกัน มีผู้นำชุดข้อมูลของ ShareGPT มาแบ่งปันกับสาธารณะ และสคริปต์ที่ใช้ทำความสะอาดชุดข้อมูล รวมไปถึงชุดข้อมูลที่มีการทำความสะอาดไว้แล้วที่ [source] อนึ่งกูเกิ้ลออกมาปฏิเสธข่าวว่าตนเองไม่ได้ใช้ชุดข้อมูลจาก ShareGPT มาฝึกสอน Bard
  • ดูรายชื่อและข้อมูลของ Gen AI แบบ LLM ที่มีในท้องตลาดเบื้องต้นได้ที่: The Generative AI Revolution: Exploring the Current Landscape

--

--

Kan Yuenyong

A geopolitical strategist who lives where a fine narrow line amongst a collision of civilizations exists.