この服装に合う靴を選んでコーディネートを完成させたいと思います。皆さんはどの靴を選びますか?
データサイエンティストの中村です。今回、このようなタスクを解くためのシステムを開発しました。本記事ではシステムと裏側の要素技術について紹介したいと思います。
概要
ファッションにおいて、コーディネートは何より大事な要素です。安物の服でもコーディネートが整っていればおしゃれに着ることができますし、逆にハイブランドで固めたとしてもダサく見えてしまうことは充分に考えられます。
コーディネートはアイテムの組み合わせであり、コーディネートをよく見せるには一定の規則1に基づく組み合わせの選択が重要です。ところが、この規則は複雑で敷居が高いので、組み合わせに関する表現を直接データから獲得してしまおうというのが今回のトライの内容です。
本記事で紹介するシステムは、コーディネートを学習することで以下のようなタスクを解くことが可能になります。
- (1) コーディネートの出来栄えを採点する
- (2) コーディネートに欠けているアイテムを選択する
- (3) 任意のアイテムを使ったコーディネートを生成する
なお、本記事はHan2017を大いに参考にしています。
入力データ
IQONではユーザーがアイテムを組み合わせてコーディネートを作成・公開する機能を提供しています。今回はこの機能で得られたデータを入力として用います。
このように、ひとつのコーディネートは複数のアイテム画像で構成されています。
コーディネートに使うアイテムの数には制約がありません。その為、入力を画像のシーケンスとみなし、可変長の入力を前提としたアプローチを採用しました。 簡単のため、入力するアイテムは主要なカテゴリ2に限定し、系列長が4-8となるサンプルのみを対象としています。その他処理を施した結果、学習用のコーディネート数は70,997、アイテム総数は174,653となりました。
ファッションアイテムの相性を求めるタスクでは、Amazon co-purchase data(He2016)やPolyvore(Han2017)が使われますが、IQONデータセットは以下の点で扱いやすいデータセットになっていると思います。
- IQONのコーディネートにはAmazonのようなレコメンドによるバイアスが乗らない
- 人種・民族のばらつきが非常に小さく馴染みがあるので評価しやすい
- 生活に根ざした日常的なコーディネートが多く、かつおしゃれである
モデル
CNNとRNNのジョイントモデルを使います。
CNN
CNNはアイテム画像からの特徴抽出を担当します。アーキテクチャはInceptionV3を採用し、ImageNetの学習で獲得したパラメータをそのまま用いました。
RNN
Bidirectional LSTM(BiLSTM)を使います。BiLSTMは、入力された系列に対し、前向きと後向き両方向から同時に学習するRNNです。 アイテムの特徴量系列を逐次入力した時、内部状態を更新しながら次に入力されるアイテムを予測します。次のアイテムを予測できたか否かでモデルを評価するので、コスト関数は以下のようにsoftmaxで定義します。
前向きLSTM
後向きLSTM
ここで、はそれぞれ前向きLSTM、後向きLSTMのパラメータです。 は候補となるアイテム画像の集合です。データセットのすべての画像を含めたいところですが、現実的ではないので、ミニバッチの中から取得します。前向きLSTMのときはミニバッチ内のの集合、後向きLSTMのときはの集合とします。
誤差関数
最終的なコスト関数は以下のようになります。
CNNの重みは固定したので学習の対象はRNNのパラメータです。
実験
本手法を応用したアプリケーションをいくつか紹介します。
(1) コーディネートの出来栄えを採点する
コーディネートを画像の系列として入力した時、以下を計算することでコーディネートの評価を得ることができます。
この式を使えばコーディネートの完成度を定量化して比較することが可能です。
いくつか例を載せます。矢印の左が入力した系列、右側は系列のスコア(大きいほど良い)です。
一番上のコーディネートは自然なのでスコアが大きくなっています。スニーカーをサンダルに入れ替えると不自然さが増し、スコアが減少しました。入力画像がnoisyだったりコーディネートとして成立していない場合もスコアが減少します。
(2) コーディネートに欠けているアイテムを選択する
コーディネートをより魅力的に見せるために必要なアイテムを選択することができます。を候補のアイテム群としたとき、以下の目的関数はの中から最良のアイテムを返してくれます。
結果は以下のとおりです。矢印の左が入力した系列、右側は組み合わせるアイテムの選択肢とそれぞれのスコアを表しています。
1行目は冒頭の問題の解答です。機械はシルバーのサンダルもしくは白のスニーカーが良いと判断しました。 シルバーのサンダルは実際のコーディネートに使われたアイテム、すなわちGround truthです。ただ、この組み合わせなら白いスニーカーでもOKなので、機械の判断は逡巡も含めて正しいと言えます。
(3) 任意のアイテムを使ったコーディネートを生成する
アイテム単体を与えた時、そのアイテムを使ったコーディネートを提案することができます。このタスクは前述した2つのタスクを応用することで実現できます。具体的な手順は以下のとおりです。
1. クエリとなるアイテムの前後のアイテムを(2)で予測する 2. 前のステップで得られたアイテムを結合した系列を入力として系列の前後のアイテムを(2)で予測する 3. 2.を末端まで繰り返す
実際は(2)でスコア上位K個のアイテムを取ってきて、K本の系列を生成するようにします。それぞれの系列は(1)により評価可能なので、ビームサーチによる最適化が実行できるようになります。
実際に以下のコーディネートが生成されました。矢印の左側がクエリとなるアイテム、右側が生成されたコーディネートです。
季節感やアイテムの個性を反映した組み合わせになっていると思います。弊社の社員にアンケートしたところ、かなり完成度の高いコーディネートであるとのコメントを貰いました。
スタイルの獲得に向けて
本記事で紹介した手法は、自然なコーディネートを生成可能であることを確認できました。ここで、さらなる改善を考えてみたいと思います。
ファッションにはスタイル3という概念が存在します。スタイルはコーディネートの方向性を与えます。同じアイテムがクエリであっても、スタイルが異なれば組み合わせるアイテムは当然変化します。 コーディネートを生成するモデルであれば、スタイルで条件付けて出力をコントロールする機能は備えていたいところです。
出力をコントロールする方法
Han2017やZhao2017はアイテム画像とそれに紐づく属性のマルチモーダル学習を提案しています。画像とテキストを同じ空間に埋め込むことで、アイテムの印象を直感的に操作可能になります。弊社でも過去に生成モデルを使ってトライしました。 Hsiao2017ではトピックモデルを利用してスタイルの認識に取り組んでいます。コーディネートを文書、コーディネートを構成するアイテムの属性を単語と捉え、文書のトピック分布をスタイルと定義しています。 Li2016はユーザーの個性ベクトルを追加して応答文の系列を一貫して変化させることに成功しました。
拡張のアイデアは様々ありますが、今回は以前からずっと気になっていた手法を適用してみます。
LDA2VEC
LDA2VEC(Moody2016)はStitchfixが開発し、彼らのユーザーのコメント解析に利用している手法です。単語分散表現に文書分散表現を上乗せし、表現能力を向上させています。元々はlocal(単語)とglobal(文書)の表現を同時に用いることで予測の性能向上を狙ったものと思います。彼らのnoveltyは文書ベクトルを混合モデルとして定義したことで、混合の基底となるベクトルはトピックモデルにおけるトピックと似たような働きをするようです。 詳細に関しては彼らの素晴らしいとしか言いようのないテックブログをご覧ください。
アイテム画像もベクトルに変換してしまえば単語ベクトルと同じように扱えます。LDA2VECのように、globalな表現であるところのコーデベクトルとlocalな表現であるアイテムベクトルを同時に学習させることで、生成されるコーディネートに変化をつけることができるかもしれません。
LDA2VECは教師なし学習なので簡単に試せますし、「機械が自らスタイルの概念を獲得できるのか」というテーマに興味が唆られたので、実際に実装して実験してみました。 ちなみに、出力を思い通りに制御したいのであれば、条件付きモデルとして拡張するほうが確実だと思います。
モデルのアップデート
LDA2VECの文書ベクトルを作成するモジュールを追加します。このモジュールの出力とアイテムベクトルの和がRNNの入力となります。
一見複雑に見えますが、Outfit vector ModuleはLookup tableとLinear layerだけで定義できるので実装は簡単です。
まず、コーディネート毎のトピック分布とトピックベクトルを定義します。 コーディネートのトピック分布は、コーディネートのトピック混合比を表します。混合比なのでを満たします。 スタイルベクトルはスタイルの性格を反映したベクトルで、アイテムベクトルと同じ次元数です。ここで、はスタイル数です。
両者の内積計算をコーディネート特有のスタイルとみなします。
これとアイテムベクトルの和をコンテキストと定義し、RNNの入力とします。
Moody2016では混合比を疎に保つ為、ディリクレ分布を事前分布として利用しています。
上式はディリクレ分布の対数尤度で、はハイパーパラメータです。の値が1より大きいとは密になり、1より小さいと疎になるよう作用します。 本手法でも同様に、を小さく設定したディリクレ分布の負の対数尤度をコスト関数に加えます。
追加実験
(3)のコーディネート生成を、トピックを変化させながら実行しました。トピック毎の特徴は発見できず、スタイルの獲得とはいきませんでしたが、出力をある程度変化させることに成功しました。 所感として、汎用的なアイテム(白いトップスなど)は生成されるバリエーションが多く、主張の激しいアイテム(かごバッグなど)はほとんど変化しませんでした。この現象は直感と一致します。
使ってみての感想ですが、Outfit vector Moduleはなかなか癖がありました。ハイパーパラメータの設定次第では改善余地は充分に考えられます。
まとめ
CNNとRNNのジョイントモデルを用いて以下の3つのタスクに挑戦しました。
- (1) コーディネートの出来栄えを採点する
- (2) コーディネートに欠けているアイテムを選択する
- (3) 任意のアイテムを使ったコーディネートを生成する
また、教師無しでのコーデベクトルの学習を試みました。生成されるコーディネートの制御やスタイルの獲得に向けて更に改良と実験を重ねる必要があります。
最後に
VASILYでは、最新の研究にアンテナを張りながら、同時にユーザーの課題解決を積極的に行うメンバーを募集しています。 興味のある方はこちらからご応募ください。
参考
- Han, X., Wu, Z., Jiang, Y., Davis, L. Learning Fashion Compatibility with Bidirectional LSTMs. In ACM Multimedia, 2017.
- He, R., Packer, C., McAuley, J. Learning compatibility across categories for heterogeneous item recommendation. In ICDM, 2016.
- Hsiao, W., Grauman, K. Learning the Latent “Look”: Unsupervised Discovery of a Style-Coherent Embedding from Fashion Images. In ICCV, 2017.
- Li, J., Galley, M., Brockett, C., Spithourakis, G., Gao, J., Dolan, B. A Persona-Based Neural Conversation Model. In ACL, 2016.
- Moody, C. Mixing Dirichlet Topic Models and Word Embeddings to Make lda2vec. arXiv, 2016.
- Zhao, B., Feng, J., Wu, X., Yan, S. Memory-Augmented Attribute Manipulation Networks for Interactive Fashion Search. In CVPR, 2017.