BrainPad株式会社ブレインパッドのデータ活用に関する取り組みや製品・サービス開発の裏側、社員の日常などをご紹介します。今年の夏に実施した当社のインターンシップの取り組みをご紹介します。「画像とテキストを活用したレコメンド」をテーマに、さまざまなことに取り組んでいただきました!こんにちは、AI開発部の伊藤です。AI開発部では、今年の夏にインターンシップ生を1名受け入れました。私たちAI開発部は、インターンシップを企業と学生による創造的な活動の場にしたいと考えています。インターンシップを通して学生の皆さんが、アイデアを形にするプロセスの楽しさ・難しさを体験し、会社で働くことや社会的価値を生み出すことの意義を考える機会を提供したいと考えています。学生の皆さんの新しい発想やインターンシップでの成果から刺激をもらい、私たちも新しいサービスを開発するきっかけになるとも考えています。今回のインターンシップは、データサイエンティストだけでなく当社のエンジニアやサービス企画担当など、さまざまなスキルセットのメンバーも一緒に行いました。したコラボレーションができるのも、アナリティクスと自社サービス開発ともに推進するブレインパッドならではです。そのインターンシップの取り組みについて、現場の雰囲気も交えながら紹介します。この記事を通して、ブレインパッドで働くことの楽しさが少しでもお伝えできれば幸いです。今回のインターンシップのメインテーマは、「画像とテキストを活用したレコメンド」です。画像認識の技術を自社サービスとして実用化・商用化していくことを見据えて、このテーマを選びました。インターン生にとっても面白いテーマとなるよう、画像とテキストの両方を活用し、さまざまなアプローチが考えられるようなテーマを設定しています。近年の深層学習の進展には目覚しいものがあります。画像認識では、CNNが人間を超える識別精度を達成したり、言語解析ではRNNやLSTMの適用により機械翻訳の精度が著しく向上したり、強化学習では深層学習を取り込んだ「アルファ碁」がプロ棋士を打ち負かしたりと、日進月歩でどんどん進化しています。身近なところに目を向けてみると、最近では画像を活用したサービスが増えてきています。スマートフォンで撮ったコーディネート写真をファッションサイトにアップすると写真からファッションアイテムを検知して、類似アイテムを画像検索で抽出してくるといったサービスなどです。画像に加えて発話などのテキストを組み合わせたサービスも最近登場しています。今回のインターンシップで取り組んだのは、こうした画像を使ったサービスの開発です。画像だけを使ったサービスは、すでにいくつかの他社事例があるので、さらに一歩進んで画像だけでなく発話やテキストなどの自然言語処理も絡めたサービス開発をテーマとしました。具体的には、ブレインパッド自社開発のレコメンドエンジン搭載プライベートDMP「Rtoaster(アールトースター」に、画像データを利用した新たなレコメンドサービスを組み込んでいくことをゴールとしました。ここで簡単に、Rtoasterについてご紹介します。RtoasterはプライベートDMPとして2年連続でシェアNo.1(※)を獲得するなど、デジタルマーケティングの領域を中心に250社を超える企業様にご活用いただいているブレインパッドの主力製品です。Rtoasterの特徴は、ブレインパッドが独自開発した高精度なレコメンドエンジンを搭載していることです。2006年のサービス提供以来、テクノロジーや市場のトレンドに合わせて進化させてきました。よるSNS解析、深層学習による画像解析など、さまざまなプロジェクトで培ったデータ活用の豊富な経験とノウハウがあります。した実績を自社プロダクトに還元し、進化を図っているのです。これができるのも、最先端のデータ活用プロジェクトを請け負うだけでなく、自社プロダクトも展開しているブレインパッドの醍醐味といえるでしょう。今回のインターンシップは、私が所属するAI開発部と、Rtoasterを提供するマーケティングプラットフォーム本部(MP本部)のメンバーが協力して進めました。今回のインターンシップは、8月29日から9月26日までの約1ヶ月間にわたって実施しました。山腰さんは、深層学習の言語解析への応用について研究をされていますが、今回普段の研究では扱っていない画像解析が学べるのと、専門の言語解析が活かせるということで応募いただきました。日頃から研究現場でも深層学習モデルの実装を行っておりプログラミングも得意です。ブレインパッドは東京都港区の白金台にあります。今回はインターン期間が1ヶ月間あるので、インターン期間中は都内に滞在していただきました。山腰さんの座席は、分からないことなどを気軽に質問したり、議論したりできるよう、当社のデータサイエンティストと同じ並びに設けました。私は、山腰さんの相談係りに任命され、課題設定から問題解決まで一緒に考えたり、ブレストの場を設けたりしました。インターン期間中は、毎朝10時半から朝会を実施。朝会には、山腰さんと私の他、深層学習に詳しいエンジニア兼AI開発部長の太田も参加して進めました。GPUインスタンスを立てて、dockerコンテナ上に必要なソフトウェアをインストールして作業することにしました。Notebookでpythonを動かしながら進めました。ブレインパッドオフィスの様子インターン初日は、具体的なサービス案を考えることから始めました。公募に掲げたテーマ「画像とテキストによるレコメンド」では、漠然とし過ぎていて具体的なサービスに落とし込めません。私からは、既存の他社サービスなども交えながら、実現したいサービスのイメージを山腰さんに伝えて、自由な雰囲気の中でメンバーとブレストしながらサービスイメージを膨らませました。最終的には、ファッション系ECサイトにおいて、ユーザーと運営者の双方を対象とした、画像とテキストによるレコメンドサービスを目指すことになりました。具体的には、山腰さんから以下の3案を提案していただきました。※以下の図は、山腰さんによる資料から抜粋したものです。画像とテキストによる要望から商品をレコメンドするシステムユーザの購入履歴の性質から商品をレコメンドするシステム注目度が高いと期待される画像のキャプションを生成するシステム案1:画像とテキストによる要望から商品をレコメンドするシステム案2:ユーザの購入履歴の性質から商品をレコメンドするシステム案3:注目度の高いと期待される画像のキャプションを生成するシステムこれらのアイデアをもとに、AI開発部とMP本部のメンバーを交えて議論を行いました。3案とも着手するには期間的に難しく、2番目の案は購入した商品の情報が画像によらなくとも既知であるため、画像を利用するメリットが少ないと考えて見送ることにしました。1番目と3番目の案については、ともに画像特徴量とテキスト特徴量を同じ空間に埋め込む機能が前提となるため、この2つの案を今回の課題とすることに決めました。整理すると、以下のようになります。注目されそうな画像を選んで紹介文を生成さらに、これら2案を実現する上で必要な機能を整理した結果、以下の3つの機能にまとまりました。機能3:画像注目度の予測計算器1番目の機能は、画像の特徴量とテキストの特徴量を同じ空間に埋め込む(エンコードする)機能です*1。することで、テキストで記述された画像的特徴(服の色、デザイン、カテゴリなど)をベクトル演算により画像特徴量に足したり引いたりすることができます。2番目の機能は、テキストと共通の空間にエンコードされた画像特徴量からテキストを生成する(デコードする)機能です。言語間の機械翻訳でよく知られているseq2seq*2は、テキスト間の変換ですが、機能1のエンコーダにより画像をテキストと共通の空間に埋め込んでしまえば、画像からテキストへの変換もseq2seqと同様に可能となります*3。3番目の機能は、画像の特徴量からその注目度を予測するモデルにより実現できます。具体的には、画像サムネイルのクリック率を注目度とし、これを画像特徴量により回帰して予測モデルを学習します。して課題を明確化して実現すべき機能に落とし込むまでに、インターンシップの最初の1週間を費やしました。サービス実現に必要な3機能を実現するために以下の作業を進める必要があります。今回のインターンシップは、期間が1ヶ月と短いので、精度の追求よりはアイデアの実現可能性を示すことに重点を置きました。そのため、モデルのブラッシュアップはスコープから外しました。前章では、サービスを企画してサービス実現に必要な機能に落としこむまでを詳細に説明しました。して機能要件がまとまった時点で残された期間は3週間でした。それからは、朝会の3人で役割分担して進めました。データの取得は太田が担当し、私はデータテーブルの作成・集計を担当、山腰さんはモデルの設計・実装・テストを進めました。3機能の設計に当たっては山腰さん主導で、私や太田と議論しながら進めました。商品画像や商品説明文のデータはRtoasterの導入先サイトから取得し、注目度の元になる画像サムネイルのクリック数はRtoasterのレコメンドログから取得しました。Kerasを用いました。時間的な制約でボトルネックとなるのが、画像と説明文を読み込ませてエンコーダを学習する部分です。学習時間の短縮のため、今回は、説明文のテキストをそれが含む単語のword2vec*5の重みつき平均で近似する工夫を行いました*6。重み係数には、単語のTFIDF値を採用しています。word2vecは、日本語Wikipediaをコーパスとして学習したもの*7を利用しました。ここで、ちょっと余談になりますが、オフィスでの過ごし方を紹介します。明治学院大学にも歩いていける距離にあります。オフィスではパソコンの画面に向かう時間が長かったのですが、お昼休みには若手のデータサイエンティストやエンジニアと一緒に食事に行きました。AI開発部の若手には、大学院で言語解析や情報工学を専攻していたメンバーもいるので、専門分野の研究や会社での働き方などの話で盛り上がりました。ブレインパッドの周辺地図さて、本題に戻ると、第2週目は、機能の設計や簡単な実装によるテスト、データセットの作成を行い、第3週目の水曜日に中間報告会を設けて、AI開発部やRtoaster担当メンバーを交えてサービス形態や機能に関する議論を行いました。その結果、特に大きな設計上の変更もなく本番実装に進むことに決まりました。その後は、実質1週間あまりで実装を行い、最終報告会にこぎつけた次第です。時間が少ない中、山腰さんはものすごいスピードと集中力でプログラムを書き上げていきました。後で本人から聞いたのですが、オフィスでは集中して課題に取り組んでいた山腰さんでしたが、休日には横浜などにも遊びに行っていたそうです。仕事ができる人は、遊びにも精力的なんだと改めて実感しました。最終報告会では、若手のデータサイエンティストやMP本部の開発メンバーにも参加いただき、活発な意見交換ができました。年齢の近いインターンの発表は、当社若手社員にとっても刺激になったようです。インターンシップの成果紹介この章では、インターンシップの成果についてポイントをダイジェストで紹介します。以下、山腰さんによる最終報告会の資料を引用しながら説明します。レコメンドシステムの全体像まず、システム全体の設計について以下の図にしたがって説明します。図の左側からは入力データとして画像とテキストが入ってきます。テキストの内容は、システムの提供する3つの機能(図の右側)に応じて異なってきます。設計上の重要な点は、3つの機能は異なっていても、画像とテキストの入力をエンコーダとして共通化できるという点です。以下の節では、実際に行った実装について3つの機能ごとに詳しく説明します。画像とテキストのエンコーダ画像検索を機能として提供する場合、画像はコーディネート写真であり、テキストはコーディネート写真に対する付加的な情報(色、デザインなどの変更や追加)を表す発話や文章になります。具体的には、画像を150×150のサイズにリスケールして、RGBのカラーチャンネルごとのピクセル値に変換します。この情報を画像識別において定評のあるVGG16という学習済みの畳み込みネットワークに通して、8,192次元の特徴ベクトルに変換します。テキストの方は、それを構成する各単語のword2vecベクトルを単語の重要度を表すTFIDF値で重み付けして平均します。今回は、日本語Wikipediaから学習された200次元のword2vecベクトルを使用しました。画像とテキストを共通のベクトル空間に埋め込むには、8,192次元の画像特徴ベクトルに変換行列Wをかけてword2vecと同じ200次元の空間に射影します。このように射影したベクトルと画像の内容を表すテキストの200次元ベクトルとのユークリッド平方距離を計算し、これが最小になるように変換行列Wを学習します(下図を参照)。画像キャプションを生成する場合には、画像はサイト内の商品画像であり、テキストは商品画像の説明文となります。商品画像とその説明文のペアを入力と正解としてニューラルネットワークを学習することで、画像の入力だけから画像を表現するキャプションを生成できるようになります。具体的には、前節で学習したエンコーダを用いて画像ベクトルを200次元ベクトルに埋め込みます。このエンコードベクトルをLSTMを再帰的に結合したネットワーク(デコーダ)に入力します(下図を参照)。