翻訳者注: この記事では、著者と 3 人の友人がプログラミング マラソンに参加し、Hacker News に投稿された記事を分類する分類器を開発した様子を紹介しています。その後、著者はコンテスト中の体験談をいくつか共有しています。以下はその翻訳です。 今週末、私と 3 人の友人 (Chris Riederer、Nathan Gould、そして私の双子の兄弟 Dan) は、2017 TechCrunch Disrupt Hackathon に参加しました。 私たちはこれまで何度かこのようなハッカソンに参加したことがあり、短期間で実用的なアプリケーションを開発しながら同時に新しいテクノロジーを学ぶという挑戦が大好きです。 私たち 4 人のうち 3 人はデータ サイエンティストなので、データ駆動型のプロジェクトを探す必要があることはわかっていました。最高のハッカソン プロジェクトは、分析やライブラリではなく、実際に使用できるアプリケーションであることが多いため、機械学習駆動型の製品を構築する必要があると考え、テキストに基づいて各投稿にトピックを自動的に割り当てる、プログラマー コミュニティである Hacker News の分類器を思いつきました。 このプロジェクトでは、データをダウンロードし、機械にデータを学習させるトレーニングを行い、24 時間以内に使用可能な Web サイトに変換する必要がありました。 ここでは、開発プロセス中に学んだ教訓をいくつか紹介します。 (私が取り組んでいるモジュールはデータ側なので、データ側に焦点を当てていますが、Nathan と Dan はサイトの開発と設計、そして Hacker News との同期に多くの作業を行いました。) Hacker Newsの投稿と記事を取得する Hacker News は、一般的にプログラマー コミュニティにとって興味深い、ユーザーが投稿およびアップロードした記事 (プログラミングに関する記事だけではありません) を収集します。私たちの仕事は、各記事のテキストを取得し、それがどのトピックに属するかに分類することです。 新しい記事のトピックを正しく識別するには、大量のトレーニング データ (おそらく数万件の記事) が必要であることがすぐに明らかになりました。これを実行するには、Hacker News に送信されたすべての記事とそれに対応するリンクをクロールし、各記事をクエリしてテキスト コンテンツを取得する必要があります。 ここで私が犯した間違いは、Hacker News API に依存して一度に 1 つの送信のみをダウンロードしたため、25,000 個のリンクを取得するのに数時間かかり、処理が遅くなったことです。ハッカソンの後、Google BigQuery で Hacker News データセットが利用できることを知りました。約 20 分の設定で、100 万のリンクをダウンロードできました。競争のプレッシャーの下では、常にこのような単純な解決策を探すのは困難です。代わりに、最終結果を達成するために非効率的な解決策を採用することもあります(しかし、これも楽しみの一部です)。 記事へのリンクができたら、各記事のテキスト コンテンツが必要になります。記事はさまざまなサイトから取得され、フォーマットも異なるため、これは少し難しいですが、python-goose はこの目的のために設計されています。 3 台のコンピューターを記事のクロール専用にすることで、1 時間あたり数千の記事を収集できるようになりました。スクレイピング コードといくつかの結果は、この GitHub リポジトリで確認できます。 通常、このようなプロジェクトでは、スクレイピング ジョブを一晩中実行したままにしておきます。しかし、私たちにとってはそれは選択肢ではありませんでした。データのダウンロードが始まると、私たちは 2 つのグループに分かれ、Nathan と Dan が Web サイトの構築に取り組み、Chris と私はデータを収集する機械学習アルゴリズムの開発に取り組みました。 教師ありトレーニングセットの開発 教師あり分類器をトレーニングするには、ラベル セットが必要です。記事の正しい分類が何であるかを知ることができる必要があります。例に手動でラベルを付けるには時間が足りませんでした。では、正しくラベル付けされた例のセットを取得するにはどうすればよいでしょうか? そうですね、Hacker News を数ページ閲覧すると、タイトルだけでトピックが何であるかがほぼわかる記事もあれば、簡単なパターン マッチングでわかる記事もあることがわかります。たとえば、ホームページを見てください。「Why Amazon is eating the world」は Amazon について、「Why do many math books have so much detail and so little enlightenment?」は数学について、「Don't tell people to turn off Windows Update」は Microsoft/Windows についてです。そこで、正規表現を使用して記事タイトルに基づいたトレーニング セットを作成することにしました。 このプロセスには、記事のタイトルに共通する単語やクラスターの探索的分析を含むいくつかの実験が含まれていました。私のお気に入りのグラフの 1 つは、テキストから作成されたネットワークです (弊社の書籍「Text Mining with R」のこの章を参照)。これは、データをより深く理解するための素晴らしい機会です。 私たちは、「機械学習/ディープラーニング」を含む ML クラスターや、「ネット/中立性」や「トランプ/FBI」などのさまざまな政治クラスターなど、語彙のクラスターに気づきました。これにより、利用可能なトピックに集中できるようになります。 以下は、モデルのトレーニングに使用した正規表現です。結果が正しく分類されているかどうかを確認し、クリーニング エラーの原因となっている正規表現を削除し、見逃していたものを追加するなど、多くの反復と調整が必要でした。 R の fuzzyjoin を使用すると、これらのタイトルを簡単に一致させることができます。このリポジトリには、コードといくつかの分析プログラム、および機械学習の作業が掲載されています。 最終的に、約 10,000 件のラベル付きドキュメントのトレーニング セットが作成されます (すべてのタイトルがいずれかの正規表現に一致するわけではなく、複数のタイトルに一致する場合もあることに注意してください)。各正規表現は次のものに一致します: (当初は「Web 開発」や「Javascript」などのトピックもいくつかありましたが、分類結果に基づいて最終的に削除しました)。ただし、これはサイト上で最も人気のあるトピックというわけではありません。これは、各トピックに対して決定した正規表現に完全に基づいています。一部のトピックが他のトピックよりも認識されやすい場合、またはこれらの正規表現に見落としがある場合、記事は反映されません。 タイトルに正規表現を使用するのは、例を取得する方法としては非常に粗雑であり、完全に正確ではありません (たとえば、「ウィンドウのサイズ変更」に関するタイトルには、Microsoft というラベルが付けられます)。ただし、これは大規模なトレーニング セットを迅速かつ効果的に構築する方法であり、結果を手動で検査することで正確性に自信が持てます。 これらの見出しでアルゴリズムをトレーニングすると、タイトルにこれらの特徴がまったく含まれていない記事を識別できるようになりました。たとえば、「Rejection Letter」というタイトルでは件名が言及されていないため、トレーニング セットには含まれていませんが、タイトルには「セキュリティ」、「ランサムウェア」、「ウイルス対策」、「ワーム」など、トレーニング セットに頻繁に出現する単語が含まれているため、アルゴリズムは簡単に「セキュリティ」とラベル付けできます。 MLモデルのトレーニングと実用化 R でデータを調査した後、Python の scikit-learn パッケージを使用して機械学習を有効にしました。これには 3 つの手順が必要です。
トピック モデリングについては以前にも書きました (これは、私たちの著書「Text Mining with R」で大きな役割を果たしています)。ここでは、結論を導き出すためではなく、数万の特徴(「この記事には「Bitcoin」という単語が含まれていますが、「」は含まれていません)を 100 次元のデータセットに削減するために使用します。いくつかの実験を通じて、このトピック モデリング ステップを追加すると (単語を直接特徴として使用するのではなく)、モデルの精度が向上することがわかりました。 また、トレーニング セットでの交差検証された AUC (ROC 曲線の下の領域) に関して、ランダム フォレストが正規化ロジスティック回帰よりも優れていることもわかりました。 これは、これらのモデルを取り巻く一般的な評判と一致しています。ロジスティック回帰はトレーニングが速く、解釈可能性も高かったのですが、特徴の相互作用が多い状況の処理にはそれほど適していませんでした。たとえば、「勉強」という単語が「大学」や「教育」という単語とは異なる意味を持つことに気付かないでしょう。 もちろん、このトレーニング セットの「精度」は、「記事のタイトルが、私たちが想定している正規表現と一致するかどうかを予測できるかどうか」を意味しますが、これが新しい記事の実際の予測に反映されることを期待しています。 生産モデル Chris と私がこのモデルを構築している間、Nathan と Dan はすでに Django を使用して Web サイトを開発し、Heroku にデプロイし、ドメインを登録していました。これは 10 分ごとに Hacker News API と同期されますが、プレースホルダーとして完全にランダムなトピックが割り当てられます。午前 2 時頃、クリスと私はトレーニング済みのモデルを準備し、力を合わせる時間になりました。 理論的には、Python でアルゴリズムや Web サイトを構築するのは、サイトの関数に直接プラグインするだけで済むため、簡単なはずです。私はチームと協力して R を CI に変換し、モデルを本番環境に導入することに慣れているので、pickle を使用してモデルをシリアル化し、アプリケーションに直接ロードする機能は確かに便利であり、実装したモデルの使用方法に柔軟性をもたらします。 しかし、それは展開がスムーズだったということではありません。私たちが遭遇した 2 つの最大の問題は次のとおりです。 nltk Heroku を使用します。最初は、Python での自然言語処理のための最も強力なツールキットである nltk ライブラリをトークン化に使用します。しかし、これは大きくて扱いにくいライブラリであり、Heroku でのインストールと使用に関してわかりにくいエラー メッセージが表示されるようになりました。最終的には、利便性のために gensim のトークナイザー (トピック モデリングにすでに必要) に切り替えることになり、アルゴリズムの再トレーニングが必要になりました。 Python 2 と 3 の間の Pickle: このモデルを Python 3 にインストールすることは可能ですが、記事のテキストをクエリするために使用される Goose は Python 3 と互換性がなく、実稼働サイトは Python 2 でなければなりません。ここで、Python 2 と 3 の間でバグが発生します。その時は午前 4 時で、修正には非常に洗練されていないハッキングが必要でした。 当初、機械学習プロセスをマイクロサービス (Web サイトを通じてテキスト コンテンツを渡し、分類を返す別のサービス) として実装することを検討しました。これにより、機械学習アルゴリズムの切り替えがはるかに容易になります (Web チームにコードとパッケージ要件のリストの代わりに API エンドポイントが提供されます)。 コミュニケーションと共有 また、taggernews.com にライブ Web サイトがあります。それ以来サイトは変更されていますが、午前 4 時 30 分にプロジェクトを提出したときは次のような感じでした。 Tagger NewsはHacker Newsの記事を自動的に分類して並べ替えることができます #HackDisrupt pic.twitter.com/2mEbrGXIce — TechCrunch (@TechCrunch) 2017年5月14日 講演後、TechCrunch が私たちにインタビューし、私たちのプロジェクトについて記事を書いてくれました。これは私たちにとって、こうしたハッカソンでの初めての経験でした。ハッカソン後、私はこの投稿の残りを書き終え、TechCrunch の記事を Hacker News に投稿することにしました。コミュニティの皆さんがそれを見て、気に入ってくれたことを嬉しく思います。 製品検索も得意としております。 Google Analytics によると、昨日 Tagger News の訪問者数は約 6,000 人で、その数は増え続けています。また、アプリがトラフィックの増加にどのように対処するかについても不安がありました。アプリが完成したのは午前 4 時 30 分で、テストする時間が十分にありませんでした。しかし、デザインに関するいくつかのコメントと、誤って分類された記事を除けば、フィードバックは非常に好意的でした。このサイトには新しい記事が絶えず追加されており、ほとんどのコンテンツは正しく分類されています。これは概念実証ですが、興味深い分類問題を試し、アプローチを実践できる機能的なものです。 |
<<: 固有値分解から共分散行列へ: PCA アルゴリズムの詳細な分析と実装
>>: SLAMアルゴリズム分析:ビジュアルSLAMの難しさを把握し、技術開発の全体的な傾向を理解する
今は特に人工知能が普及していますが、将来はロボットの時代になることは絶対にありません。なぜなら、機械...
リアルタイムで実行され、単一の NVIDIA RTX 2080 TI GPU を使用して HD 60...
ChatGPT は WeChat や DingTalk のようなフル機能のアプリになるのでしょうか?...
中国のAI研究者の数は過去10年間で10倍に増加したが、そのほとんどは海外、主に米国に居住している。...
昨年末の ChatGPT の登場により、生成 AI の流行が巻き起こり、現在ではほぼすべての主要ソフ...
AI、つまり人工知能の新たな波が到来します。機械学習、ディープラーニング、ニューラルネットワーク、音...
ショートビデオの推奨やソーシャル推奨などのアプリケーションシナリオでは、推奨システムは大量の急速に変...