ดึงรายการหนังสือแนะนำจาก Hacker News ด้วย ChatGPT API
(blog.reyem.dev)- รวบรวมคอมเมนต์ที่กระจัดกระจายอยู่ในเธรดแนะนำหนังสือของ HN แล้วใช้ Chat Completions API ดึงชื่อหนังสือ ผู้เขียน และ URL เพื่อดูว่าหนังสือเล่มใดถูกแนะนำบ่อย
- อิงข้อมูลปี 2023 เลือกเรื่องราวบน HN ประมาณ 200 เรื่อง ที่มีคำว่า “book” เป็นคำแยกในชื่อเรื่องและไม่ใช่ลิงก์ภายนอก โดยมุ่งไปที่โพสต์ที่ดูเหมือนเป็นการแนะนำหนังสือ ค่าใช้จ่ายในการประมวลผล 57k คอมเมนต์ อยู่ที่ประมาณ $40 เมื่อใช้ gpt-3.5-turbo
- อันดับต้น ๆ ในผลรวมเป็นหนังสือที่ถูกพูดถึงซ้ำ ๆ บน HN มานาน เช่น Structure and Interpretation of Computer Programs 376 ครั้ง, Gödel, Escher, Bach 365 ครั้ง, How to Win Friends and Influence People 292 ครั้ง
- ในการประมวลผลจริง คุณภาพถูกสั่นคลอนจาก JSON ที่ผิดรูป, คอมเมนต์ที่พูดถึงแค่ผู้เขียน, หนังสือคนละเล่มที่ชื่อเดียวกัน, การเข้าใจผิดว่าข้อความลิงก์เป็น URL และ ความไม่กำหนดแน่นอน ที่ผลลัพธ์ยังเปลี่ยนได้แม้ตั้ง temperature เป็น 0
- เผยแพร่เอาต์พุตดิบจาก GPT และ CSV อินพุต พร้อมพยายามลดการตกหล่นจากชื่อที่ไม่ตรงกันด้วยการ normalize เช่น แปลงชื่อเป็นตัวพิมพ์เล็ก ลบ “the” ที่ขึ้นต้นชื่อ และตัดชื่อรองออก
วิธีดึงข้อมูลหนังสือจากคอมเมนต์ HN
- งานนี้เริ่มขึ้นจากจุดประสงค์ที่จะตรวจสอบว่าหนังสือเล่มใดถูกแนะนำหรือถูกกล่าวถึงบ่อยที่สุด ขณะอ่าน เธรดแนะนำหนังสือ บน HN
- อิงข้อมูลปี 2023 บน HN มีสตอรีเกือบ 200 เรื่อง ที่มีคำว่า “book” เป็นคำแยกในชื่อเรื่องและไม่ได้ลิงก์ไปยังหน้าอื่น
- จากข้อมูลที่ดึงผ่าน HN API ได้เลือก subset ที่ดูเหมือนเป็นเธรดแนะนำหนังสือ แล้วประมวลผลข้อความคอมเมนต์
- จากแต่ละคอมเมนต์ ใช้ Chat Completions API เพื่อดึงข้อมูลต่อไปนี้
- ชื่อหนังสือ
- ผู้เขียน
- URL
หนังสือที่ถูกกล่าวถึงมากที่สุด
- หนังสือที่ถูกกล่าวถึงมากที่สุดในรายการ 50 อันดับแรกมีดังนี้
- Structure and Interpretation of Computer Programs: Abelson and Sussman, 376 ครั้ง
- Gödel, Escher, Bach: Douglas Hofstadter, 365 ครั้ง
- How to Win Friends and Influence People: Dale Carnegie, 292 ครั้ง
- The C Programming Language: Brian Kernighan, Dennis Ritchie, 284 ครั้ง
- Dune: Frank Herbert, 261 ครั้ง
- อันดับต้น ๆ ไม่ได้มีเพียงหนังสือเทคนิค แต่รวมถึงนิยาย และหนังสือด้านปรัชญา จิตวิทยา ประวัติศาสตร์ และสตาร์ทอัพด้วย
- Thinking, Fast and Slow: 244 ครั้ง
- The Pragmatic Programmer: 203 ครั้ง
- Designing Data-Intensive Applications: 153 ครั้ง
- Clean Code: 106 ครั้ง
- The Elements of Computing Systems: 104 ครั้ง
ข้อผิดพลาดในการรวมผลและการทำความสะอาดข้อมูล
- รายการช่วงแรกมี ข้อผิดพลาดในการจับคู่ผู้เขียน อยู่บางส่วน
- ผู้เขียน Dune ไม่ใช่ Brian Herbert แต่เป็น Frank Herbert
- Meditations ไม่ใช่ของ Descartes แต่เป็นของ Marcus Aurelius
- Calculus ถูกจับเป็นหนังสือของ Michael Spivak แต่ในผลรวมนั้นยังรวมการกล่าวถึง Calculus ของ Apostol อีก 14 รายการด้วย
- SQL query ต้องเปลี่ยนจากการคืนค่า
min(author)ของแต่ละชื่อเรื่อง ไปเป็นการคืนค่า ผู้เขียนที่พบบ่อยที่สุด - ในอัปเดตวันที่ 12 ตุลาคม 2023 รายการ 50 อันดับแรกถูกแก้ไข
- Javascript และ Calculus ถูกมองว่าเป็นข้อผิดพลาด เพราะมีหนังสือหลายเล่มที่ใช้ชื่อเดียวกันปะปนกัน
- Javascript: The Good Parts ถูกเปลี่ยนชื่อเป็น “javascript” ในโค้ดประมวลผลข้อมูล แต่ก็มีหนังสืออื่นที่ชื่อเดียวกันอยู่ด้วย
- หลังลบรายการซ้ำ รายการเหล่านี้จึงหลุดออกจาก 50 อันดับแรก
ข้อจำกัดที่พบระหว่างใช้ ChatGPT API
- กรณีที่ไม่ได้คืนค่า JSON ที่ถูกต้อง มักเกิดเมื่อคอมเมนต์ HN สั้นมาก เช่น “thanks” หรืออยู่ในรูปคำถาม
- บางครั้งมีประโยคอย่าง “I apologize for the confusion…” หรือ “You’re welcome!” ปะปนมาในคำตอบด้วย
- prompt ถูกออกแบบให้สามารถทิ้งคำตอบที่ชื่อเรื่องว่างได้
- เป็นกลไกเพื่อลดปัญหาที่ ChatGPT รวมกรณีที่กล่าวถึงเฉพาะผู้เขียนโดยไม่มีชื่อหนังสือเฉพาะเข้าเป็นการกล่าวถึงหนังสือ
- ค่าใช้จ่ายในการประมวลผล 57k คอมเมนต์ อยู่ที่ประมาณ $40 เมื่อใช้ gpt-3.5-turbo API
- แม้ตั้ง temperature เป็น 0 ผลลัพธ์จาก GPT ก็ยังต่างกันในแต่ละครั้งที่เรียก
- มีกรณีความไม่กำหนดแน่นอนของ GPT-4 เป็นที่รู้จักอยู่แล้ว แต่ gpt-3.5-turbo ก็แสดงความผันผวนมากกว่าโมเดล GPT-3 รุ่นก่อนหน้า
- ลิงก์สามารถระบุได้จากข้อความ แต่ต้องลบแท็ก HTML แล้วเหลือไว้เฉพาะ URL
- ไม่เช่นนั้น GPT จะหยิบข้อความลิงก์ที่ถูกตัดขาดขึ้นมาแทน URL จริง
รูปแบบเอาต์พุต JSON และเงื่อนไขของ prompt
- ตัวอย่าง JSON ที่ ChatGPT สร้างให้คอมเมนต์ HN หนึ่งรายการมีรูปแบบถูกต้อง แต่ค่าทั้งหมดนอกจากลิงก์ผิดหมด
- เอาต์พุตเป็นรูปแบบ array ที่มีฟิลด์
match,title,author,link - ใน prompt มีเงื่อนไขต่อไปนี้
- ระบุชื่อหนังสือและผู้เขียนจากเอกสาร
- แสดงคำที่ใช้ match กับชื่อเรื่อง
- ขยายชื่อย่อของชื่อเรื่อง
- หากกล่าวถึงเฉพาะผู้เขียนและไม่มีหนังสือ ให้ปล่อย
titleว่าง - หากเป็นเพียงการขอคำแนะนำโดยไม่ได้กล่าวถึงหนังสือ ให้คืนค่า array ว่าง
- ไม่รวมชื่อรอง
ข้อมูลที่เผยแพร่และการ normalize ชื่อเรื่อง
- raw data produced by GPT คือข้อมูลดิบของเอาต์พุตจาก GPT ที่จัดเรียงตามชื่อเรื่อง
- คอลัมน์
matchมีบางส่วนของคอมเมนต์ที่มีการระบุหนังสือ
- คอลัมน์
- ชื่อหนังสือถูกนำไปผ่านการ normalize
- แปลงเป็นตัวพิมพ์เล็ก
- ลบ “the” ที่ขึ้นต้นชื่อเรื่อง
- ตัดชื่อรองออก
- การ normalize นี้เป็นขั้นตอนเพื่อลดกรณีที่รายการหลุดจาก query หนังสืออันดับต้น ๆ เพราะชื่อที่ GPT สร้างไม่ตรงกัน
- ข้อมูลอินพุตมีให้ในรูปแบบ zipped csv format และเมื่อแตกไฟล์แล้วจะได้ไฟล์ขนาด 24 MB
- URL ของ Amazon ในตารางมี Amazon affiliate link เพิ่มไว้เพื่อวัตถุประสงค์ด้านการเรียนรู้
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
ChatGPT พลาดไปบางรายการ และน่าจะมีมากกว่านั้น: https://hn.algolia.com/?q=A+non-standard+book+list+for+softw...
ในคอมเมนต์ก็ยังมีอีก: https://news.ycombinator.com/item?id=30651273
เว็บไซต์นี้ดูเหมือนเป็นวิธีอันชาญฉลาดในการสร้างคลิกจำนวนมากด้วย ลิงก์ Affiliate ของ Amazon
ผมรู้จัก Hacker Recommended Books [0a] บน HN ผ่าน [0b] แล้วเริ่มอ่านหนังสือในนั้น ลองไปหลายเล่ม และอ่านไปประมาณ 20 เล่ม ประสบการณ์ดีมาก ได้เรียนรู้อะไรใหม่ ๆ เยอะ และบางเล่มก็ช่วยเปิดมุมมองความคิดให้กว้างขึ้น
ถ้าคุณชอบหนังสือ ผมขอแนะนำอย่างยิ่งให้ลองค้นหาแบบง่าย ๆ ด้วยคำว่า books บน HN แล้วกรองด้วยแท็ก "Ask HN" [1] หรือกรองแค่คำว่า "books" ตอนนี้ผมเลือกหนังสือภาษาอังกฤษแทบทั้งหมดด้วยวิธีนี้ รวมถึงหนังสือที่ไม่ใช่สายเทคนิคด้วย ผมทำแบบนี้มานานกว่า 2 ปีแล้ว และชอบคำแนะนำหนังสือจาก HN มากจริง ๆ
เธรดบน HN เกี่ยวกับหนังสือมีของอ่านคุณภาพสูงสะสมอยู่หลายปี จนแทบจะเป็น ขุมทอง นอกจากนี้ยังมี Hacker News Books [2] และส่วน Top Books of All Time [3] ก็คุ้มค่าที่จะดู
[0a]: https://hacker-recommended-books.vercel.app/category/0/all-t...
[0b]: https://news.ycombinator.com/item?id=28595967
[1]: https://hn.algolia.com/?q=Ask+HN+books
[2]:https://hackernewsbooks.com
[3]: https://hackernewsbooks.com/top-books-on-hacker-news
เลยใช้ลูกเต๋า 15 หน้าเลือกหน้า แล้วทอยอีกครั้งเพื่อเลือกหนังสือในหน้านั้น หนังสือที่จะได้อ่านคือ The Very Hungry Caterpillar
ไม่ได้วิจารณ์ตัวเว็บนะ แค่เหมือนเป็นการทอดถอนใจกับตัวเองมากกว่า ที่เคยตั้งใจดีเก็บบริการแบบนี้ไว้แล้วก็ลืมไป
วิธีทำให้ สแปมลิงก์ Affiliate ของ Amazon ราคาถูกยิ่งห่างไกลจากคุณภาพ: สร้างมันด้วย “AI”
น่าแปลกใจที่ Code ของ Charles Petzold ไม่ติด 50 อันดับแรก มันเป็นหนึ่งในหนังสือที่เข้าถึงง่ายที่สุดสำหรับการเรียนรู้ว่าคอมพิวเตอร์ทำงานจริง ๆ อย่างไร
ผมเห็นมีการพูดถึง Code บน HN เยอะ แต่อาจเป็นเพราะกลุ่มตัวอย่างเอนเอียงไปทางลิงก์ที่ผมอ่านและมีคอมเมนต์อยู่ก็ได้
ตอนนี้กำลังอ่านอยู่ แต่ไฟดับก่อนจะอ่านได้เกิน 3–4 หน้า ทำให้ใช้เวลานานมาก
ครึ่งหลังพูดตรง ๆ ว่าหนักเอาเรื่อง ถึงแม้จะ “เข้าใจแล้ว” แต่ก็ไม่ได้ท่องจำครึ่งแรกไว้อย่างดี
ถึงอย่างนั้นก็ชอบแนวทาง สอนแบบอธิบายให้เด็ก 5 ขวบฟัง ทุกวันนี้คนเรามีแนวโน้มจะมองข้ามพื้นฐานแบบลวก ๆ โดยไม่เห็นว่ามันซับซ้อนเพียงพอในตัวเอง
เป็นเรื่องน่าแปลกที่หนังสือของ Knuth ไม่ติด 5 อันดับแรก และก็น่าประหลาดใจมากที่มี Meditations ของ Descartes อยู่ด้วย เพราะแม้แต่ในฝรั่งเศสตอนนี้ก็แทบไม่มีใครอ่านแล้ว น่าจะเป็นผลลัพธ์ที่ปนกับโพสต์เกี่ยวกับการทำสมาธิใน HN
อีกอย่าง Dune ไม่ได้เขียนโดย Franck Herbert แต่เขียนโดย Frank Herbert ผมเชื่อบทความนี้ได้ยาก และหลังจาก LLM แพร่หลายแล้ว สิ่งที่ขึ้นบนอินเทอร์เน็ตก็แทบจะเชื่ออะไรไม่ได้อีกต่อไป
ไม่ว่าสื่อจะเป็นอะไร หรือเป็นสิ่งพิมพ์แบบใด ความสมบูรณ์ของข้อมูลและวิธีการก็ควรถูกตรวจสอบเสมอ ความรับผิดชอบของผู้เขียนและผู้อ่านไม่ได้เปลี่ยนไปก่อนหรือหลัง LLM ถ้าก่อน LLM เคยเชื่อไปโดยปริยาย ก็ไม่ควรทำแบบนั้น และหลัง LLM หากไม่เชื่อผู้เขียนที่น่าเชื่อถือได้เลย นั่นก็เป็นปัญหาเช่นกัน
ผมมีอยู่หลายเล่ม แต่เป็นของขวัญ และไม่เคยอ่านเลย ดังนั้นจึงไม่ค่อยแปลกใจที่ไม่เห็นอยู่ใน 5 อันดับแรก
ไม่เข้าใจว่าทำไมต้องใช้ ChatGPT แค่ Algolia กับ การวิเคราะห์ข้อมูล ก็น่าจะพอแล้ว งานใหม่และยากตรงไหนในกรณีนี้?
เหตุผลที่คำแนะนำหนังสือใน HN มีประโยชน์จริง ๆ กลับตรงกันข้าม คือในคอมเมนต์ด้านล่าง ๆ ที่ไม่ได้รับตารางแนะนำ มีหนังสือที่ผมไม่เคยได้ยินมาก่อน และนั่นแหละที่มีคุณค่า รายการนี้ที่รวบรวมตัวเลือกยอดนิยม ส่วนใหญ่เดาได้อยู่แล้ว
ถ้าขุดเข้าไปในโพสต์ “ช่วยแนะนำหนังสือหน่อย” มักจะเจอคำแนะนำที่ยอดเยี่ยมจริง ๆ แถวใกล้ท้ายสุด
มีใครอีกไหมที่รู้สึกว่า ถ้าใครยก How to Win Friends and Influence People เป็นหนังสือที่ชอบที่สุดหรือเป็นหนึ่งในหนังสือที่มีอิทธิพลที่สุดต่อเขา นั่นเป็นสัญญาณอันตราย?
ถ้าคุณมีกลุ่มเพื่อนอยู่แล้วและไม่กังวลเรื่องการรักษาความสัมพันธ์นั้นไว้ คุณก็น่าจะรู้อยู่แล้วแทบทุกอย่างที่อยู่ในหนังสือ สำหรับผมที่โตมาแบบโดดเดี่ยวมาตลอด คำแนะนำในหนังสือเล่มนี้มีประโยชน์มาก มันเหมือนบทสรุปของ ทักษะทางสังคม ที่ควรได้เรียนตอนอายุ 10 ขวบ แต่ไม่ได้เรียน
“สัญญาณอันตราย” เพียงอย่างเดียวที่เห็นจากคนที่พูดถึงหนังสือเล่มนี้ คือมีความเป็นไปได้สูงว่าเขาเคยเข้าสังคมไม่เก่งมากในช่วงหนึ่งเหมือนผม อาจยังเป็นอยู่ก็ได้ แต่อย่างน้อยก็อยู่ระหว่างพยายามปรับปรุงตัว
คนส่วนใหญ่รอบตัวอาจไม่จำเป็นต้องใช้หนังสือเล่มนี้ และอาจรู้สึกว่ามันดูงี่เง่านิดหน่อยด้วยซ้ำ แต่สำหรับผมมันเป็นจุดเปลี่ยน และผมคิดว่าบน HN น่าจะมีหลายคนที่มีประสบการณ์คล้ายกัน
Meditations ในรายการ ถ้าดูข้อมูลดิบด้านล่างของหน้า ดูเหมือนจะหมายถึงงานของ Marcus Aurelius ไม่ใช่ “Meditations on First Philosophy” ของ Descartes
เป็นแค่การตรวจบางส่วน ไม่ใช่การสำรวจทั้งหมด ในข้อมูลดิบก็มีหลายกรณีที่กล่าวถึง Descartes แต่โดยมากเป็นเรื่องงานเขียนอื่น นับว่าเป็นข้อผิดพลาดที่น่าสนใจ
คำถามที่ดีขึ้นเรื่อย ๆ ที่ควรถามตัวเองในช่วงนี้คือ จะทำสิ่งนี้ได้อย่างไร โดยไม่ใช้ LLM โดยตรง และยิ่งไปกว่านั้น โดยไม่ใช้แมชชีนเลิร์นนิงเลย? จากนั้นค่อยเป็นขั้นที่สอง ถามต่อว่าเครื่องมือสร้างเนื้อหาหรือแมชชีนเลิร์นนิงที่อาจช่วยเสริม จะปรับปรุงวิธีแก้นั้นได้อย่างไร
ความจริงคือเทคโนโลยีน่าเบื่อดึงดูดความสนใจและการมีส่วนร่วมได้ยาก
การเรียนรู้วิธีนำเครื่องมือใหม่ไปใช้กับงานแบบเก่าก็มีประโยชน์และให้แง่คิดเช่นกัน