- ผู้เขียนทำโปรเจ็กต์วิเคราะห์โพสต์และคอมเมนต์ของ 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 ความคิดเห็น
ดูเหมือนว่าชื่อเรื่องจะหายไปนะ