2 คะแนน โดย GN⁺ 2024-05-10 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • ผู้เขียนทำโปรเจ็กต์วิเคราะห์โพสต์และคอมเมนต์ของ Hacker News มากกว่า 40 ล้านรายการโดยใช้ text embedding
  • เป้าหมายหลักของโปรเจ็กต์คือการสร้างความสามารถด้านการค้นหา การแนะนำ และการวิเคราะห์ที่ดีขึ้น
  • เพื่อทำเช่นนั้น จึงรวบรวมข้อมูลผ่าน Hacker News API และเก็บบริบทเพิ่มเติมด้วยการ crawl หน้าเว็บ
  • จากข้อมูลที่รวบรวมมา ได้สร้าง text embedding และแมปลงสู่พื้นที่ 2 มิติด้วย UMAP
  • จากข้อมูลที่ถูกแมปแล้ว ได้สร้างแผนที่เชิงโต้ตอบ "Hacker News Universe"
  • นอกจากนี้ยังใช้ embedding เพื่อสร้างฟีเจอร์ต่าง ๆ เช่น semantic search, คอมมูนิตี้เสมือนอัตโนมัติ, การวิเคราะห์ความนิยม/อารมณ์
  • สำหรับการประมวลผลข้อมูลขนาดใหญ่ มีการใช้ GPU cluster และติดตั้ง edge server เพื่อปรับปรุงประสบการณ์ผู้ใช้

การรวบรวมข้อมูล Hacker News

  • รวบรวมข้อมูลโพสต์และคอมเมนต์มากกว่า 40 ล้านรายการผ่าน Hacker News API
  • เนื่องจาก API ตอบสนองช้า จึงสร้างบริการบน Node.js สำหรับการประมวลผลแบบขนาน
  • คะแนนของโพสต์จะไม่ลดต่ำกว่า -1 และไม่สามารถตรวจสอบคะแนนคอมเมนต์ผ่าน API ได้
  • โพสต์และคอมเมนต์บางส่วนมีทั้งชื่อเรื่องและเนื้อหาว่างเปล่า (คาดว่าน่าจะถูกผู้ดูแลแก้ไข)
  • บางครั้ง ID ของคอมเมนต์มีค่าน้อยกว่าคอมเมนต์แม่ของมัน (คาดว่าผู้ดูแลได้ย้ายตำแหน่งใน tree ของคอมเมนต์)

การสร้าง text embedding

  • การใช้แค่ชื่อเรื่องไม่เพียงพอสำหรับการแทนความหมายของโพสต์เชิง semantic จึง crawl หน้าเว็บเพื่อเก็บบริบทเพิ่มเติม
  • การสร้าง text embedding ต้องใช้ GPU ประสิทธิภาพสูง และการประมวลผลอินพุต 40 ล้านรายการอาจใช้เวลาเกือบ 1 ปี
  • ใช้ RunPod เพื่อจัดตั้ง GPU cluster ในต้นทุนต่ำ และพัฒนา db-rpc กับ queued เพื่อเพิ่มประสิทธิภาพการประมวลผลแบบกระจาย
  • ใช้ GPU 150 ตัวเพื่อสร้าง embedding ของข้อความ 40 ล้านรายการได้ภายในเวลาเพียงไม่กี่ชั่วโมง

เก็บบริบทเพิ่มเติมด้วยการ crawl หน้าเว็บ

  • เนื่องจากคุณภาพ embedding จากชื่อโพสต์เพียงอย่างเดียวไม่ดีพอ จึง crawl เว็บเพจที่ลิงก์ไว้เพื่อเก็บบริบทเพิ่มเติม
  • สร้าง crawler ด้วย Rust และได้ประสิทธิภาพเร็วกว่าเวอร์ชัน Node.js 10 เท่า
  • ลิงก์จำนวนมากใช้งานไม่ได้แล้ว (link rot) จึงกู้คืนด้วย API ของ Internet Archive
  • สุดท้ายแล้ว มีหน้าเว็บจากทั้งหมด 4 ล้านหน้าที่ดึงมาไม่ได้ไม่ถึง 5%

การสร้าง text embedding ที่ดีขึ้น

  • เปลี่ยนไปใช้โมเดล jina-embeddings-v2-small-en เพื่อใช้ทั้งหน้าเว็บเป็นอินพุต
  • สำหรับโพสต์ที่มีบริบทไม่เพียงพอ จะเติมด้วยคอมเมนต์ระดับบน
  • สำหรับคอมเมนต์ จะสร้างอินพุตโดยรวมคอมเมนต์บรรพบุรุษเข้าไปด้วยเพื่อคำนึงถึงโครงสร้างแบบลำดับชั้น

การลดมิติด้วย UMAP

  • ใช้ UMAP เพื่อลดมิติ embedding 1024 มิติลงสู่พื้นที่ 2 มิติ
  • สำหรับการลดมิติ จำเป็นต้องมีกราฟ PyNNDescent และ embedding ต้นฉบับ
  • การประมวลผลอินพุตระดับล้านรายการในมิติสูงใช้เวลาประมาณ 1 ชั่วโมงครึ่งบน CPU 96 คอร์
  • ผลลัพธ์ของการลดมิติทำให้เห็นภาพการกระจายของความสนใจและความนิยม

cosine similarity

  • การคำนวณความคล้ายระหว่าง embedding มักใช้ cosine distance
  • cosine distance แสดงความต่างของมุมระหว่างเวกเตอร์ และต่างจาก Euclidean distance ตรงที่ไม่ขึ้นกับขนาดของเวกเตอร์
  • สิ่งนี้เหมาะกับการคำนวณความคล้ายของข้อความ เพราะแม้จะเป็นการถกเถียงที่ยาวและเข้มข้น หากหัวข้อใกล้กันก็ควรถูกแมปให้อยู่ใกล้กัน
  • การคำนวณ cosine similarity สามารถทำได้อย่างง่ายดายด้วยการคูณเมทริกซ์

การสร้างแผนที่ Hacker News Universe

  • สร้างแผนที่ Hacker News แบบเชิงโต้ตอบคล้าย Google Map โดยอิงจาก embedding
  • รองรับฟีเจอร์เช่นการปรับจำนวนจุดที่มองเห็นตามการซูม, การติดป้ายกำกับบางจุด, และการแสดงรายละเอียดเมื่อคลิก
  • เนื่องจากการส่งจุดหลายล้านจุดไปยังเบราว์เซอร์พร้อมกันทำได้ยาก จึงใช้ tiling และ LOD เพื่อโหลดแบบค่อยเป็นค่อยไป
  • จำกัดให้แต่ละ tile มีจุดได้สูงสุด 1500 จุดและรักษาขนาดให้ต่ำกว่า 20KB พร้อมคำนึงถึงความหนาแน่นตามพื้นที่เพื่อรักษาความหลากหลาย
  • เว็บแอปสร้างด้วย Canvas และ WebWorker และระบบแผนที่ก็ออกแบบให้ทำงานคล้าย Google Map

เพิ่มเอฟเฟกต์ภาพ

  • เพิ่ม landmark, เส้นขอบ และภูมิประเทศแบบแผนที่จริงเพื่อเพิ่มความสมจริงและการรับรู้ทิศทาง
  • วาดเส้นชั้นความเข้มตามความหนาแน่นของจุดเพื่อแสดงบริเวณที่ได้รับความสนใจมากบน HN
  • ใช้ Gaussian blur เพื่อสร้างเส้นชั้นความเข้มที่นุ่มนวล และแปลงเป็น SVG เพื่อแสดงผลเป็นภาพเวกเตอร์ที่ไม่แตก
  • เพิ่ม "เมือง" ที่แทนหัวข้อสำคัญเพื่อช่วยนำทางไปยังพื้นที่เฉพาะ

ทดสอบฟังก์ชันค้นหา

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

การสร้างคอมมูนิตี้เสมือนอัตโนมัติ

  • สามารถสร้างคอมมูนิตี้เสมือนจากคีย์เวิร์ดเพื่อดูชุดโพสต์ที่ตรงกับความสนใจได้ทันที
  • ไม่เพียงดูโพสต์เท่านั้น แต่ยังดูคอมเมนต์ที่มีการถกเถียงอย่างคึกคักเกี่ยวกับความสนใจนั้น ๆ ได้ด้วย
  • ยังสามารถระบุผู้ใช้ที่มีอิทธิพลและเคลื่อนไหวอย่างกระตือรือร้นในหัวข้อเฉพาะได้
  • การใช้ post-filtering แทน pre-filtering สามารถลดต้นทุนการคำนวณได้มาก

การวิเคราะห์ข้อมูลขนาดใหญ่

  • ใช้โมเดลวิเคราะห์อารมณ์แบบโอเพนซอร์สเพื่อจัดประเภทอารมณ์เชิงบวก/ลบของคอมเมนต์ 30 ล้านรายการ
  • เมื่อนำอารมณ์ของหัวข้อมาวิเคราะห์เป็นอนุกรมเวลา จะสามารถสังเกตการเปลี่ยนแปลงตามเหตุการณ์สำคัญได้
  • ยังสามารถเปรียบเทียบความนิยมระหว่างหัวข้อต่าง ๆ ได้ด้วยการใช้ความคล้ายและคะแนน
  • เพื่อเพิ่มความเร็วในการคำนวณคิวรี มีการใช้การคำนวณเมทริกซ์ด้วย GPU และเพิ่มความเร็วในการประมวลผลอย่างมาก

แผนในอนาคต

  • รองรับการอัปเดตข้อมูลแบบเรียลไทม์
  • พัฒนาระบบแนะนำบนพื้นฐาน deep learning
  • ปรับปรุงคุณภาพการค้นหาด้วยโมเดล reranking
  • เสริมการวิเคราะห์ผู้ใช้ (ความคล้าย ความเชี่ยวชาญ ฯลฯ)
  • ค้นหาไอเดียปรับปรุงเพิ่มเติมผ่านการรับฟังความคิดเห็นจากคอมมูนิตี้

ความเห็นของ GN⁺

  • โปรเจ็กต์นี้เป็นตัวอย่างที่แสดงให้เห็นกระบวนการรวบรวม ทำความสะอาด และวิเคราะห์ข้อมูลขนาดใหญ่ได้อย่างมีประสิทธิภาพ โดยเฉพาะเทคนิคการปรับประสิทธิภาพอย่างการประมวลผลแบบขนานและการใช้ GPU ที่น่าประทับใจ
  • แผนที่ Hacker News ที่แสดงภาพความคล้ายระหว่างโพสต์ด้วยการผสาน text embedding กับ UMAP เป็นผลงานที่สร้างสรรค์และน่าสนใจมาก น่าจะช่วยให้ผู้ใช้สำรวจหัวข้อที่สนใจและค้นพบข้อมูลใหม่ ๆ ได้อย่างมาก
  • ฟังก์ชัน semantic search และการสร้างคอมมูนิตี้อัตโนมัติเป็นแนวคิดที่พลิกประสบการณ์การใช้งาน Hacker News ไปอีกระดับ หวังว่าเทคโนโลยีการค้นหาที่เข้าใจบริบทและเจตนามากกว่าการจับคู่คีย์เวิร์ดแบบตรงตัวจะถูกใช้อย่างแพร่หลายมากขึ้นในหมู่ผู้ใช้ทั่วไป
  • ประเด็นสำคัญน่าจะอยู่ที่การสร้าง pipeline ประมวลผลข้อมูลขนาดใหญ่แบบเรียลไทม์ จำเป็นต้องพิจารณาแนวทางแก้คอขวดด้านประสิทธิภาพอย่าง edge computing และ in-memory DB อย่างรอบคอบ
  • เนื่องจากข้อมูลของ HN มีความน่าเชื่อถือสูง ผลลัพธ์จากการวิเคราะห์อารมณ์ก็ดูน่าจะมีคุณค่านำไปใช้ได้มาก อย่างไรก็ตามควรระวังอคติของอัลกอริทึม และอาจพิจารณาการฝึกโมเดลเฉพาะโดเมนด้วย

1 ความคิดเห็น

 
ggg213 2024-05-10

ดูเหมือนว่าชื่อเรื่องจะหายไปนะ