クエリや結果を見ずに検索品質を改善する
(canva.dev)- CanvaはMAU 2億人を達成し、300億件以上のデザインを保有、毎秒およそ300件の新しいデザインが作成されている
- ユーザーがデザインを検索し、共有されたファイルを見つけることはますます重要な課題になっている
- パブリック検索(Web/製品検索)では、ユーザークエリと検索対象の固定セットに基づいてデータセットを構築する
- 専門の評価者が各クエリと項目の関連性を評価してラベル付けする
- RecallおよびPrecisionメトリクスを通じて検索エンジンの性能を評価する
- パーソナル検索では、(プライバシー保護のため)個人のデザインを閲覧せず、ユーザーデータを評価データセットとして利用できない
- 解決策として生成AI(GPT-4oなど)を使い、現実的でありながら完全に合成されたコンテンツとクエリを生成する
- 個人情報を一切侵害せずに検索パイプラインの改善を評価できる方法を提供する
現状: 制約の大きいテスト方法
- 従来のテストプロセス
- エンジニアは限定的なオフラインテスト方式を利用していた
- 既知の問題クエリをCanvaアカウントで実行し、コード変更の前後で性能を比較した
- 例: スペル修正の改善作業で
desginのような誤ったクエリをテスト- 変更前: 結果なし
- 変更後:
design関連の文書を返す
- 例: スペル修正の改善作業で
- オフラインテストを通過した変更はオンラインテスト段階に進む
- Canvaの実験フレームワークを活用したA/Bテストを実施
- 変更を適用したユーザーと標準検索のユーザーの間で検索成功率を比較
- 限界
- オフラインテストの統計的妥当性の不足
- 限られたクエリでは多様な検索行動を代表しにくい
- ユーザーへの潜在的な悪影響
- オフラインテストで検出されなかった性能低下がオンライン実験で露出する可能性がある
- オンライン実験の時間コスト
- 統計的有意性を確保するには最低でも数日から数週間が必要
- 同時実行できる実験数とアイデア検証の速度が制限される
- オフラインテストの統計的妥当性の不足
理想的な状態: 新しいデータセットと評価パイプラインの構築
- 目標: エンジニアがオンラインテストへ進む前に変更内容を客観的に評価できる専用データセットと評価パイプラインが必要
- 主な要件:
- 再現性: いつでも同じ結果を提供
- 高速な反復: エンジニアがコード変更後に結果を素早くテスト可能。本番デプロイまで待たず、すぐに評価できる
- 本番環境に近いこと: 実際のプロダクション動作と一致する結果を提供
- 非ブロッキングな作業: チームメンバー同士が干渉せず、独立してコード変更を試せる
現実的なデータセットの生成: 生成AIの活用
- プライバシーを順守した評価データセット
- GPT-4oを使って実際のユーザーデータを置き換えられる合成データを生成
- ユーザーのデザインを複製せず、テキスト長のような統計的分布を反映して現実的なデータを作る
- Recall評価用テストケースの生成
- トピックとデザインタイプ(文書、プレゼンテーションなど)に基づいて、GPT-4oを使ってクエリと対応コンテンツを生成
- クエリ難易度の調整:
- スペルミスを含める
- 同義語に置き換える
- クエリを言い換える
- Precision評価用テストケースの生成
- 関連デザインと非関連デザインを含むデータセットを生成
- 非関連デザインの生成方法:
- 一部のキーワードだけを含める
- デザインテンプレートまたは下書きの形に変更する
- 古いデザインとして設定する
生成AIの使用で発生した問題
- LLMの利点と限界
- 利点: 大規模なテキストデータを効率的に生成できる
- 生成した静的な評価データセットは繰り返し利用でき、一貫した決定論的な評価結果を素早く提供する
- 限界の除去: データセット生成後は、LLMのlatencyとrandomnessの問題を排除できる
- 利点: 大規模なテキストデータを効率的に生成できる
- 問題点
- 長いタイトルの生成を拒む
- 12〜15語の長さのタイトルを生成するよう求めたが、より短いタイトルが返ってきた
- 例:
Exploring the Latest Advancements in Screen Technology and Applications(9語)Best Practices for Teachers: Presentation Tips for Meet the Teacher(10語)
- 例:
- この問題は、実際の文書では長いタイトルがまれであることを反映している可能性がある
- その結果、タイトル長に関する基準を見直すことになった
- 12〜15語の長さのタイトルを生成するよう求めたが、より短いタイトルが返ってきた
- 繰り返しと幻覚のエラー
- 単語のさまざまなスペルミスを生成するよう求めたが、重複または非現実的な結果が返ってきた
- 例:
Calendarの別のスペルミス生成を求めた際に、反復的な結果が生成された
- 例:
- 単語のさまざまなスペルミスを生成するよう求めたが、重複または非現実的な結果が返ってきた
- 非関連タイトル生成の問題
- 非関連(nonrelevant)デザインのタイトル生成で、指示に正確に従えないケースが発生
- 返されたタイトルの一部には指定キーワードが含まれていなかったり、単に
title stringを含んでいたりするなど、不正確な結果があった
- 長いタイトルの生成を拒む
評価の実行: ローカル環境でのテストと分析
- 評価データセットの活用
- 生成した合成データセットを検索パイプラインに適用して評価メトリクスを算出
- 複数の実行方法を検討した結果、Testcontainersを活用したローカル実行方式を採用
- Testcontainersベースのローカルパイプライン
- 既存のTestcontainerサポートを活用
- Canvaのサービス指向RPCアーキテクチャには、すでにTestcontainer対応が実装されている
- Elasticsearchのような外部コンポーネントを内部Testcontainerと組み合わせてパイプラインを構築
- 本番設定の完全再現
- 検索パイプラインと支援MLモデルをローカルで実行し、本番と同じ環境を構成
- エンジニアはさまざまなモデルバリエーションを試せる
- 既存のTestcontainerサポートを活用
- テストケース処理の流れ
- 各テストケースに必要な状態(state)を生成
- Canvaデザインを作成する代わりに、検索インデックスに必要なデータだけを抽出して投入
- ローカル検索パイプラインを実行
- テストクエリとともにデータセットを実行して検索結果を生成
- 結果を評価モジュールに渡す
- RecallおよびPrecisionメトリクスを計算
- データフローダイアグラム
- 評価ツールを通じてデータを処理する全体の流れを視覚的に示すダイアグラムを提供
結果を可視化する
- 可視化ツールの開発
- Streamlitベースのカスタムツールを使って、評価結果を効果的に可視化し比較できるよう支援
- エンジニアはさまざまな構成(configurations)間のRecallおよびPrecisionメトリクスをひと目で比較できる
- 主な機能
- 構成ごとの比較
- 結果を集計し、さまざまな設定の性能を並べて比較
- クエリタイプと難易度ごとの性能の内訳
- 特定のクエリタイプや難易度に応じた性能を分離して分析可能
- 個別クエリのデバッグ
- 各クエリの出力結果を確認し、特定のユースケースを詳細にデバッグ可能
- 構成ごとの比較
- 迅速な意思決定を支援
- 評価が完了するとツールが即座に実行され、エンジニアが性能結果に基づいて素早く意思決定できるよう支援
- エンジニアは他チームの作業に依存せず、独立して反復実験と改善を進められる
影響と今後の計画
- 理想的な状態にどこまで近づけたか?
- 評価データセットとツールは完全な再現性を提供し、数分以内に結果を生成する
- エンジニアは本番動作と一致する結果を、ローカルで独立かつ客観的に評価できる
- 顧客のデザインやクエリを一切閲覧せずにプライバシーを完全に保証
- 成果の要約
- 高速な反復
- 1000件以上のテストケースを10分以内に処理
- 2〜3日かかるオンライン実験期間のあいだに300回以上のオフライン評価が可能
- オフラインとオンライン結果の相関
- オフライン評価結果は、不適切なアイデアを排除し、成功可能性の高い変更だけをオンライン実験へ進められるよう設計されている
- 開発中にオフラインとオンライン結果の同期を確認する複数の実験を実施
- 性能改善・性能悪化のどちらの変更でも強い一致を確認
- ローカルデバッグ機能
- 検索パイプラインの各コンポーネントを通るテストケースの流れを観察できるデバッグを支援
- 従来の本番ログ依存のデバッグ方式よりはるかに効率的
- 今後の計画
- データセットの拡張
- コラボレーショングラフのような、より現実的な機能を追加
- ツールの改善
- エンジニアが必要に応じてカスタムの合成データを生成できるようツール群を強化
- 生成AI活用の最大化
- 合成データがもたらす可能性を活用し、Canvaの検索ツールをコミュニティにとって最良の体験へ発展させる取り組みを継続
- データセットの拡張
まだコメントはありません。