レコメンド

参謀本部の自社開発レコメンドエンジン「スレッジ・ハンマー」

参謀本部では、ユーザー行動履歴と形態素解析の掛け合わせによるハイブリッドレコメンドエンジン「スレッジ・ハンマー」を自社開発しております。既に大手ニュースサイトにも導入され、関連記事のクリック率向上(0.7%から1.4%と約2倍向上)に寄与しています。ここではスレッジ・ハンマーの技術仕様に関してご説明いたします。

バックエンドの集計モジュール

  • 1-1.レコメンド分類器生成モジュール(機械学習) クリック履歴あり
  • 1-2.レコメンド分類器生成モジュール(機械学習) クリック履歴無し(初回訪問時用)
  • 1-3.国別カテゴリ分類器生成モジュール(機械学習)
  • 1-4.データ掃除モジュール
  • 1-5.記事マスターデータ送信モジュール
  • 1-6.記事マスターデータ取り込みモジュール
  • 1-7.カテゴリマスター管理モジュール(追加、更新、削除等 Scafold)
  • 1-8.記事マスターをカテゴリに分類するモジュール
  • 1-9.レコメンド分類器生成用データ前処理モジュール
  • 1-10.記事国別カテゴリ分類器生成用データ前処理モジュール
  • 1-11.ジャンル別カテゴリ分類器生成モジュール(機械学習)
  • 1-12.記事ジャンル別カテゴリ分類器生成用データ前処理モジュール

画面・フロントエンドの集計モジュール

  • 2-1.クリック履歴追跡ユニークID取得モジュール
  • 2-2.カテゴリ一覧取得モジュール
  • 2-3.レコメンド記事取得モジュール
  • 2-4.クリック履歴記録モジュール
  • 2-5.クリック履歴追跡ユニークID生成モジュール
  • 2-6.カテゴリ内記事取得モジュール
  • 2-7.レコメンド記事表示モジュール
  • 2-8.カテゴリ一覧表示モジュール

レコメンドエンジンのモジュール

  • 3-1.レコメンド記事生成モジュール1(リアルタイム) クリック履歴あり
  • 3-2.レコメンド記事生成モジュール2(リアルタイム) クリック履歴無し(初回訪問時)
  • 3-3.クリック履歴保存モジュール

ウェブサーバー

  • 軽量なNginxを使用します
  • Reverse Proxy で連携します
  • Nginx から Reverse Proxy を活用しての負荷分散を可能にします
    • 初期は nginx:jetty は 1:1 の構成
    • 場合によって nginx:jetty を 1:n の構成にして URL パターン等で負荷分散します

アプリケーションサーバー

  • Jetty 9 を採用

キャッシュ

  • Hibernate+EHcacheベースの Level 2 Cache を使用
  • EHcache ベースの独自のキャッシュを活用

データベースアクセス

  • JPA2 を Hibernate ライブラリを活用して動かします
  • Hibernate を活用することで PreparedStatement のキャッシュ、 Level 2 Cache 等を効率的に実装可能です
  • Connection Pooling に HikariCP という高速なコネクションプールの実装を使用します

Restfulウェブサービス

  • Jerseyを使用します。
  • RestfulAPIとして必要な機能が備わっているため採用しております。
  • CORS、CSRF等のフィルタで各種セキュリティ対応いたします。

カテゴリ自動分類

カテゴリ自動分類の機械学習では、JubatusのClassifyを使っております。アルゴリズムはAROWです。

Jubatusでの機械学習では「学習するカテゴリの要素数にばらつきがある場合、推定結果が要素の多いものに偏ってしまう」という現象があります。

例えば、性別のようなカテゴリですと、通常は男性50%女性50%で、偏りがありません。ですので、性別不明のデータを適当に推定すると50%ですが、男性100人、女性100人のデータを学習することによって、一般的には精度が70-90%になります。

しかし、Aが10%、Bが90%、といった偏りのある分類ですと、学習して推定すると、すべてBという結果を得ることがあります。すべてBだと、90%正解で、高い精度なのですが、実用として使えません。

Jubatusのままでは上記の問題が起きるので、弊社独自で分類の偏りを補正する処理を入れています。

ハイブリッドレコメンデーションの重みづけについて

以下三種類のアルゴリズムを自由に重みづけてレコメンデーション結果を取得することができます。

  • 1.クリック履歴に基づいたユーザーの類似度からのレコメンデーション
  • 2.クリック履歴に基づいた記事の類似度からのレコメンデーション
  • 3.記事自体の類似度(日本語の比較)によるレコメンデーション

重みづけの方法は以下二種類を指定することができます。

  • 1.順位によるスコアリング(1位を50ptとし、2位49pt、3位48pt、以下同様 とする):特定のアルゴリズムを優先させたい時や、アルゴリズムによらず上位を優先させたい時に有効
  • 2.推薦度のスコアによるスコアリング(内部的な類似度のスコアをスコアリングにそのまま使用する):計算結果としての類似度を優先させたい時に有効

レコメンデーションAPIのパラメーターに対して詳細なパラメーターを指定することができます。

PAGE TOP ↑