noteは機械学習をどう活用している?MLチームの開発指針と取り組みまとめ 【2022年版】
本記事ではnoteのMLチームの取り組みについて、機能と概要をそれぞれ紹介します。
紹介する機能はnote全体の一部ではありますが、MLチームの全体像を掴むことができます。
▼この記事でわかること▼
MLチームが取り組んでいる内容が全体的に理解できる
note内でどのように機械学習が利用されているのかがわかる
MLチームの全体的なアーキテクチャと開発指針を知ることができる
前提
noteの取り組みを説明する前に、まずはMLチームの開発とアーキテクチャについて簡単に説明していきます。
現状の開発について
開発の規模 / 現在のアーキテクチャなどの影響もあり、「バックエンドエンジニア」と「MLエンジニア」の開発の垣根が薄い
MLエンジニアは機械学習以外にも、バックエンド開発やアーキテクチャのリプレイスなど、多様な開発能力が求められる
アーキテクチャ図
アーキテクチャを決定する上での方針
技術スタックをできるだけ薄くする
全員がやりたい理想を詰め込むとアーキテクチャは重くなる
可能な限りシンプルな構成を目指す
「言語はPythonのみ」「可能な限りAmazon SageMakerに載せて開発する」など
開発の方針
noteが目指す「だれもが創作をはじめ、続けられるようにする」に紐付かない開発は行わない
noteというサービスを使いやすくするための機械学習開発を行う
必ずしも機械学習で解決しない
データを調べるだけでわかることや解決できることは多々ある
明確にルールがある事象(スパムメールなど)は機械学習で判断して解決する
機械学習の活用事例
では、ここからnoteで機械学習がどのように活用されているのか、機能概要と処理概要をそれぞれ紹介していきます。
トップページに表示される「あなたへのおすすめ」
機能概要
トップページで「あなたへのおすすめ」を表示
ユーザーの記事閲覧データを元に作成した推薦モデルから提示
処理概要
記事推薦モデルの作成
ユーザーの記事の閲覧などのデータと推薦対象のユーザリストのデータを取得
SageMaker Trainingでデータの変換とモデルの学習
SageMaker BatchTransformで時間ごとの推薦対象ユーザの推薦記事リストを計算
記事のカテゴリ分類
機能概要
記事をカテゴリごとに自動で分類
音楽、ビジネス、マンガ、ゲームなど
処理概要
記事タイトルと本文からカテゴリを推論
推論はSageMaker Endpointで行う
データベースには以下を格納してWeb側で利用する
推論した記事のカテゴリ
推論したカテゴリらしさのスコア
単語数や文字数などの記事の情報
あなたにおすすめのクリエイター
機能概要
ホームタイムライン(トップページ)で、「あなたにおすすめのクリエイター」を表示
記事の閲覧ログなどを用いて、推薦モデルを学習しユーザに提示
処理概要
記事推薦モデルの構築
記事閲覧などのデータと推薦対象のユーザリストのデータを取得
SageMaker Trainingでデータの変換とモデルの学習を行う
モデルの学習と推論対象のユーザリストの生成は1日に1回実行
フォロー後に表示されるおすすめクリエイター
機能概要
クリエイターページでフォローボタンを押したあとに、「おすすめクリエイター」を表示
記事の閲覧ログなどを用いて、クリエイターのembeddingを学習してユーザを提示
処理概要
学習プロセス
ユーザの閲覧履歴からクリエイターの系列データを取得
予測対象のクリエイターを推論プロセスのために生成
SageMaker Trainingでクリエイターの系列データからクリエイターembeddingモデルを学習
推論プロセス
SageMaker BatchTransformでS3の予測対象クリエイターリストの類似クリエイターリストを生成
記事下におすすめ記事を表示
機能概要
記事下に関連記事として「こちらもおすすめ」を表示
ログインしている場合
ユーザーの記事閲覧データを元に作成した推薦モデルから提示
ログインしていない場合
現在表示されている記事に近しい内容の記事をレコメンド
処理概要
ログインしている場合
記事推薦モデルの作成
ユーザーの記事の閲覧などのデータと推薦対象のユーザリストのデータを取得
SageMaker Trainingでデータの変換とモデルの学習
SageMaker BatchTransformで時間ごとの推薦対象ユーザの推薦記事リストを計算
ログインしていない場合
記事のembeddingを取得して、記事推薦モデルを学習
類似記事indexを作成
類似記事リストをAPIで提供
画像のカテゴリ分類
機能概要
投稿された画像のカテゴリ分類を行う
処理概要
SageMaker Processingで推論対象の画像をコピーする
重い画像の場合は特定の処理を行う
画像に対してSageMaker BatchTransformを使用し、カテゴリを推論する
今日の注目記事の推薦
機能概要
noteでは運営事務局が今日の注目記事を手動で選定している
人間の目視だけでは限界があるため、候補を機械学習で推薦
人力では見つけにくい記事などを機械学習で抽出して候補を提供
注目記事は最終的には人力で選定
記事を見つける方法がいくつかあり、機械学習はその手法のうちの一つ
処理概要
直近の記事などの傾向から、学習データや予測対象データを生成
候補抽出モデルを学習し生成
事前学習 / 中間データの生成
コーパスを用いた事前学習を用意し、モデル生成する際の性能を向上させています。
GloVe学習
単語分散表現の教師なし学習手法
現在、noteではベータ版として試験中
fasttext学習
分散表現を学習するためのライブラリ
FacebookのAIリサーチラボによって開発
コーパストークナイザー
コーパスをトークナイズして必要な品詞のみの単語列に変換する
fasttextやGloVeを学習するために日本語のコーパスが必要
コーパス生成
fasttextやGloVeを学習するために日本語のコーパスが必要
Wikipediaやnoteで投稿された文章などをコーパスとして使用
レコメンドの仕組みをさらに詳しく知りたい方
MLチームの取り組みについて、概要を紹介しました。レコメンドのさらに詳しい仕組みについては、上記の記事やマガジンをご覧ください。
また、10月14日〜15日に開催されるPyConJPでnoteはブース出展をします。当日はMLエンジニアもブースにいるので、ぜひ遊びに来てください。
MLチーム募集中
機械学習エンジニア(MLエンジニア) / note株式会社
テクニカルプロダクトマネージャー - 機械学習 / note株式会社
サーバーサイドエンジニア(機械学習/MLOps)
noteでは機械学習にさらなる力を入れるため、MLチームのエンジニア / PdMを募集しています。
今回の記事の中で質問してみたいことがある方は、PyConJPのブースに来ていただくか、カジュアル面談へお気軽にご応募ください。
▼さらにnoteの技術記事を読みたい方はこちら