こんにちは。エンジニアの池田(@progrhyme)です。
昨年11月に私がエムスリーにjoinして、早2ヶ月が経ちました。現在は、主に電子カルテ事業やAI関連事業のサーバーサイドを担当しています。
本日は、私がAPIシステムの構築に携わった、機械学習を利用したニュース記事の推薦システムについて紹介します。
目次:
「Archimedes」とは
このシステムは、社内で「Archimedes」というコードネームで呼ばれています。
以降、本記事でもこのシステムをArchimedesと記します。
Archimedesはm3.comやメールマガジンを送信するシステムのバックエンドで動作し、ユーザにおすすめのニュース記事を出力します。
APIを提供しており、ユーザ単位でおすすめ記事のリストをレスポンスとして返却することが可能です。
学習・推薦アルゴリズムについて
Archimedesでは以下のような流れで、機械学習を行ってユーザへのおすすめ記事を算出します。
- 一定期間(=Tとする)におけるニュース記事データについて、トピックモデルに基づき学習を行い、各記事のトピックを計算
- 同T期間におけるユーザのニュース記事アクセスログから、ユーザのトピックに対する嗜好を計算する。
- ユーザのトピック嗜好ベクトルと、記事の持つトピックベクトルの相関が強いほど、おすすめスコアがUPする。
- 上で算出したスコアと、直近の記事アクセスランキングを掛け合わせて、各ユーザに対するおすすめ記事を算出する。
ここで、トピックモデルとは、テキスト中に出現する単語の頻度などに着目して、文書の話題(=トピック)を推定する自然言語処理の手法のことです。*1
Archimedesでは、上のフローのように機械的に算出した結果だけでなく、編集部が手動で設定したニュース記事を必ずリストに含めるような仕組みも設けています。
システム構成
ArchimedesのAPIは、AWS ECS上でDockerコンテナとして稼働しています。
ちょうど、1/10(水)に開催されたエムスリーTech Talkで、Archimedesのシステム構成について発表しました。
そのときのスライドを公開しておりますので、本記事と併せてご覧いただければ幸いです。
以下、スライドと重複する内容もありますが、システム構成について簡単に紹介します。
システム概要
Archimedesシステムの概要は上図のようになります。
※図では、ログ送信などのバックグラウンドのシステムや、VPC・AZ構成など細部は省略しています。
主なコンポーネントはAPIを提供するフロントエンドのECSクラスタと、機械学習を行っておすすめ記事のリストを作る学習用ECSクラスタの2つです。
APIの開発言語はScalaで、Play Frameworkを使っています。
一方、機械学習関連のECSタスクはPython 3で開発しています。
また、おすすめ記事データを格納するデータベースとしては、MySQL互換のAmazon Auroraを利用しています。
Infrastructure as Codeの実践
Archimedesのインフラは(ほぼ)全てコードとして管理しています。*2
利用している主なツールは、以下の3つです:
- Packer … AMI管理
- Ansible … PackerのProvisionerとして利用。一部ではアドホックにAnsibleを実行し、マシンのシステム構成を管理
- Terraform … AWS上のインフラ・トポロジーを管理
Ansibleは、エムスリーの他の多くのチームでも利用されています。
PackerやTerraformについては、私は初心者だったのですが、公式ドキュメントを始めWeb上の情報リソースが豊富にあったこと、前任者が残していったレシピがあったことから、比較的すぐにキャッチアップできたと思います。
Immutable Infrastructureの実践
上述のようなシステム構成とツールを採用することで、Immutableなインフラを作ることができました。
つまり、アプリケーションやAMIに変更があったとき、容易に既存のサーバリソース(〜ECSクラスタ)を破棄して作り直すことで、更新することが可能です。
インフラ管理に加えて上記のような変更の反映もTerraformで完結させることができ、運用コストも抑えることができたと思います。
今後について
Archimedes APIを使ったニュース記事推薦の仕組みは、まだ一部ユーザに向けて動き出したばかりですが、今後エムスリーグループで提供する他のサービスへの展開も検討されています。
システム的には概ね安定しているのですが、優先度の高いタスクとしてパフォーマンス改善に取り組んでいく予定です。
終わりに
エムスリーでは、機械学習エンジニアの他、機械学習基盤を支えるインフラエンジニアや機械学習システムのAPI化を行うソフトウェアエンジニアを積極的に募集しています。
ご興味がありましたら、是非エムスリー・エンジニア採用ページからご応募ください!
*1:参考: トピックモデル (機械学習プロフェッショナルシリーズ) | 岩田 具治 |本 | 通販 | Amazon, トピックモデルによる統計的潜在意味解析 (自然言語処理シリーズ) | 佐藤一誠, 奥村学 |本 | 通販 | Amazon
*2:コード化できていないインフラ作業としては、SSL証明書発行や、EC2 Key Pairの作成などが挙げられますが、いずれも環境ごとに1回ぐらいしか作業しないようなものです。