4 คะแนน โดย GN⁺ 2025-11-29 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • ชุดข้อมูล 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 ขึ้น
  • ขั้นตอนหลักคือ
    1. รับหัวข้อจากผู้ใช้
    2. สร้างอีมเบดดิ้งของหัวข้อด้วย SentenceTransformers all-MiniLM-L6-v2
    3. ค้นหาโพสต์/คอมเมนต์ที่เกี่ยวข้องด้วยการค้นหาเวกเตอร์คล้ายคลึงใน ClickHouse
    4. สรุปผลลัพธ์ด้วย LangChain และ OpenAI gpt-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 ความคิดเห็น

 
GN⁺ 2025-11-29
ความคิดเห็นบน Hacker News
  • ชุดข้อมูลเวกเตอร์เอ็มเบดดิงใหม่นี้แนะนำว่าไม่ควรใช้ all-MiniLM-L6-v2
    โมเดลนี้เคยเป็นโมเดลเชิงปฏิบัติบนพื้นฐาน sentence-transformers ที่ถูกใช้บ่อยในทิวทอเรียลยุคแรก ๆ แต่ตอนนี้เก่าแล้วและไม่สะท้อน สถาปัตยกรรมและไปป์ไลน์การฝึก สมัยใหม่
    ความยาวคอนเท็กซ์ก็สั้นแค่ 512 ด้วย แนะนำ EmbeddingGemma แทน รองรับคอนเท็กซ์วินโดว์ 2k และทำคะแนนเบนช์มาร์กได้ดีมาก
    แม้จะช้ากว่าแต่ก็คุ้มค่า ทางสายกลางก็มี bge-base-en-v1.5 หรือ nomic-embed-text-v1.5 ที่ก็ดีเหมือนกัน

    • ช่วงนี้ชอบ Qwen3-Embedding-0.6B มากกว่า
      เป็น โอเพนน้ำหนักโมเดล, รองรับหลายภาษา, และให้คอนเท็กซ์ 32k
    • ถึงอย่างนั้นข้อดีของ all-Mini ก็คือ รันฝั่งไคลเอนต์ได้
      ขนาดเล็กประมาณ 70MB ดาวน์โหลดง่าย ส่วน EmbeddingGemma เกิน 300MB เลยค่อนข้างหนัก
      เลยสงสัยว่ามีโมเดลที่ใช้ได้ดีและขนาดต่ำกว่า 100MB ไหม
    • น่าเสียดายเรื่อง ปัญหาไลเซนส์ ของ EmbeddingGemma
      ‘Gemma license’ ค่อนข้างคลุมเครือ อาจต้องตรวจสอบทางกฎหมาย
      ถ้า Google เปลี่ยนรายการ “การใช้งานที่จำกัด” ก็อาจเสี่ยงถูกห้ามใช้ได้ทุกเมื่อ
    • อยากเห็นการเปรียบเทียบระหว่างโมเดลเอ็มเบดดิงเชิงพาณิชย์ต่าง ๆ
      เช่น Cohere vs OpenAI small vs OpenAI large แต่หาข้อมูลเปรียบเทียบแบบนี้ได้น้อยมาก
      ไม่แน่ใจว่าควรเบนช์มาร์กโดยใช้เกณฑ์อะไร
    • เมื่อไม่กี่สัปดาห์ก่อนลองทำ AB test ระหว่าง EmbeddingGemma กับ nomic-embed-text-v1 แล้วฝั่ง nomic ให้ผลลัพธ์ดีกว่ามาก
      ทำงานบน CPU ได้ดีด้วย
  • ตั้งแต่ปี 2023 มีการทำเอ็มเบดดิงคอมเมนต์ HN ทั้งหมดใน BigQuery และโฮสต์ไว้ที่ hn.fiodorov.es
    ซอร์สโค้ดเปิดเผยอยู่บน GitHub

    • ลองใช้เองแล้วและได้คำตอบที่ค่อนข้างดี
      พอค้นหา “Who’s Gary Marcus” ก็ได้ผลลัพธ์ที่ เป็นลบ มากกว่า Google
      เลยสงสัยว่าค่าใช้จ่ายในการรันระบบนี้อยู่ที่เท่าไร
    • คำอธิบาย สถาปัตยกรรม ใน GitHub repo น่าประทับใจมาก เป็นโปรเจ็กต์ที่ยอดเยี่ยม
    • อยากรู้ว่าใช้ ฮาร์ดแวร์ อะไรสร้างเอ็มเบดดิง และใช้เวลานานแค่ไหน
    • อยากรู้ว่ามี ฟีเจอร์ส่ง issue เพื่อให้ผู้ใช้ขอลบข้อมูลของตัวเองได้หรือไม่
  • ตาม นโยบายความเป็นส่วนตัวและข้อมูล ของ HN ห้ามนำคอมเมนต์ไปใช้เชิงพาณิชย์
    แม้แต่การแทนข้อมูลเป็นเวกเตอร์ก็ในทางเทคนิคถือเป็น งานดัดแปลง

    • ตาม ข้อกำหนดการใช้งานของ Y Combinator
      ห้ามคัดลอก เผยแพร่ แก้ไข หรือสร้างงานดัดแปลงจากเนื้อหาในเว็บไซต์เพื่อการค้า
      และยังห้าม data mining, scraping และการกระทำลักษณะเดียวกันด้วย
    • แน่นอนว่าเวกเตอร์เป็นงานดัดแปลง แต่ในความทรงจำของฉันก็เป็นงานดัดแปลงเหมือนกัน
      ฉันคิดว่าฉันมีสิทธิ์สร้างฐานข้อมูลเวกเตอร์เป็น อุปกรณ์ช่วยจำภายนอก ของความทรงจำตัวเอง
    • พูดเล่นนะ ฉันกำลังจะขอให้ลบคอมเมนต์ทั้งหมดของตัวเองพอดี ตอนนี้คงไม่ต้องแล้ว
    • งั้นคงต้องมีใครบอก OpenAI ด้วย
  • ถ้ามีเมนูคลิกขวาใน HN แบบ “ดูประโยคที่คล้ายกัน” ก็น่าจะดี
    น่าจะช่วยให้รู้ได้ด้วยว่าเคยมีข้อเสนอแบบเดียวกันนี้มาก่อนหรือเปล่า

    • ถ้าเชื่อมคอมเมนต์กับเธรดแบบ อิงความหมาย ได้ก็น่าจะน่าสนใจมาก
      จะได้เห็นว่าประเด็นเดียวกันถูกพูดซ้ำในโพสต์อื่นมากแค่ไหน
      และยังดูปฏิกิริยาในอดีตต่อสิ่งที่ฉันกำลังจะเขียนได้ล่วงหน้า
      มันอาจกลายเป็นแนวคิดแบบ semantic thread ได้เลย
    • ถ้าใช้ฟีเจอร์นั้น คงเจอคำอย่าง “tangential, orthogonal, anecdata, enshittification, razor…” เต็มไปหมด
    • เมื่อก่อนเคยมีคนทำ เครื่องมือระบุบัญชีรอง ของ HN และมันน่ากลัวมากเพราะแทบจะจับได้แม่นเกือบสมบูรณ์จากสไตล์การเขียนอย่างเดียว
  • สงสัยว่ามีงานวิจัยที่เปรียบเทียบ การค้นหาแบบเวกเตอร์ vs การค้นหาข้อความทั่วไป ไหม
    กำลังคิดอยู่ว่าการค้นหาแบบเวกเตอร์คุ้มค่าจริงหรือเปล่า

    • การค้นหาทั่วไปมักเรียกว่า bm25 และในงานวิจัยด้านเสิร์ชส่วนใหญ่ใช้ bm25 เป็น baseline
    • ไม่รู้ว่ามีเปเปอร์เฉพาะเรื่องนี้ไหม แต่บัญชี reachsumit.com บน Bluesky มักแชร์ข้อมูลเกี่ยวกับ RAG และการค้นคืนสารสนเทศ อยู่บ่อย ๆ
    • สิ่งสำคัญคือจะเปรียบเทียบในมิติไหน — เป็นภาระของเซิร์ฟเวอร์หรือประสบการณ์ผู้ใช้ เพราะคำตอบต่างกันได้
  • เขาบอกว่ารวม HN post กับเมทาดาทาของเอ็มเบดดิงแล้วมีขนาด 55GB เลยสงสัยว่าถ้าเป็นไฟล์ Parquet จะขนาดนั้นจริงไหม

    • น่าจะเป็น ข้อมูลเอ็มเบดดิง เสียส่วนใหญ่ ฐานข้อมูลของฉันมีทั้งโพสต์และคอมเมนต์ HN ทั้งหมด ขนาดก่อนบีบอัด 17.68GB และหลังบีบอัดประมาณ 5.67GB
    • ประสิทธิภาพการบีบอัด ดีจนน่าตกใจ ถ้าใช้ Brotli แม้มีหลายล้านเพจก็ลดเหลือ 1~2GB ได้
    • ดูจากตารางแล้วตัวเลขนั้นก็น่าจะถูก ฉันเองก็อยากเอา ข้อมูลอัปโหวต ของตัวเองไปทำเอ็มเบดดิงเพื่อวิเคราะห์รสนิยมเหมือนกัน
    • ถ้าเป็นขนาดหลังบีบอัดก็ถือว่า สมเหตุสมผล
  • ถ้าจุดประสงค์เดียวคือเอาคอมเมนต์ไปใช้ ฝึกโมเดลเชิงพาณิชย์ ก็รู้สึกขมขื่นนิดหน่อย
    สถานการณ์แบบนี้อาจส่งผลต่อความอยากมีส่วนร่วมของฉันในอนาคต

    • หลังการมาของ LLM ฉันก็อยากเขียนสิ่งที่เป็นประโยชน์บนอินเทอร์เน็ตน้อยลง
      เมื่อก่อนให้ความรู้สึกเหมือนกำลังช่วยคนแปลกหน้า แต่ตอนนี้เหมือนกำลังช่วยคนที่ฉันไม่ชอบ
    • แต่ฉันกลับรู้สึกสนุกกับความคิดที่ว่าคอมเมนต์เพี้ยน ๆ ของฉันจะทิ้ง ร่องรอยไว้ใน latent space ของ LLM
      ที่ไหนสักแห่งในโมเดลขนาดยักษ์แห่งอนาคต คำพูดของฉันอาจยังสั่นสะเทือนอยู่เล็กน้อย
    • บรรยากาศจริงจังกันเกินไป อยากบอกว่าเอ็นจอยกันหน่อย
  • อยากให้มี ฟีเจอร์ลบบัญชี/คอมเมนต์

    • คำพูดที่เราทิ้งไว้ถูกคัดลอกไปยังอุปกรณ์มากมายทั่วโลกแล้ว
      ในทางปฏิบัติมันกลายเป็น ข้อมูลถาวร และสักวันหนึ่งคอมเมนต์ของฉันอาจเหลืออยู่ราวกับภูมิปัญญาโบราณก็ได้
    • ชุดข้อมูล HN ถูกคัดลอกไปไว้หลายแห่งแล้ว ดังนั้นสิ่งที่เขียนที่นี่ควรถูกมองว่าเป็น เนื้อหาสาธารณะ
  • มีงานหนึ่งถูกลบออกจากรายการสิ่งที่ต้องทำแล้ว (เพราะโปรเจ็กต์นี้)

  • สมมติว่าเพื่อนถาม... ถ้าคอมเมนต์ที่นี่ นั่นหมายความว่ามันจะถูก แปลงเป็นเวกเตอร์ ใช่ไหม?