2 ポイント 投稿者 GN⁺ 2023-10-05 | 1件のコメント | WhatsAppで共有
  • 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

最も多く言及された本

集計ミスとデータ整形

  • 初期の一覧には一部 著者マッチングの誤り があった
    • 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件のコメント

 
GN⁺ 2023-10-05
Hacker News の意見
  • ChatGPT はいくつか取りこぼしていて、たぶんもっと多いはず: https://hn.algolia.com/?q=A+non-standard+book+list+for+softw...
    コメントにもさらにある: https://news.ycombinator.com/item?id=30651273
    このウェブサイトは、Amazon アソシエイトリンクでクリックを大量に生むための巧妙な方法のように見える

    • いまだに Amazon アソシエイト・プログラムで稼いでいる人なんているの? 10年くらい前にもう終わったものだと思っていた
  • 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

    • 今日、HN が推薦した本を読み始めることにした。[0a] のリンクで直近6か月を選ぶと、推薦が58ページ、1ページ15冊だった
      そこで15面ダイスでページを選び、もう一度振ってそのページの本を選んだ。読むことになった本は The Very Hungry Caterpillar
    • https://news.ycombinator.com/item?id=28595967("Show HN: 40k HN comments mentioning books, extracted using deep learning")は素晴らしく、今でも定期的に使っている
    • “Hacker Recommended Books” がすごく便利そうに見えたので pinboard アカウントにブックマークとして保存しようとしたら、“2年前にすでに保存済み” と出た
      サイトへの批判ではなく、こういうサービスがあることを善意で保存しておきながら忘れてしまう自分への嘆きに近い
  • 安っぽい Amazon アソシエイトリンクスパムを品質からさらに遠ざける方法: “AI” で生成すればいい

  • Charles Petzold の Code が上位50位に入っていないのは驚きだ。コンピュータが実際にどう動くのかを学ぶうえで、最も取っつきやすい本の一つだ
    HN で Code への言及はたくさん見たが、自分が読んだコメント付きリンクのほうに標本が偏っていたのかもしれない

    • 寝つきが悪い人には夢のような本だ。コンピュータ動作の基礎という興味深いテーマを、ここまで生気なく退屈にできることも、そのためにこれほど多くの言葉が必要なことも知らなかった
      今読んでいるところだが、3〜4ページ以上進む前に明かりが消えてしまうので、ものすごく時間がかかっている
    • あの本には「馬の残りを描き足してください」に似た面がある。素晴らしい本ではあるが、後半では著者が、読者は前半を理解しただけでなく構成要素まで暗記していると仮定していて、残りの説明が作業記憶に収まって初めて意味をなすようになっている
      後半は正直きつかった。「理解はした」としても、前半をきちんと暗記していなかったからだ
      それでも、5歳児に説明するように教えるアプローチは気に入っている。最近は、人々が基礎を本質的に十分複雑なものと見ず、ざっくり飛ばそうとする傾向がある
    • あの本は本当に好きだ。全体がどう動くのか、その理論を知りたがっている非技術者に薦める本だ
    • 私のサイト HNLikes.com では、HN コメントで2番目によく投稿された Amazon リンクがこの本だ
    • 上で rito が参照していた Hacker News All Time Top Books のリストの最上位にある
  • Knuth の本が上位5位に入っていないのも驚きだし、Descartes の Meditations が入っているのも非常に驚き。フランスでも今では誰も読まない本なので、HN の瞑想関連の投稿と混ざった結果なのではないかと思う
    それに Dune は Franck Herbert ではなく Frank Herbert が書いたもの。この投稿は信じがたいし、LLM が普及してからは、インターネットに上がるものは事実上何も信じにくくなった

    • この投稿は GPT が提供した元データを添えており、データの完全性を検証できるようにしている。方法論の観点では、だから信頼できる
      媒体が何であれ、どんな出版物であれ、データと方法の完全性は常に検証すべきだった。著者と読者の責任は LLM の前後で変わっていない。LLM 以前に当然のように信じていたなら、そうすべきではなかったし、LLM 以後に信頼できる著者を信じられないなら、それも問題だ
    • Descartes の Meditations on First Philosophy は西洋思想史で最も重要な本の一つ。「フランスでも今では誰も読まない」というのは、ロンドン地下鉄で読んでいる人を見かけないから The Origin of Species は無関係だと言うのと似ている
    • Knuth の著作は、都市計画分野における The Power Broker のように、業界ごとの正典ではあるが、実際に読んだ人は少ない本に近い
      何冊か持ってはいるが、もらい物で、読んだことはない。だから上位5位に見当たらないのはあまり驚かない
    • Meditations の著者名が間違っている。リンクは正しい本に飛ぶが、それは Marcus Aurelius の Meditations だ
    • Descartes と表記されているのは間違いのようだ。リンクは Marcus Aurelius に飛ぶ
  • ChatGPT がなぜ必要なのか分からない。Algolia とデータ分析だけで十分だったはずで、ここで新しく難しかった作業は何だったのか?

    • 各本を推薦したユーザーがどんな傾向なのかをコメントベースで分析したら、かなり面白そう。例えば「Ayn Rand を推薦した人の80%は右派傾向」のような比率を示す感じ
  • HN の本推薦が有用な理由は、むしろ逆だ。下のほうにある推薦票をもらっていないコメントに、自分が初めて聞く本の推薦があり、そこに価値がある。人気の選択肢を集めたこのリストは、ほとんど予想できる
    「本を推薦してほしい」という投稿を掘っていくと、一番下の近くで本当に素晴らしい推薦が見つかる

    • 音楽も同じ。好きなバンドについて人々が話している場所に行って、聞いたことのない名前が見えるまで下へスクロールすればいい
  • 誰かが How to Win Friends and Influence People を最も好きな本、あるいは最も大きな影響を受けた本の一つに挙げると、危険信号だと感じる人は他にもいる?

    • そうは思わない。実際にその本を読んだことがない人から、そういう反応をよく見る。人々はこの本が操作術のような内容だと思っているが、実際には友人を作り、維持するためのごく基本的な手引きだ
      すでに友人グループがあり、それを維持することに不安がないなら、本にある内容はほぼすべて知っている可能性が高い。ずっと孤独に育った身としては、この本の助言は本当に役に立った。10歳のときに学ぶべきだったのに学べなかった社会的スキルの要約のような本だった
      この本に言及する人から見える唯一の「危険信号」は、私のように過去のある時点で社会的にかなり不器用だった可能性が高い、という程度だ。今もそうかもしれないが、少なくとも改善しようとしているところだ
    • 社会不安、自閉スペクトラム、あるいはその両方が混ざった人には影響が大きい。この本は人と会話する方法を教えてくれ、強い社会不安と孤立から、他の人間と話し、知り合える人生へと方向転換させてくれた
      周囲のほとんどの人にはこの本は必要ないだろうし、もしかすると少しばかばかしく感じるかもしれない。でも自分にとっては転機であり、HN にも似た経験をした人が多いのではないかと思う
    • いや。人間の行動に関するしっかりした読み物だ
  • リストの Meditations は、ページ下部の元データを見ると、Descartes の “Meditations on First Philosophy” ではなく Marcus Aurelius の著作を指しているようだ
    単に部分的に確認しただけで、全数調査ではない。元データで Descartes に言及しているケースも多いが、たいていは別の著作についてだ。興味深いミスだと思う

  • 最近、自分に問いかける価値がますます高まっている良い質問はこれだ。これを LLM を直接使わずに、さらには機械学習なしでも、どう実現できるか? その次の第2段階として、生成ツールや機械学習の潜在的な補助が、その解法をどう改善できるかを問えばよい

    • 退屈な技術(Postgres, Django, Python)でこういうバージョンを作った。HN コメントに本のリンクだけでなく YouTube 動画、arXiv 論文などが何回投稿されたかを数える方式で、リンクを投稿した人やそのリンクについた返信についてもいろいろ計算した
      現実には、退屈な技術では関心と参加を得にくいということだ
    • LLM で行う基本作業のかなり多くは、機械学習なしでも可能だと思う。それでも興味深いのは、LLM で面白いことをする方法を学ぶことであり、従来の方法より上限がはるかに高い点だ
      古いタイプの作業に新しいツールを適用する方法を学ぶことも、有用で示唆に富んでいる