CLOSE

LLMと検索エンジン・レコメンドエンジンの協調動作への歩み(全1記事)

「AIスタイリストさん」における“事前提案”の難しさ LLMと検索エンジンとレコメンドエンジンの協調で問題の解決を狙う

LLMを活用したサービスを社内外でリリース・運用した経験のある3社のエンジニアが登壇し、実運用を経たからこそ見えた課題やその解決策、運用を見据えた設計・実装の知見などについて語る「LLM in Practice -3社の実例から見るLLM活用サービスを運用した課題と学び -」。ここで株式会社DROBEの岸本氏が登壇。「AIスタイリストさん」リリースの結果と、そこから得られた課題について紹介します。

セッションの概要

岸本将志氏(以下、岸本):ありがとうございます。(スライドに)書いてあるタイトルで発表をします。内容は「2023年3月末ぐらいにChatGPTを使ってサービスをいったんリリースした」というものです。

「AIスタイリストさん」という名前でリリースしたんですが、その結果とそこで見えてきた課題、あとはそれ以外のビジネス化への課題に対応するために工夫したこととか、そのためにLLMと検索エンジンとレコメンドエンジンを協調させたみたいな話ができればと思っています。

(スライドを示して)自己紹介です。鳥がいっぱい並んでいて、髪の毛の色に合わせて色を変えるということをやっています。ありがとうございます。

「DROBE」のサービスについて

「DROBE」のサービスの流れを時間を取って説明します。

まずユーザーさんに70問のけっこう多いアンケートに答えてもらって、我々はそれを基にプロフィールを理解します。そのプロフィールを基にAIとスタイリストがそれぞれ協調して商品を選び、自宅に届けます。そしてユーザーさんは気に入ったものだけを買って、それ以外を返品する感じになっています。

商品を選んでいるところの詳細でいうと、70問のアンケートに答えてもらうと、今はおよそ50万点の服があるんですが、その回答を基にある程度絞ってランキングにします。

要望を基にパターン化して、その中から全部自動で何点か選ぶか、もしくはその中からスタイリストの人が選びます。基本的に選ぶ数としては20点なんですが、20点のアイテムを選ぶためにユーザーさんに「こういうアイテムを届けるんですけど、その服って必要ですか? 着ないですか?」みたいなことを選んでもらいます。

これを事前提案と呼んでいるんですが、その事前提案のフィードバックを受けて、最終的にスタイリストの人が、その中とそれ以外のものを組み合わせて商品を5点選んで届けして、またフィードバックをもらうというループを回しています。

(スライドを示して)届けた物の中には服のほかに、紙が入っています。これをスタイリングカルテと呼んでいます。服を組み合わせたコーディネートの例と、そのコーディネートを解説した「こういうふうなコーディネートです」みたいな解説のデータの紙が届いていて、そのデータが溜まっている感じになります。

ここからChatGPTを使ってサービスを開発した話をしていきます。自然言語で「こういう服がほしいです」みたいなことを入力したら、それに基づいたコーディネートの例とともに「こういうコーディネートです」という回答をする感じです。さらにコンテキストを持って「もうちょっとこうしてほしい」みたいな対話型の探索が可能となっています。

(スライドを示して)実際にどういうものかというと、このサービスはLINE上にあるんですが、例えば「食べ歩きにおすすめの服装は?」と入力すると説明が返ってきます。その下に実際にDROBEにおける商品で、緑色のカーディガンと白い靴が並んでいて、クリックすると実際に買える感じになっています。

このシステムをどのように実現しているか

どうやって実現しているかです。(スライドを示して)左側にあるように、先ほどのスタイリングカルテの中にコーディネートの例が書いてあるんですが、それを全件Embedding APIを使ってベクトル化しています。ベクトル用検索のデータベースに全件保存して、実際にユーザーさんからもリクエストがあった場合には、その質問をまずChatGPTに投げて、はスタイルの例を回答してもらっています。

スタイリングカルテのデータがあるので、ユーザーさんの質問を基にしながらも、ショットである程度スタイリストの回答に近いものが返ってくるように学習をしています。回答が出たら、その回答をさらにベクトル化して、そのベクトルと事前にデータベースに保存しておいたカルテのベクトルを最近傍探索して、一番近いスタイリングカルテを取得してきます。

5番なんですが、ここではスタイリングカルテに基づくデータを取得してきます。ここで1個ポイントがあって、6番のところなんですが、そのコーディネートを構築しているアイテムの色や素材などのメタ情報を基に、さらにコーディネートのポイントを再生成しています。なぜこれをしているのかはあとで説明しようと思います。

実際にリリースしてみてどうだったか

(スライドを示して)実際にリリースしてみてどうだったかというと、LLMを使ってファッションの汎用的な知識を獲得したあとに、DROBEにおけるドメイン知識への変換することは技術的には可能で、有用そうだというのがわかりました。Webメディアやテレビの取材の放映があって、PR的な観点でのインパクトはあったかなと思っています。

(スライドを示して)実際にサービスを出してみたんですが、別の課題へ応用していくという話をしていくと、我々のサービスをスケールする上で一番ボトルネックになっている部分が、先ほど言った話の事前提案と呼ばれるものです。

50万件ある中から20点を選んで、「これはどうですか?」というメッセージを送っています。自然言語でフリーコメントの要望がある場合、今は自然言語での解釈はできていなくて、事前にスタイリストの方が20点選ぶ感じになっています。ここを完全に自動化にできると、現状のスタイリストの人数でも対応できるスタイルの数がざっくり2倍ぐらいになるということで、けっこうインパクトが大きいものとなっています。

事前提案における課題

(スライドを示して)先ほどの事前提案に今までのAIスタイリストさんの方法を適用しようと思った時に、何個か課題があります。まず1個がパーソナライズできていない問題があります。そのユーザーさんが20代であっても50代であっても同じアイテムが提示されてしまう問題です。

あとは先ほどスタイリングのポイントを再生成しているという説明をしましたが、最初のLLMの回答とそれに基づいているDROBEが提案しているアイテムが、完全には一致していません。なぜかというとEmbeddingベースで類似度を計算しているので、一つひとつのアイテムが一致していないんです。

具体的には「今の季節の通勤服を教えて」みたいなことをやった時に、「ベージュのテーパードパンツと白のシャツがよくて、足元はベージュのパンプス」みたいなことをChatGPTが返してくることがあるんですが、「実際にこれを基に提案するとベージュのテーパードパンツは合うんだけれど、例えばシャツが白じゃなくて青で、パンプスも黒でちょっと合わない」みたいなことがけっこう起こるので、先ほど言ったようにしています。

LLMと検索エンジンとレコメンドエンジンの協調で解決を狙う

(スライドを示して)両方の問題をどう解決していこうかとなった時に、LLMとDROBEにおける検索エンジンとレコメンドエンジンを協調させて解決しようと考えました。具体的には、まずLLMでアイテムのメタ情報を獲得して、それを基に検索エンジンでアイテムを検索して候補のアイテムを取得したあと、レコメンドエンジンでそれをパーソナライズする流れを考えています。

説明すると、「今の季節の通勤服がほしい」というリクエストが来た時に、今まではスタイルのポイントを自然言語で返してもらっていたんですが、JSONでアイテムのメタ情報を返してもらうことをしました。

例えば「カテゴリはトップスで、カテゴリの詳細がシャツ・ブラウス、色はホワイトで、柄がストライプで、素材がコットンで、シルエットが長袖」みたいな情報を返してもらって、検索エンジンはElasticsearchを使っているんですが、その情報を基にElasticsearchの検索クエリを組み立てて検索をして、候補のアイテム集合を返してもらったり、それを基にレコメンドエンジンに渡してランキングをして並べ替えたりする流れを考えました。

メタ情報はDROBEで定義しているものがあるので、プロンプトで実際に存在するメタ情報のリストを与えています。(スライドを示して)各キーの説明はこんな感じなんですが、この説明は省こうと思います。

Elasticsearchとレコメンドエンジンを協調させていくにあたって、開発するにあたって「大変だ」ということが想定されたので、開発が簡単になるような環境をいったん作っています。

(スライドを示して)こんな感じです。このスペースはGitHubの機能で、クラウドの開発環境上において、すでに存在するPyTorchのレコメンドエンジンとElasticsearchと、GPTにリクエストするためのバックエンドのPythonのFastAPIで書いたサーバー。あとはそれぞれを協調動作させるビジネスロジックを持つGOのバックエンドと、ユーザーのデータを持つDBが本番データをそれぞれ持っていて、本番とほぼ同じ環境で動かせる環境を作っています。なので、アイデアさえあればわりと開発が簡単になる環境を作っています。

結果としては、協調動作のロジックにおいて、ある程度検索エンジンとレコメンドエンジンの協調動作が可能なことはまず検証できました。(スライドを示して)ちょっと見づらいんですが、「初夏のオフィスに着ていく服を教えて」みたいなことを言うと、ブルーのシャツとか、ベージュのパンツとか、ジャケットの情報を返してくれる感じです。

なんとなくできそうなことがわかったので、これをもうちょっと発展させていきたいと思っています。

事前提案特有の課題とその解決策

(スライドを示して)先ほど説明したんですが、事前提案特有の課題が何個かあって、要望の処理がけっこう多岐に渡っています。

LLMでメタ情報を返してもらって、Elasticsearchに投げて、候補のアイテムを返してランキングをするみたいな感じが、同じフローだと対応できないという問題があります。どういう要望があるのかをまず分類したかったんですが、自分で考えるのはけっこう面倒くさかったのでLLMでやらせてみたところ、けっこううまくいったんですね。

手直しはしているんですが、だいたいこのとおりに返ってきていて。どういうアイテムがほしいかという情報、価格、体型とか、シーン。ほかにはちょっと変な要望があって、サービスに関する質問とか、過去に買ったアイテムに合わせられるかがわかる情報がほしいという要望もある感じですね。この中で、対応できるやつと対応できないやつを分類して、対応できるやつに関してはやっていくことを想定しています。

あとは、実際に要望を見てみると、ほしいものと避けたいものに関する情報が混在していることが多いです。実際にあったリクエストでは、「ボトムスがほしい。ワンピースではなくて上下のコーデがほしい。ネイビーやグレーばかり持っているので他の色がよくて、でも白はいやだ」ということと、加えて「半袖じゃなくて五分丈がいい」みたいな内容です。これを構造化してまとめると、「ほしいものはホワイト・グレー・ネイビー以外の色で五分袖のトップス。それでホワイト・ネイビー・グレー以外のボトムスがほしい。ほしくないものはワンピース」という情報にまとめられます。

これをベースにフローを考えたんですが、要望を事前定義したカテゴリにLLMでカテゴライズして、さらにその要望からほしいものと避けたいもののメタ情報をLLMに返してもらう感じにしています。それぞれをincludeとexcludeというキーで返してもらっているんですが、includeの条件で検索したアイテムと、その全体のメタ情報の中からexcldeで除外した条件で検索して、それぞれのアイテムをマージして候補アイテムとしたあとに、レコメンドエンジンでソートする流れをしています。

結果としては、実際に要望を満たす提案を作ることが可能であることは検証できました。(スライドを示して)これがLLMの回答なんですが、先ほどのボトムスの例だと、includeのほうにトップスで、カラーのやつには色、さらに五分袖のやつ、パンツでカラフルな色合いなやつが返ってきて、除外したいexcludeにはワンピースを除外してくれみたいに書いていて、LLMの回答はけっこう正解と言えるものを返してくれています。

(画面を示して)実際にデモの画面を見せます。先ほどやったやつのリクエストを投げて……。返ってきたアイテムはこんな感じです。カラフルなトップスが返ってきて、ボトムスも青系や緑のカラフルなものが返ってきている感じなので、このやり方は使えることがわかりました。

これを基に実際に社内で定性評価をしたり、あとは実際にプロダクトに組み込んで価値の検証をしたいと思っています。LLMはけっこう不確実でうまくいくかわからないので、品質を担保するために自動で選定できた場合でも、スタイリストのチェックを挟むフローみたいなことを考えています。

我々も社員を募集をしているのでお話だけでもできればと思っています。以上です。ありがとうございます。

司会者:ありがとうございました。

質疑応答

司会者:では質問タイムに入りたいと思います。会場のみなさんはいかがでしょうか。

質問者1:GPTに投げる場合に、情報をGPT向けに言語化できる人は限られると思います。実際のファッションでいろいろなものがあると思うんですが、良い感じに候補を出してくれるようにするために何か工夫はしたんでしょうか?

岸本:そうですね。ユーザーさんの言語化の話ですかね。

質問者1:そうですね。「青い服」と言ってもさまざまなものがあると思うのですが、潜在的な要望を考慮することは難しいですよね?

岸本:そうですね。今の段階では、リクエストに含まれていないような情報に関しては出せていません。サービスの問題になってくるんですが、欲しいものが明確な方がコメントを投げることがわりと多いので、こちらが変な解釈をして要望みたいなものを返してあげるよりは、要望どおりのものを渡したほうがおそらく良いんだろうなと思っている感じです。

質問者1:ありがとうございます。

司会者:ありがとうございます。他にはいかがでしょうか?

質問者2:実は私、先日(このサービスをLINEに)入れてみたんですけど。

岸本:ありがとうございます。

質問者2:ただの要望なんですけど……。その前に1個感想だと、先ほど「言語化が難しい」とありましたが、チャットになっているので「いや、それはちょっと違うんだよね。もうちょっとこういうの」ということが続けられるので、言語化の補整ができるのはすごく良いなと思いました。

岸本:ありがとうございます。

質問者2:ただ、提案されたあとがオシャレに撮影されたアイテムごとの写真になっているので、全身で着たらどうなるのか想像できないというのが……。ちょっと私の思考の限界もあるのですが。できればそこも自動で画像生成をしてもらえるとメチャクチャうれしいなと思いました。

岸本:LINE上ではない本当のサービスのほうは、依頼のあった洋服を自宅に届けて試着をするので、自分が着た姿は自宅でわかるんですけど。確かにAIスタイリストさん、LINEのほうは商品しかわからないので、自分の着たいやつがわかるとうれしいというのはすごくわかります。「確かにな」と思いました。ありがとうございます。

質問者2:ありがとうございます。

司会者:ありがとうございます。他にはみなさん大丈夫でしょうか? また後ほど交流会・懇親会がありますので、またその時に聞いてもらえればと思います。岸本さんありがとうございました。

続きを読むには会員登録
(無料)が必要です。

会員登録していただくと、すべての記事が制限なく閲覧でき、
著者フォローや記事の保存機能など、便利な機能がご利用いただけます。

無料会員登録

会員の方はこちら

関連タグ:

この記事のスピーカー

同じログの記事

コミュニティ情報

Brand Topics

Brand Topics

  • 大変な現場作業も「動画を撮るだけ」で一瞬で完了 労働者不足のインフラ管理を変える、急成長スタートアップの挑戦 

人気の記事

新着イベント

ログミーBusinessに
記事掲載しませんか?

イベント・インタビュー・対談 etc.

“編集しない編集”で、
スピーカーの「意図をそのまま」お届け!