ChatGPT APIでHacker Newsの書籍推薦リストを抽出する
(blog.reyem.dev)- HNの書籍推薦スレッドに散らばったコメントを集め、どの本が頻繁に推薦されているかを Chat Completions API でタイトル・著者・URLとして抽出
- 2023年時点で、タイトルに独立した単語として “book” を含み、外部リンクではない約 200件のHNストーリー のうち、書籍推薦と見られる投稿を対象にし、5.7万件のコメント を処理するコストは gpt-3.5-turbo ベースで約 $40 だった
- 集計上位には Structure and Interpretation of Computer Programs 376回、Gödel, Escher, Bach 365回、How to Win Friends and Influence People 292回のように、HNで長く繰り返し言及されてきた本が並ぶ
- 実際の処理では、不正なJSON、著者だけに言及したコメント、同名の別の本、リンクテキストの誤認識、temperature 0でも変化する 非決定性 が品質を揺らがせた
- GPTの生出力と入力CSVを公開し、タイトルの小文字化・先頭の “the” の除去・副題の除去といった 正規化 によって、名前の不一致による取りこぼしを減らそうとしている
HNコメントから書籍情報を取り出す方法
- HNの 書籍推薦スレッド を読んでいて、最も頻繁に推薦または言及される本を確認したいという目的で始まった作業
- 2023年時点のHNには、タイトルに独立した単語として “book” を含み、他のページへリンクしていないストーリーがほぼ 200件 あった
- HN APIから取得したデータのうち、書籍推薦スレッドと思われる部分集合を選び、コメントテキストを処理
- 各コメントから 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 の本として扱われていたが、その集計には Apostol の Calculus への言及14件も含まれていた
- SQLクエリは各タイトルの
min(author)ではなく、最も頻出する著者 を返すように変更する必要があった - 2023年10月12日の更新で上位50の一覧が修正された
- Javascript と Calculus は同名の複数の本が混在しており、誤りと判断された
- Javascript: The Good Parts はデータ処理コードで “javascript” に名前が変わっていたが、同名の別の本も存在した
- 重複除去後、これらの項目は上位50から外れた
ChatGPT APIの利用中に明らかになった限界
- 有効な JSON が返らないケースは、HNコメントが “thanks” のように短い場合や、質問形式の場合に多かった
- 応答に “I apologize for the confusion…” や “You’re welcome!” のような文が混ざることもあった
- プロンプトは、タイトルが空の応答を捨てられるよう設計されていた
- 著者だけが言及され、特定の書名がない場合までChatGPTが書籍言及として含めてしまう問題を減らすための仕組み
- 5.7万件のコメント を処理するコストは gpt-3.5-turbo API ベースで約 $40 だった
- temperature を 0 に設定しても、GPTの結果は呼び出しごとに変わった
- GPT-4の非決定性の事例は知られているが、gpt-3.5-turboも以前のGPT-3系モデルより大きなばらつきを示した
- リンクはテキストから識別できたが、HTMLタグを取り除いてURLだけを残す必要があった
- そうしないとGPTが実際のURLではなく、途中で切れたリンクテキストを拾ってしまった
JSON出力形式とプロンプト条件
- あるHNコメントに対してChatGPTが生成したJSONの例は、形式こそ合っていたが、リンク以外の値はすべて誤っていた
- 出力は
match,title,author,linkフィールドを持つ配列形式 - プロンプトには次の条件が含まれていた
- 文書から書名と著者を識別する
- タイトルに一致した語を表示する
- 略称のタイトルは展開する
- 著者だけが言及され書籍がない場合は
titleを空にする - 推薦を求めているだけで本に言及していなければ空配列を返す
- 副題は含めない
公開データとタイトルの正規化
- raw data produced by GPT は、タイトル順に並べられたGPT出力の生データ
matchカラムには、書籍が識別されたコメントの一部が含まれる
- 書名には 正規化 処理を適用
- 小文字化
- タイトル先頭の “the” の除去
- 副題の除去
- この正規化は、GPTが生成した名前の不一致によって上位書籍のクエリから項目が漏れるのを減らすための処理
- 入力データは zipped csv format で提供され、展開すると 24 MB のファイルになる
- 表のAmazon URLには学習目的の 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
このウェブサイトは、Amazon アソシエイトリンクでクリックを大量に生むための巧妙な方法のように見える
HN で Hacker Recommended Books [0a] を [0b] で知り、そこにある本を読み始めて、何冊も試し、20冊ほど読んだ。体験はとてもよく、新しく学んだことも多く、いくつかの本は思考の幅を広げてくれた
本が好きなら、HN で単に books と検索し、"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 だ
サイトへの批判ではなく、こういうサービスがあることを善意で保存しておきながら忘れてしまう自分への嘆きに近い
安っぽい Amazon アソシエイトリンクスパムを品質からさらに遠ざける方法: “AI” で生成すればいい
Charles Petzold の Code が上位50位に入っていないのは驚きだ。コンピュータが実際にどう動くのかを学ぶうえで、最も取っつきやすい本の一つだ
HN で Code への言及はたくさん見たが、自分が読んだコメント付きリンクのほうに標本が偏っていたのかもしれない
今読んでいるところだが、3〜4ページ以上進む前に明かりが消えてしまうので、ものすごく時間がかかっている
後半は正直きつかった。「理解はした」としても、前半をきちんと暗記していなかったからだ
それでも、5歳児に説明するように教えるアプローチは気に入っている。最近は、人々が基礎を本質的に十分複雑なものと見ず、ざっくり飛ばそうとする傾向がある
Knuth の本が上位5位に入っていないのも驚きだし、Descartes の Meditations が入っているのも非常に驚き。フランスでも今では誰も読まない本なので、HN の瞑想関連の投稿と混ざった結果なのではないかと思う
それに Dune は Franck Herbert ではなく Frank Herbert が書いたもの。この投稿は信じがたいし、LLM が普及してからは、インターネットに上がるものは事実上何も信じにくくなった
媒体が何であれ、どんな出版物であれ、データと方法の完全性は常に検証すべきだった。著者と読者の責任は LLM の前後で変わっていない。LLM 以前に当然のように信じていたなら、そうすべきではなかったし、LLM 以後に信頼できる著者を信じられないなら、それも問題だ
何冊か持ってはいるが、もらい物で、読んだことはない。だから上位5位に見当たらないのはあまり驚かない
ChatGPT がなぜ必要なのか分からない。Algolia とデータ分析だけで十分だったはずで、ここで新しく難しかった作業は何だったのか?
HN の本推薦が有用な理由は、むしろ逆だ。下のほうにある推薦票をもらっていないコメントに、自分が初めて聞く本の推薦があり、そこに価値がある。人気の選択肢を集めたこのリストは、ほとんど予想できる
「本を推薦してほしい」という投稿を掘っていくと、一番下の近くで本当に素晴らしい推薦が見つかる
誰かが How to Win Friends and Influence People を最も好きな本、あるいは最も大きな影響を受けた本の一つに挙げると、危険信号だと感じる人は他にもいる?
すでに友人グループがあり、それを維持することに不安がないなら、本にある内容はほぼすべて知っている可能性が高い。ずっと孤独に育った身としては、この本の助言は本当に役に立った。10歳のときに学ぶべきだったのに学べなかった社会的スキルの要約のような本だった
この本に言及する人から見える唯一の「危険信号」は、私のように過去のある時点で社会的にかなり不器用だった可能性が高い、という程度だ。今もそうかもしれないが、少なくとも改善しようとしているところだ
周囲のほとんどの人にはこの本は必要ないだろうし、もしかすると少しばかばかしく感じるかもしれない。でも自分にとっては転機であり、HN にも似た経験をした人が多いのではないかと思う
リストの Meditations は、ページ下部の元データを見ると、Descartes の “Meditations on First Philosophy” ではなく Marcus Aurelius の著作を指しているようだ
単に部分的に確認しただけで、全数調査ではない。元データで Descartes に言及しているケースも多いが、たいていは別の著作についてだ。興味深いミスだと思う
最近、自分に問いかける価値がますます高まっている良い質問はこれだ。これを LLM を直接使わずに、さらには機械学習なしでも、どう実現できるか? その次の第2段階として、生成ツールや機械学習の潜在的な補助が、その解法をどう改善できるかを問えばよい
現実には、退屈な技術では関心と参加を得にくいということだ
古いタイプの作業に新しいツールを適用する方法を学ぶことも、有用で示唆に富んでいる