เปิดตัวชุดข้อมูลการค้นหาเวกเตอร์อีมเบดดิ้งจากโพสต์และคอมเมนต์ของ Hacker News จำนวน 28 ล้านรายการ
(clickhouse.com)- ชุดข้อมูล Hacker News ประกอบด้วยโพสต์และคอมเมนต์จำนวน 28.74 ล้านรายการ โดยข้อความแต่ละรายการมี เวกเตอร์อีมเบดดิ้ง 384 มิติ ที่สร้างจากโมเดล SentenceTransformers all-MiniLM-L6-v2
- ข้อมูลถูกเผยแพร่ในรูปแบบ ไฟล์ Parquet เดียว (S3 bucket) ที่ ClickHouse ให้บริการ และสามารถนำไปใช้สำหรับการออกแบบและประเมินประสิทธิภาพของ แอปพลิเคชันค้นหาเวกเตอร์ขนาดใหญ่ ได้
- มีตัวอย่างโค้ด SQL แสดงขั้นตอนการสร้างตาราง การโหลดข้อมูล การสร้าง ดัชนีความคล้ายคลึงเวกเตอร์บน HNSW และการรัน query ค้นหาแบบขั้นตอนต่อขั้นตอน
- ในตัวอย่าง Python จะสร้างอีมเบดดิ้งของ query ด้วย SentenceTransformers และใช้ฟังก์ชัน cosineDistance() ของ ClickHouse เพื่อทำการค้นหาแบบ semantic search
- แอปสาธิตการสรุปผล ต่อเนื่องต่อมาใช้ LangChain และ OpenAI GPT-3.5-turbo สรุปผลลัพธ์โพสต์ที่ค้นพบ และชี้ให้เห็นศักยภาพขยายไปสู่ กรณีการใช้งาน AI สร้างสรรค์ในองค์กร
ภาพรวมชุดข้อมูลการค้นหาเวกเตอร์ Hacker News
- ชุดข้อมูลนี้ประกอบด้วย โพสต์และคอมเมนต์ของ Hacker News จำนวน 2.874 ล้านรายการ โดยแต่ละรายการมี เวกเตอร์อีมเบดดิ้ง 384 มิติ ที่สร้างจาก SentenceTransformers all-MiniLM-L6-v2
- อีมเบดดิ้งถูกสร้างด้วย โมเดลอีมเบดดิ้งแบบ local เพื่อจับความหมายของประโยคและย่อหน้า
- ชุดข้อมูลนี้สามารถใช้ได้สำหรับการออกแบบ แอปพลิเคชันค้นหาเวกเตอร์ขนาดใหญ่ที่อ้างอิงจากข้อมูลข้อความที่ผู้ใช้สร้างขึ้น การประเมินขนาด และการวิเคราะห์ประสิทธิภาพ
รายละเอียดชุดข้อมูล
- ข้อมูลทั้งหมดเป็น ไฟล์ Parquet เดียว ที่ ClickHouse ให้บริการ และสามารถดาวน์โหลดได้จากบั๊กเก็ต S3 (
https://clickhouse-datasets.s3.amazonaws.com/hackernews-miniLM/…) - แนะนำให้ผู้ใช้ดู คู่มือ ANN index ของเอกสาร ClickHouse เพื่อประเมินความต้องการด้านการจัดเก็บข้อมูลและหน่วยความจำ
ขั้นตอนการโหลดข้อมูลและสร้างดัชนี
- ตาราง
hackernewsจะถูกสร้างให้ประกอบด้วยคอลัมน์ต่างๆ เช่น รหัสโพสต์ ข้อความ เวกเตอร์ ผู้เขียน เวลา และคะแนน - การโหลดข้อมูลทำผ่านคำสั่ง SQL ต่อไปนี้
INSERT INTO hackernews SELECT * FROM s3('https://clickhouse-datasets.s3.amazonaws.com/hackernews-miniLM/…');- การ
INSERTจำนวนประมาณ 28.74 ล้านแถว ใช้เวลาเพียงไม่กี่นาที
- การ
- ดัชนีความคล้ายคลึงเวกเตอร์ถูกสร้างด้วย อัลกอริทึม HNSW และ cosineDistance
ALTER TABLE hackernews ADD INDEX vector_index vector TYPE vector_similarity('hnsw', 'cosineDistance', 384, 'bf16', 64, 512); ALTER TABLE hackernews MATERIALIZE INDEX vector_index SETTINGS mutations_sync = 2;- ตั้งค่าเป็น
M=64,ef_construction=512และการสร้างดัชนีอาจใช้เวลาหลายนาทีจนถึงหลายชั่วโมง ขึ้นอยู่กับจำนวนคอร์ CPU และแบนด์วิดท์ของ storage
- ตั้งค่าเป็น
- หลังจากสร้างดัชนีแล้ว การ query ค้นหาเวกเตอร์จะใช้งานดัชนีโดยอัตโนมัติ
SELECT id, title, text FROM hackernews ORDER BY cosineDistance(vector, <search vector>) LIMIT 10- การโหลดดัชนีเข้าหน่วยความจำอาจใช้เวลาเพียงไม่กี่วินาทีถึงไม่กี่นาที
ตัวอย่างการค้นหาเชิงความหมายด้วย Python
- สคริปต์ Python สร้างอีมเบดดิ้งของ query โดยใช้ SentenceTransformers และรัน query ผ่าน ClickHouse Connect
- ใช้ฟังก์ชัน cosineDistance() เพื่อคำนวณความคล้ายคลึงระหว่างเวกเตอร์ป้อนเข้าและเวกเตอร์ในชุดข้อมูล
- ในตัวอย่างรันจริง มีการแสดงโพสต์ที่เกี่ยวข้องสูงสุด 20 รายการสำหรับ query ว่า “Are OLAP cubes useful”
- ผลลัพธ์จะแสดงรหัสโพสต์และส่วนหนึ่งของข้อความโพสต์ (100 ตัวอักษร)
แอปสาธิตการสรุปผล
- หลังจากสาธิตการค้นหาความหมายและการค้นหาเอกสารด้วย ClickHouse แล้ว สร้างตัวอย่าง แอปสรุปผลด้วย AI แบบ generative ขึ้น
- ขั้นตอนหลักคือ
- รับหัวข้อจากผู้ใช้
- สร้างอีมเบดดิ้งของหัวข้อด้วย
SentenceTransformers all-MiniLM-L6-v2 - ค้นหาโพสต์/คอมเมนต์ที่เกี่ยวข้องด้วยการค้นหาเวกเตอร์คล้ายคลึงใน ClickHouse
- สรุปผลลัพธ์ด้วย
LangChainและ OpenAIgpt-3.5-turbo
- ในตัวอย่างการรัน มีการค้นหาด้วยหัวข้อ “ClickHouse performance experiences” แล้ว GPT-3.5 สร้างสรุปผล
- สรุปเน้นเรื่อง ประสิทธิภาพ ความเรียบง่าย ประสิทธิผล และความเหมาะสมสำหรับการวิเคราะห์ขนาดใหญ่ ของ ClickHouse พร้อมกล่าวถึง ความยากในการใช้งาน DML และการสำรองข้อมูล บางส่วน
- แอปนี้สามารถขยายไปเป็นกรณีการใช้งาน AI แบบ generative ในองค์กรได้ เช่น วิเคราะห์ความรู้สึกของลูกค้า อัตโนมัติฝ่ายสนับสนุน สรุปบันทึกการประชุม และวิเคราะห์เอกสารทางการเงิน
โครงสร้างโค้ดแอปสรุปผล
- ในโค้ด Python มีการใช้
SentenceTransformer,clickhouse_connect,LangChain,ChatOpenAIและคอมโพเนนต์อื่นๆ - รวมผลลัพธ์การค้นหาแล้วส่งเข้าโมเดล GPT-3.5 เพื่อสร้าง ข้อความสรุปไม่เกิน 10 ประโยค
- เลือกใช้ chain แบบ
stuffหรือmap_reduceตามจำนวน token ของข้อความนำเข้า - ผลลัพธ์จะแสดงในรูปแบบ “Summary from chatgpt-3.5:”
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
ชุดข้อมูลเวกเตอร์เอ็มเบดดิงใหม่นี้แนะนำว่าไม่ควรใช้ all-MiniLM-L6-v2
โมเดลนี้เคยเป็นโมเดลเชิงปฏิบัติบนพื้นฐาน sentence-transformers ที่ถูกใช้บ่อยในทิวทอเรียลยุคแรก ๆ แต่ตอนนี้เก่าแล้วและไม่สะท้อน สถาปัตยกรรมและไปป์ไลน์การฝึก สมัยใหม่
ความยาวคอนเท็กซ์ก็สั้นแค่ 512 ด้วย แนะนำ EmbeddingGemma แทน รองรับคอนเท็กซ์วินโดว์ 2k และทำคะแนนเบนช์มาร์กได้ดีมาก
แม้จะช้ากว่าแต่ก็คุ้มค่า ทางสายกลางก็มี bge-base-en-v1.5 หรือ nomic-embed-text-v1.5 ที่ก็ดีเหมือนกัน
เป็น โอเพนน้ำหนักโมเดล, รองรับหลายภาษา, และให้คอนเท็กซ์ 32k
ขนาดเล็กประมาณ 70MB ดาวน์โหลดง่าย ส่วน EmbeddingGemma เกิน 300MB เลยค่อนข้างหนัก
เลยสงสัยว่ามีโมเดลที่ใช้ได้ดีและขนาดต่ำกว่า 100MB ไหม
‘Gemma license’ ค่อนข้างคลุมเครือ อาจต้องตรวจสอบทางกฎหมาย
ถ้า Google เปลี่ยนรายการ “การใช้งานที่จำกัด” ก็อาจเสี่ยงถูกห้ามใช้ได้ทุกเมื่อ
เช่น Cohere vs OpenAI small vs OpenAI large แต่หาข้อมูลเปรียบเทียบแบบนี้ได้น้อยมาก
ไม่แน่ใจว่าควรเบนช์มาร์กโดยใช้เกณฑ์อะไร
ทำงานบน CPU ได้ดีด้วย
ตั้งแต่ปี 2023 มีการทำเอ็มเบดดิงคอมเมนต์ HN ทั้งหมดใน BigQuery และโฮสต์ไว้ที่ hn.fiodorov.es
ซอร์สโค้ดเปิดเผยอยู่บน GitHub
พอค้นหา “Who’s Gary Marcus” ก็ได้ผลลัพธ์ที่ เป็นลบ มากกว่า Google
เลยสงสัยว่าค่าใช้จ่ายในการรันระบบนี้อยู่ที่เท่าไร
ตาม นโยบายความเป็นส่วนตัวและข้อมูล ของ HN ห้ามนำคอมเมนต์ไปใช้เชิงพาณิชย์
แม้แต่การแทนข้อมูลเป็นเวกเตอร์ก็ในทางเทคนิคถือเป็น งานดัดแปลง
ห้ามคัดลอก เผยแพร่ แก้ไข หรือสร้างงานดัดแปลงจากเนื้อหาในเว็บไซต์เพื่อการค้า
และยังห้าม data mining, scraping และการกระทำลักษณะเดียวกันด้วย
ฉันคิดว่าฉันมีสิทธิ์สร้างฐานข้อมูลเวกเตอร์เป็น อุปกรณ์ช่วยจำภายนอก ของความทรงจำตัวเอง
ถ้ามีเมนูคลิกขวาใน HN แบบ “ดูประโยคที่คล้ายกัน” ก็น่าจะดี
น่าจะช่วยให้รู้ได้ด้วยว่าเคยมีข้อเสนอแบบเดียวกันนี้มาก่อนหรือเปล่า
จะได้เห็นว่าประเด็นเดียวกันถูกพูดซ้ำในโพสต์อื่นมากแค่ไหน
และยังดูปฏิกิริยาในอดีตต่อสิ่งที่ฉันกำลังจะเขียนได้ล่วงหน้า
มันอาจกลายเป็นแนวคิดแบบ semantic thread ได้เลย
สงสัยว่ามีงานวิจัยที่เปรียบเทียบ การค้นหาแบบเวกเตอร์ vs การค้นหาข้อความทั่วไป ไหม
กำลังคิดอยู่ว่าการค้นหาแบบเวกเตอร์คุ้มค่าจริงหรือเปล่า
เขาบอกว่ารวม HN post กับเมทาดาทาของเอ็มเบดดิงแล้วมีขนาด 55GB เลยสงสัยว่าถ้าเป็นไฟล์ Parquet จะขนาดนั้นจริงไหม
ถ้าจุดประสงค์เดียวคือเอาคอมเมนต์ไปใช้ ฝึกโมเดลเชิงพาณิชย์ ก็รู้สึกขมขื่นนิดหน่อย
สถานการณ์แบบนี้อาจส่งผลต่อความอยากมีส่วนร่วมของฉันในอนาคต
เมื่อก่อนให้ความรู้สึกเหมือนกำลังช่วยคนแปลกหน้า แต่ตอนนี้เหมือนกำลังช่วยคนที่ฉันไม่ชอบ
ที่ไหนสักแห่งในโมเดลขนาดยักษ์แห่งอนาคต คำพูดของฉันอาจยังสั่นสะเทือนอยู่เล็กน้อย
อยากให้มี ฟีเจอร์ลบบัญชี/คอมเมนต์
ในทางปฏิบัติมันกลายเป็น ข้อมูลถาวร และสักวันหนึ่งคอมเมนต์ของฉันอาจเหลืออยู่ราวกับภูมิปัญญาโบราณก็ได้
มีงานหนึ่งถูกลบออกจากรายการสิ่งที่ต้องทำแล้ว (เพราะโปรเจ็กต์นี้)
สมมติว่าเพื่อนถาม... ถ้าคอมเมนต์ที่นี่ นั่นหมายความว่ามันจะถูก แปลงเป็นเวกเตอร์ ใช่ไหม?