ชุมชนโอเพนซอร์สได้แสดงความสนใจใน Hann ซึ่งเป็นไลบรารีใหม่สำหรับการค้นหาเพื่อนบ้านที่ใกล้เคียงโดยประมาณ (ANN) ที่มีประสิทธิภาพสูงสำหรับภาษา Go ในขณะเดียวกันก็ชี้ให้เห็นถึงช่องว่างที่สำคัญ: การขาดการเปรียบเทียบประสิทธิภาพกับโซลูชันการค้นหาเวกเตอร์ที่มีอยู่แล้ว
ชุมชนเรียกร้องการเปรียบเทียบประสิทธิภาพ
ผู้ใช้ที่ตรวจสอบความสามารถของ Hann ได้ชี้ให้เห็นอย่างสม่ำเสมอถึงความจำเป็นในการทดสอบประสิทธิภาพโดยเปรียบเทียบกับโซลูชันการค้นหาเวกเตอร์ที่มีอยู่แล้ว ผู้แสดงความคิดเห็นหลายคนได้กล่าวถึงการขาดข้อมูลประสิทธิภาพที่เปรียบเทียบ Hann กับทางเลือกยอดนิยมอย่าง Redis, Vertex, Elasticsearch และ FAISS ข้อเสนอแนะนี้เน้นย้ำถึงความต้องการทั่วไปในชุมชนเทคนิค: ตัวชี้วัดประสิทธิภาพที่เป็นรูปธรรมซึ่งช่วยให้นักพัฒนาสามารถตัดสินใจอย่างมีข้อมูลเมื่อเลือกเครื่องมือสำหรับโปรเจกต์ของพวกเขา
ไลบรารีที่ยอดเยี่ยม... ตอนนี้มีวิธีที่เป็นเนทีฟในภาษา Go สำหรับสร้างเวกเตอร์จากข้อความไหม?
ความคิดเห็นข้างต้นเน้นให้เห็นอีกแง่มุมที่น่าสนใจของการสนทนา - ระบบนิเวศรอบการค้นหาเวกเตอร์ใน Go ในขณะที่ Hann มอบความสามารถในการค้นหา ผู้ใช้ยังมองหาเครื่องมือเสริมเพื่อสร้างเอมเบดดิงจากข้อความ โดยมีข้อเสนอแนะเช่น Ollama ที่ถูกนำเสนอเป็นโซลูชันที่เป็นไปได้
ความกังวลของชุมชน
- ขาดการเปรียบเทียบประสิทธิภาพกับโซลูชันที่มีอยู่แล้ว ( Redis , Vertex , Elastic , FAISS )
- การพึ่งพาคอมไพเลอร์ภาษา C แทนที่จะเป็นการพัฒนาด้วย Go ล้วน
- ประสิทธิภาพการทำงานของการใช้ HNSW ที่ยังไม่เป็นที่ทราบแน่ชัด
- การบูรณาการกับเครื่องมือสร้างเวกเตอร์สำหรับข้อความ
แนวทางการพัฒนาสร้างคำถาม
กลยุทธ์การพัฒนาของ Hann ได้จุดประกายการถกเถียงทางเทคนิคในหมู่นักพัฒนา Go ไลบรารีนี้ต้องการคอมไพเลอร์ C หรือ C++ เนื่องจากการใช้คำสั่ง SIMD (AVX) สำหรับการคำนวณระยะทางที่รวดเร็ว ซึ่งถูกนำไปใช้ผ่าน FFI (Foreign Function Interface) ไปยัง C การเลือกการออกแบบนี้ทำให้นักพัฒนาบางคนตั้งคำถามว่าการพัฒนาด้วย Go ล้วนอาจเป็นที่ต้องการมากกว่า โดยผู้แสดงความคิดเห็นคนหนึ่งแนะนำว่าส่วนที่เป็น C อาจถูกเขียนใหม่ในแอสเซมบลีโดยใช้เครื่องมือเช่นไลบรารี avo เพื่อกำจัดการพึ่งพาคอมไพเลอร์ภายนอก
ภาพรวมคุณสมบัติของ Hann
- ดัชนีที่รองรับ: HNSW (Hierarchical Navigable Small World), PQIVF (Product Quantization Inverted File), RPT (Random Projection Tree)
- เมตริกระยะทาง: ระยะทางแบบยุคลิด, ยุคลิดกำลังสอง, แมนฮัตตัน และโคไซน์ (HNSW); เฉพาะแบบยุคลิดเท่านั้น (PQIVF, RPT)
- การพัฒนา: ใช้ภาษา Go ร่วมกับโค้ด C สำหรับการคำนวณระยะทางที่เพิ่มประสิทธิภาพด้วย SIMD (AVX)
- ความต้องการ: Go 1.21 ขึ้นไป, คอมไพเลอร์ C/C++, CPU ที่รองรับ AVX
- ความสามารถหลัก: การดำเนินการแบบกลุ่ม, การเก็บข้อมูลถาวรบนดิสก์, เวกเตอร์ที่มีมิติตามต้องการ
ประสิทธิภาพเปรียบเทียบของการพัฒนา HNSW
สมาชิกในชุมชนหลายคนที่มีประสบการณ์ในเทคโนโลยีการค้นหาเวกเตอร์สังเกตว่าไม่ใช่ทุกการพัฒนาของอัลกอริทึม Hierarchical Navigable Small World (HNSW) - หนึ่งในดัชนีที่ Hann รองรับ - จะมีประสิทธิภาพเท่ากัน มีการแบ่งปันการอ้างอิงไปยังเว็บไซต์ ann-benchmarks.com พร้อมคำแนะนำว่า Hann ควรทดสอบประสิทธิภาพการพัฒนา HNSW ของตนเทียบกับรายอื่น และอาจนำเทคนิคจากเวอร์ชันที่มีประสิทธิภาพดีที่สุดมาใช้ สิ่งนี้เน้นย้ำความเป็นจริงที่ละเอียดอ่อนของการพัฒนาอัลกอริทึม ที่แนวทางทางทฤษฎีสามารถให้ประสิทธิภาพในโลกแห่งความเป็นจริงที่แตกต่างกันอย่างมีนัยสำคัญตามรายละเอียดการพัฒนา
Hann เป็นการเพิ่มเติมที่น่าสนใจให้กับระบบนิเวศ Go สำหรับนักพัฒนาที่ทำงานกับความสามารถในการค้นหาเวกเตอร์ ในขณะที่ชุดคุณสมบัติของมันดูครอบคลุม - รองรับประเภทดัชนีหลายแบบรวมถึง HNSW, PQIVF และ RPT พร้อมเมตริกระยะทางที่หลากหลาย - การสนทนาในชุมชนทำให้เห็นชัดว่าข้อมูลประสิทธิภาพเชิงประจักษ์จะมีความสำคัญต่อการนำไปใช้ ในขณะที่การค้นหาเวกเตอร์มีความสำคัญมากขึ้นสำหรับแอปพลิเคชันที่เกี่ยวข้องกับ AI, การเรียนรู้ของเครื่อง และการค้นหาเชิงความหมาย นักพัฒนา Go จะติดตามอย่างใกล้ชิดเพื่อดูว่า Hann จะวัดผลเทียบกับทางเลือกที่มีอยู่แล้วได้อย่างไร
อ้างอิง: Hann