[論文メモ] COSMO: A large-scale e-commerce common sense knowledge generation and serving system at Amazon

www.amazon.science

SIGMOD/PODS '24

Amazon

LLMを利用し購入の意図に注目した推薦システムの提案

オンラインのeコマースにおいてユーザー行動の意図を理解することは非常に重要。
認知科学の観点から意図は行動を起こせる精神状態で、行動は意図の結果らしい。
例えば「結婚式に出席するために服を買う」という場合「結婚式に出席するため」という意図が「服を買う」という行動を合理化・説明している。
こういったユーザー行動の背後にある意図を正確に捉えることができればより良い推薦や検索が提供できる。
しかし、こういった意図は明示的に表現されず常識が必要になり抽出が難しい。

既存研究ではLLMの知識を活用して、ユーザーの購入や同時購入の意図をLLMに「質問する」ことで生成する試みがされている。
低コストで高精度な意図の抽出ができるがいくつかの問題点もある。
不正確だったり、「ユーザーの好みだったから」といった役に立たなかったりする意図を抽出することがある。
また2カテゴリについてのラベリングで実験しておりカテゴリやユーザー増加時の対応が難しく、業界レベルでのデータでは処理においてスケーラビリティや処理コストの問題もある。
これらを解決するためにeコマースに特化した常識知識を効率的に生成するCOSMOを提案

手法

事前知識

図2にCOSMOのためのインストラクションデータ生成のパイプラインを示す。
ユーザー行動をLLMに入力し知識を抽出、フィルタリングしアノテーションしてインストラクションデータを作成する。

ユーザー行動

毎日何百万ものユーザーがeコマースプラットフォーム上で行動する。
この行動の背後にある意図を理解することでより良いショッピング体験を提供できる。
本研究では強い意図がある「検索購入(search-buy)」と「同時購入(co-buy)」という2つの典型的なユーザー行動に注目する。

検索購入行動:クエリと購入商品ペア   (𝑞, 𝑝)で定義され、ユーザーが短いセッション内でクエリをクリックし最終的に購入
同時購入行動:同時に購入された2つの商品ペア (𝑝1, 𝑝2)で定義され、各商品 𝑝は主要ドメイン(カテゴリ)  d \in Dに分類される

常識知識

既存手法に倣ってLLMを用いてユーザー行動 hを知識の候補として説明させる。
知識は関係 rと目的 tを合わせた3つの組 (h, r, t)で表現する。
例えば、「顧客がカメラケースとスクリーン保護ガラスを一緒に購入したのは、それがカメラを保護する能力を持っているから」といった場合、「カメラを保護する能力を持っている」が目的で、関係はcapableOfになる。
ここでは表2に示す関係タイプと目的タイプを扱う。


インストラクションデータ

LLMが適切に知識を生成するためにタスクを自然言語で定義したインストラクション。
図2の例だと「ドメインdについての検索行動をcapableOf関係を使用して説明する」という感じ

知識生成

ユーザー行動のサンプリング

ユーザーの行動にはランダムな行動といったノイズも多く含まれる。
膨大なユーザー行動データの中から代表的かつ多様なデータをサンプリングするためにまず商品サンプリングをして次に検索購入や同時購入といった行動ペアをサンプリングする。
商品サンプリングではAmazonの人気のカテゴリ内で多くのユーザーが頻繁に購入する「トップティア商品」(高い購入率やクリック率のある商品)を選択する。
さらに商品タイプごとに傘や椅子など詳細に分類して商品が何であるかをより正確に定義する。

同時購入ペアサンプリングではペアのうち最低どちらかが対象としている商品セットに入っているペアをサンプリング。
またペアそれぞれの商品タイプからランダム購入かを判断・排除する。

検索購入に購入率とクリック率の両方に閾値を設定してクエリと購入された商品をサンプリング。
ここではクエリの具体性に注目する。
そもそもの目的が検索クエリと商品との間に存在する意味的ギャップを埋めること。
曖昧で広範囲を示すクエリについてその知識を生成するのはユーザーの需要を明確化し価値がある。
逆に具体的なクエリの場合は現行の検索エンジンである程度十分。
そこでAmazon Searchの社内モデルでクエリの具体性スコアを計算しサンプリングを行う。

QAプロンプトによる知識生成

LLMは大量の知識をそのパラメータに保持しているためQA形式のプロンプトを用いることでユーザー行動に関連する知識を生成できる。
例えば、「ある顧客がiPhoneを購入した理由はそれが〇〇であるから」という購入行動を与えることでLLMはiPhoneに関連する機能や特性に関する意図知識を生成できる。
事前の実験でしっかりとしたシナリオやタスク指示をした場合、コンテキストに応じた応答が得意だと判明。
図3のようなプロンプトでユーザーの検索行動の意図を言語化する。

プロンプトエンジニアリングの一環で回答のリストを生成させるために最後に1.をつける。
MetaのOPT175bとOPT30bを利用した。GPUはA100を16台。

知識の洗練

LLMで生成下だけだと品質に問題があるのでフィルタリングし品質の向上を図る

粗いフィルタリング

ルールベースと類似性ベースの2つの手法を使ってノイズを含む不完全な生成物をフィルタリングする。

ルールベースフィルタリング
NLTK(Natural Language Toolkit)の文分割ツールを使用して生成物から最初の文を抽出しGPT-2を用いてperplexityスコアを計算。
閾値を調整して不完全な文を削除。
また、クエリや商品タイプ、商品タイトルとまったく同じ生成物(または編集距離が閾値以下の生成物)を直接フィルタリング。
さらに、「同じ理由で使用される」や「衣類と一緒に使用される」といった、あまり意味のない知識に関しては頻度とエントロピーを組み合わせて判断し削除する。

類似性フィルタリング
ルールベースで除去しきれなかった類似ケースを除去するためeコマースコーパスで事前学習された独自の言語モデルを使用し埋め込みを生成。
埋め込みのコサイン類似度を計算し閾値でこれらも削除。

ヒューマンインザループによるアノテーション

人間のフィードバックを取り入れて知識の品質をさらに向上させる。
課題は膨大な量の知識候補とコストのバランスを取ること。

均一サンプリングだとロングテール部分の知識に対する予測性能が悪くなる可能性がある。
そこで知識の頻度ログと商品の人気度に基づいて以下の重み付けを行う。

 f(x)は生成された知識の頻度、 \verb|pop|は人気度関数。
人気度はクエリ-商品相互作用グラフにおけるクエリの次数や商品同時購入グラフにおける商品の次数によって定義。
これにより人気のない商品とのバランスを取る。

2つのユーザー行動に対して知識候補をそれぞれ15,000サンプル収集。
表3がデータの統計。

データのプライバシーの問題から専門のデータアノテーションベンダーに依頼。
既存研究では妥当性(その知識が正確かどうか)と典型性(その知識がどれだけ一般的か)の2つのアノテーションだったがこれだと不足が多い。
例えばApple Watchの購入理由で典型的なのは「スマートウォッチ」であることだが、「時間を確認するため」というのは一般的でない。
アノテーターの負担も考えて以下の5つの質問にした。

  1. 説明は完全な文か?
  2. 説明は関連しているか?
  3. 説明は情報を提供しているか?
  4. 説明は妥当か?
  5. 説明は典型的か?

2人の異なるアノテーターによって「はい/いいえ/わからない」とラベル付けされ、意見の不一致については3人目が最終的な確認を行いラベリング。
このデータを用いて分類モデルを学習しフィルタリング後のデータすべてにスコアをつける。
DeBERTa-largeと社内の言語モデルをファインチューニングし人間の判断を全体に適用。
妥当性スコアが0.5を超える知識候補を採用する。
これらの知識精練プロセスを経て高品質なeコマース用の知識を低コストで作成する。

インストラクションチューニングされたCOSMO-LMモデル

表4にアノテーション結果を示す。

検索購入のうち35%が典型的でありインストラクションデータとして直接利用できる。
同時購入の典型性率は非常に低い。
これはLLMは同時購入された商品のうち片方の知識を生成することが多く共通の理由を考慮して生成することが少ないため。

典型的な知識生成だけでなく妥当性と典型性の予測能力、検索結果の関連性や同時購入の理由などいろいろなeコマースに関するタスクを処理できるようしたい。

そのために18の製品カテゴリ、15の関係タイプ、5種類のタスクをカバーするインストラクションデータを収集。
詳しい構成は図4参照

またモデルを異なるフォーマットに対して堅牢にするために異なるテンプレートを設計しインストラクションと入力出力ペアを言語化
例えば、「検索クエリ」や「ユーザー入力」、「ユーザーが検索した:」などの接頭辞を追加。
LLaMA 7b、13bといったパブリックなモデルをベースとして微調整した。

オンラインへのデプロイ

COSMO-LMモデルのオンラインでのデプロイ方法と運用フローについて

デプロイ戦略

図5にCOSMO-LMのオンライン展開を示す。

デプロイ管理はSageMaker上で実現。
ユーザーのセッションログを取り込み動的なモデルの自動更新を実現

リクエストは初め非同期キャッシュストアに照会され頻繁なクエリの場合は即座にに応答が取得されそれ以外の場合はバッチ処理に送られる。
特徴ストアはモデルのレスポンスをダウンストリームタスクで使いやすいように構造化し保存しておく。
非同期キャッシュストアは年間で頻繁に検索されるクエリの事前ロードと毎日のリクエストのバッチ処理のと2層構造。

インパクトと限界

非同期キャッシュストアと特徴ストア戦略を活用したCOSMO-LMのデプロイにより、Amazonの厳しい検索遅延要件を満たしつつコストを抑えながらオンラインリクエストの高速処理が実現した。
ただ、毎日モデルを更新するもののフラッシュセールのような短期間での変動には即時対応できないという限界があり、さらにシステムの機敏性を向上させる必要がある。

評価と応用

インストラクションチューニングされたCOSMO-LMモデルを使用して3つのeコマースの下流アプリケーションについて評価。

検索関連性

COSMO-LMを使用して検索クエリと商品との関連性を向上させる。
例えば「冬用の服」というクエリは、ユーザーが暖かい服を求めていることを暗示している

データセットAmazonKDD Cup 2022データセットを使用し検索関連性を測定する問題をクラス分類問題とする。
クエリと商品を入力としてExact(完全一致)、Substitute(代替品)、Complement(補完品)、Irrelevant(無関係)の4クラスに分類する。

また汎化の確認のためにus、ca、uk、inの異なる4市場から類似データを独自に収集。
各データセットの統計は表5の通り。

評価指標はMacro F1とMicro F1。
Macro F1はクラスごとに平等に評価するため、少数クラスが多い場合に強調される。クラスのバランスに敏感。
Micro F1は全体のパフォーマンスを評価し、クラスのサイズに比例して影響を与える。多数クラスに依存する傾向がある。
クラス不均衡を考慮してMacro F1とMicro F1で評価してるが特にMacro F1を重視しているとのこと。

Bi-encoderとCross-encoderという2つのアーキテクチャをベースラインとして採用。
図6にそれぞれのアーキテクチャを示す。

Bi-encoderはクエリと商品の表現を結合し、関連性を予測する。
Cross-encoderはクエリや商品タイトル、説明などの全ての関連情報を統合して予測する。

パブリックデータセットの結果

表6に結果を示す。

COSMO-LMで生成された常識知識を利用することで検索クエリと商品間の意味的ギャップを埋めることができ検索関連性が大幅に向上したと考えられる。
エンコーダーが固定されている場合、2つのアーキテクチャの間に大きな差はないが意図知識を追加することでMacro F1は60%増加、Micro F1は30%増加。

エンコーダのパラメータを更新するとCross-encoderはMacro F1が73.48%、Micro F1が90.78%となった。
これはKDD Cupリーダーボードのトップ1のアンサンブルモデルを上回る結果らしい。

プライベートデータセットの結果

図7a, 7bにプライベートデータセットでの実験結果を示す。

多国市場におけるプライベートデータセットでもCOSMO-LMの知識がCross-encoderのパフォーマンスを大幅に向上させている。
常識知識を追加することでCross-encoderモデルはすべての地域においてエンコーダを固定・変動している場合でもベースライン手法を上回っている(Macro F1)

セッションベースのレコメンデーション

COSMO-LMを使用してセッションベースのレコメンデーション(SBR)を強化する。
SBRはユーザーの複数のアイテムとのインタラクションから次にクリックまたは購入するアイテムを予測するタスク。

衣料品と電子機器の2カテゴリーの1週間分のセッションデータを収集した。
セッションの平均長さは20分以内に制限され、ユーザーが頻繁にアイテムをインタラクションしたデータを対象にした。
データの統計は表7を参照。

ベースラインとしてFPMC、GRU4Rec、STAMP、SR-GNNなどの時系列モデルやグラフベースのモデルを採用。
初期実験でGCE-GNNが様々なセッションベースのレコメンデーションデータセットで強力なパフォーマンスを発揮。
なのでGCE-GNNモデルをベースに、COSMO-LMから生成された検索クエリ関連の知識を利用し検索意図に対応したレコメンデーションモデル「COSMO-GNN」を作成。

評価指標は以下の3つ

Hits@10:レコメンデーションの結果の上位10件に少なくとも1つの正解を含むかで0 or 1
NDCG@10:関連性の高いものが上位に出るかどうかの指標で0~1
MRR@10:最初に現れた正解の順位の逆数で0~1

実験結果は表8の通り。

COSMO-GNNは他のペースラインモデルに比べ高い性能を発揮し特にHits@10およびNDCG@10で大幅な改善を示した。
電子機器カテゴリではより複雑で多様な検索シーケンスが含まれているため衣料品カテゴリよりも大きな改善が見られた(Hits@10)。
これは電子機器ではユーザーが具体的なニーズに到達するために多くの背景知識を必要とするためと考えられる。
Hits@10は改善してMRR@10は低下したというのが少々気になる。

検索ナビゲーション

COSMOは従来の製品中心の検索から顧客の意図や行動に基づいた検索ができる。
顧客の意図や行動に密接に対応し製品の分類と顧客の言語との間のギャップを埋める。
図8に例を示す。
階層構造に整理され粗い概念(キャンプ)からより具体的なもの(冬キャンプ)へと展開され、さらに意図概念が商品概念(冬用ブーツ等)にリンクされる。



COSMOはマルチレイヤーかつ動的なナビゲーションシステムを提供。
図9に検索ナビゲーションを示す。

広範な概念の解釈:曖昧なクエリに対してもユーザーの意図を深く理解し広範なユーザー意図に対応
商品タイプおよびサブタイプの発見:クエリに基づいて特定の商品タイプやサブタイプを提示し顧客の需要により近い商品を発見
属性ベースの絞り込み:検索結果を特定の属性に基づいて絞り込み各顧客に合わせた検索体験を提供

実験はAmazonでのオンラインA/Bテスト。Amazonの米国トラフィックのおおよそ10%らしい。
結果、売上が0.7%(数億ドル)増加し、ナビゲーションのエンゲージメント率も8%向上。
これらの成果は図9にある僅かなものから得られた。
この結果から、COSMO-LMをさらに広範に適用することで、年間の売上高を大幅に向上させる可能性がある。

所感

AmazonのLLMを利用した推薦システムということでちょっと話題になっていたので読んだ。
LLMを使って単純な検索-購入履歴からその理由(一般常識的な)を取り出すというのは面白い(既存でもあるが)。
LLMがある程度の常識を持っているので、それを利用してただのデータから常識を要求される情報を取り出すということが色々なタスクで試されそう。
ただラベリングが必要なのは少々いただけないが。フィルタリングに関してもなかなか大変そうではある。

[論文メモ] Color Harmonization

SIGGRAPH 2006

元の画像の色をできるだけ保持しつつ色の調和を高める手法の提案

図1は提案手法で調和を高めた例


配色には色々な背景があるが、色の調和は非常に重要。
色の調和とはある特定の内部関係を持った視覚的に心地のよい色の組み合わせのこと。特定の色ではなく色空間での相対的な位置関係で決定される。

アーティストは経験や直感、または本やアプリケーションなどから調和の取れた配色を選び作品の塗り替えを行うが画像が複雑な場合、この作業は非常に手間がかかる。
そこでこの作業を自動化しようというお気持ち

背景

色調和の初期はニュートンゲーテ、ヤング、マクスウェルなどに遡る。
20世紀初頭に発展した現代色彩理論では色調和についても議論さている。
ムーンとスペンサーはマンセルの表色系に基づいた色調和の定量的な表現を導入した。
グランビルとジェイコブソンはオストワルトの表色系に基づいた色調和の定量的な表現を導入した。

イッテンは色相に重点を置いた新しい色相環を提案した。
イッテンは3色(シアン・マゼンタ・イエロー)を基本とした12色の色相環の相対的な位置で調和は決まるとした。
ダイアード(円環で補色の2色)やトライアド(正三角形)、テトラード(正方形)などで決まる配色は調和しているとした。

提案手法では松田によって開発されたスキームに基づいて調和させる(松田のスキームもイッテンの調和概念から派生した)。

調和スキーム

図2にHSVカラーホイール上の色相チャンネル上に定義された8つの調和タイプを示す。
グレーに含まれる色相はテンプレートに従って調和しているとみなされる。
グレーは色相環の相対位置を定義してるもので回転ができる(あくまでテンプレートであり特定の色ではない)。

調和テンプレートには

  • 同じ色の濃淡(i型、V型、T型)
  • 補色を含む同じ色の濃淡(I型、Y型、X型)
  • 複雑な組み合わせ(L型と鏡像)
  • グレースケール(N型)

がある。
(色の調和には主に色相が影響するが彩度や明度も影響を与える。)

この研究ではN型は考えず、他の7つのテンプレートをベース考える。
1つのグレーをここではセクタと呼ぶ(V型は1つ、X型は2つのセクタがある)。

画像が与えられたとき、まず画像がどの調和テンプレートが近いかを測定する。
測定は以下の式を用いる。

F(X, (m, \alpha)) = \Sigma_{p \in X}|| H(p) - E_{T_{m}(\alpha)(p)}|| \cdot S(p)

  •  X:画像全体
  •  p:画像内のピクセル
  •  m:テンプレート( m \in \{i, I, L, T, V, X, Y \})
  •  \alpha:セクタの回転量
  •  H(p)ピクセル pの色相
  •  S(p)ピクセル pの彩度。彩度が高いほど、そのピクセルの色の調和性が目立つため、重み付けのために使われる
  •  T_{m}(\alpha):テンプレート m \alpha回転サせたもの
  •  E_{T_{m}(\alpha)}(p):対象テンプレート T_{m}(\alpha)ピクセル pに近いセクタの境界の色相

この式の値が小さいほどテンプレートに近い(調和している)ということになる。
彩度が調和に与える影響は重み付けで解決してる。

最適化を行い画像 Xに対して最適な調和テンプレート T_mと回転 \alphaを見つける。
調和テンプレートが見つかったあとは色相シフトを行い調和させる。
そのプロセスを示したのが図3。
また図4のように手動でもできる。

色の調和化

最適な調和スキーム T_m(\alpha)が見つかればあとはそれに合わせて色相をシフトすることで色の調和を最適化できる。これを調和化と呼ぶ。

色相のシフト後のピクセル pの色相 H'(p)は以下の式で得る。
 H'(p) = C(p) + \frac{w}{2}(1 - G_{\sigma}(|| H(p) - C(p)||))

ピクセル pの色相をターゲットのセクタとの距離を考慮しつつ、セクタ内に収まるようにシフトする感じ。

だが元画像の色をなるべく維持したまま色相シフトすると図5(b)のようなアーティファクトが発生することがある。
これは図5(d)のように色相シフトしたときに連続領域を分割されるためにおこる。

なおこれはセクタが1つ場合でも起こるので注意(セクタの反対の色相付近とか)。
これを解決するために2つの連続するセクタ境界の間の色相のピクセル集合を \Omegaとしたとき、それらのピクセルをどのセクタにシフトするかラベリングの必要がある。
そこでグラフカットで隣接領域の一貫性を保ったままの色相シフトを実現する。

ピクセル pのラベルを v(p)として
グラフカットで以下のエネルギー関数を最小化し最適なラベリングを求める。
 E(V) = \lambda E_1(V) + E_2(V)
 V = \{ v(p_1),...,v(p_{|\Omega|})

 E_1(V) = \Sigma^{|\Omega|}_{i=1} ||H(p_i) - H(v(p_i))|| \cdot S(p_i)

 E_1(V)は色相シフトするときのコストでピクセルがセクタ中心から遠いほど高コスト。

 E_2(V) = \Sigma_{\{p, q \} \in N} \delta (v(p), v(q)) \cdot S_{max}(p, q) \cdot ||H(p)-H(q)||^{-1}

 Nは4 or 8近傍のピクセル  \delta (v(p), v(q))は隣接ピクセルが異なるセクタにシフトされると1、それ以外は0となる関数。
 E_2(V)は一貫性を保つためのコストで隣接ピクセル同士が異なるセクタにシフトされると高コスト。

これを最適化することでなるべく連続領域は同じセクタになるように色相シフトできる。

ただ問題もあり、同じオブジェクトでも領域が分断されている場合に異なるセクタにシフトされうる。
図7(e)に注目すると女の子の右手がズボンの領域を分断しているため、同じズボンのオブジェクトでも異なる色相にシフトされいる。

これを解決するにはユーザーが手作業ではあるが同じオブジェクトでも異なる領域に割り当てられた部分を指定してグラフカットにヒントを与える方法がある(図6)。


実験・結果

実際の例は図1、3、11の通り。

また前景を固定して背景を前景に調和させることができる。
図12は右下の旗の調和スキームに合わせて画像を調和させた例。

図8はポスターにテキストを調和させた例。
ポスターは変更せず、テキストのカラーを調和させた。


自然画像は通常いずれかの調和テンプレートに収まっていて、それを手動で他のテンプレートにすると不自然な結果になりうる(図9)。

淡い色の画像では効果が薄い(図10)。これは提案手法が色相をメインにしているため。

所感

以前にお勧めされていていたので読んで自分なりにまとめた。
意外と仕組みはシンプルで、すでにある調和のテンプレートに当てはめてそれを調整するというもの。
言われれば調和しているという気もするがプロではないので判断が少々困る。
図12のように指定した色に調和させるのは結構面白い。
デザインに困ったらこのスキームに任せるのはあり。

[論文メモ] Relevance Filtering for Embedding-based Retrieval

arxiv.org

CIKM 2024

コサイン類似度を適応的に調整し検索精度を上げる方法を提案

Embedding-basedな検索システムではApproximate Nearest Neighbor (ANN) 検索を利用し大規模なデータからクエリに関連するデータを効率的に取得する。
当然Recallを重視するとPrecisionが下がる。eコマースでの商品検索で顕著な問題。
関連の低い商品を大量に見せられるとユーザー体験が損なわれる。
なので、関連の低い商品をなくす(Recallを下げずPrecisionを上げる)ようにしたい、というお気持ち。

検索はEmbedding-basedで類似度はコサイン類似度。
事前にcontrastive lossやlistwise lossなどで学習された2つのネットワーク(siamese network)を利用する。
データベースは事前に片方のネットワークで埋め込みにしておく。
検索時はもう一つのネットワークでクエリを変換しTop-K個の候補を抽出し順位付けを行いユーザーに提示するがこのKを決めるのが難しい。
例えば関連商品が1つしかなければK-1個は無駄で、この無駄なデータに関しても順位付けをすることになる。
通常異なるクエリ間でコサイン類似度の比較はできないのでglobalな閾値を決めてコサイン類似度が閾値以下をフィルタリングするのも不適切。
単純なアプローチとしてTop-K個を更にクラス分類して関連度を予測する方法もあるがオンラインで実行するにはコストが高い。

手法

コサイン類似度を異なるクエリ間でも解釈可能に変換する関数 \mathcal {F}_{\Theta}を考える。
これだとコサイン類似度を直接扱うことになり余分な計算コストもわずかで済む。

 \mathcal {F}_{\Theta}はクエリ q_{i}で検索し得られたTop-K個の候補セット \mathcal{P}から関連の高いものだけを抽出した新たな候補セット \mathcal{ \tilde{P}}_iを作成する。

 tは実験等で決定するしきい値

関数は単調増加で候補の相対順位に影響を与えないほうがよく、また計算が軽いものがよい。
以下の5つを実験。

  1. 生のスコア:  \mathcal{F(x)} = x
  2. 線形関数:  \mathcal{F(x| \Theta = (a, b))}= ax + b
  3. 平方根関数 \mathcal{F(x| \Theta = (a, b))}=sgn(x)a \sqrt{|x|} + b
  4. 二次関数 \mathcal{F(x| \Theta = (a, b))}=sgn(x)ax^2 + b
  5. ぺき関数 \mathcal{F(x| \Theta = (a, b, k))}=sgn(x)a|x|^k + b, ただし k \in (0, 2)

生のスコアは比較用のベースライン。

関数のパラメータ \Theta = (a, b, k)をクエリから生成するネットワークを「Cosine Adapter」と呼ぶ。
べき関数の kについてはシグモイドにかけてから2倍する。
Cosine AdapterはBCE lossで学習する(クエリと候補ペアに関してのラベルを利用する)。
Cosine Adapter学習時は埋め込みを生成するsiamese networkは固定し、学習データにはsiamese networkの学習に利用していないものを利用する。
Cosine Adapterの学習の全体像は図1参照。

提案手法を使った検索システムの流れは図2の通り。

  1. クエリを埋め込む
  2. データベースからANNでTop-K個の候補を抽出する
  3. クエリを入力としてCosine Adapterでパラメータを生成し候補をフィルタリングする
  4. フィルタリングして得られた候補を順位付けする

実験・結果

データセットはパブリックな MS MARCO datasetとプライベートなWalmart product search dataset。
評価指標は以下

  1. PR AUC (Area Under Precision-Recall Curve)
  2. P@R95 (Precision at 95% Recall): Recallが95%におけるPrecision
  3. Filter%: フィルタリングで削除された割合
  4. Null%: フィルタリング後に検索結果が0になった割合
  5. MRR (Mean Reciprocal Rank): MS MARCO datasetで使われる指標で大きいほどよい

MS MARCO datasetの実験結果は表1を参照。
ほとんどのクエリで関連するpassageが1つしかないのでAUCやPrecisionが低いとのこと。
手法Choppyは積極的に切り捨てる既存手法らしい(積極的に切り捨てるのでRecallが低い)。
K=10のときはAUCはベースラインに比べ他の関数のが良いものの正直微妙?
K=1000のときはどれもベースラインよりもよく、特にP@R95とFilter%が一貫して高い。


Cosine Adapterによるコサイン類似度のキャリブレーション効果を調べた。
K=1000のときにフィルタリング後にどれくらいのpassageが保持されるかを調べた結果が図3。
生のスコアの場合0と1000にピークがあり、globalなしきい値でフィルタリングすると多くの場合で全てを消すが残すかになってしまう。
つまり異なるクエリで同じしきい値を利用できない=コサイン類似度を比較できない。

それに対してキャリブレーションしたスコアの場合生のスコアよりもバランスの取れた分布になっているのがわかる。


Walmart product search datasetについての結果は表3
学習データは700kのクエリと600万の商品のペア。

siamese networkはlistwise lossとcontrastive lossのそれぞれを用意した。
結果としてベースラインより提案手法のほうが全体に優れている。指標がAUCとP@R95だけなのはなぜ?
listwise lossのほうが向上が顕著。
生のスコアでP@R95をlistwiseとcontrastiveで比較するとcontrastiveのが高い。これはlistwise lossが候補リストないの相対的なランキングを学習しスコア自体をあまりキャリブレーションしてないのが原因とのこと。
Cosine Adapterによりこの差を縮められたことが確認できる。


Walmartの検索システムに統合しての評価。
Walmartでは埋め込みベースとテキストベースのハイブリッドで検索システムを構築している。
評価は表示される上位10件の商品についての人間による精度評価とエンゲージメント(オンラインABテスト)。利用したのは平方根関数モデル。
データは700個のクエリに対して表示される10商品。
結果は表4、 5を参照。
上位5件で5%以上、上位10件で4%以上の精度向上。p値も0.05を大きく下回っている。
ABテストでは注文数と総商品売上高(GMV)への影響。これらについてはp値が0.05を大きく上回っている。
以上からエンゲージメントに影響せず精度向上したといえる。


所感

ちょっと話題になっていたので読んだ。以前にも似たように本来利用する結果部分をキャリブレーションする論文を読んだ気もする。
計算コストもそれほど増えないしアイディアも面白い感じ。実用性がありそう。
検索だけでなく推薦システムとかでも応用できそう?
Walmartで独自データを持っている、実際にサービスに組み込んで評価できるの強い。
ただ独自データで評価が少々怪しくも感じる。

[メモ] Prioritized DCIのアルゴリズム

arxiv.org

ICLR2017

上記論文で提案されている効率的なk-nn手法、Prioritized DCIについてのメモ。

同じ著者らが提案したDynamic Continuous Indexing(DCI)の改良手法になる。

あくまでアルゴリズムを理解したかっただけなので理論保証や証明等は省く。
また理解が間違っているかもしれないのであしからず。

データ構造の構築

データ構造は mL個のバイナリツリー \{ T_{jl} \}_{j \in [m], l \in [L]}
 m Lは適当なインデックス。速度や性能に影響する。
 nは学習データの数。
またランダム射影をするための単位ベクトル集合 \{u_{jl}\}_{j \in [m], l \in [L]}も用意。

アルゴリズム

  • 事前に学習データを次元削減のため適当な方法(例えばNNとかで) \mathbb R^dに射影しておく
  • 各学習データポイントについて  u_{jl}内積をとる
  • その値をkey、学習サンプルとしてのインデックスをvalueとして対応するバイナリツリー T_{jl}に追加する

これにより n個のサンプルが追加されたバイナリツリーが mL個構築される。


クエリの検索

現在 L個のバイナリツリー集合が m個ある。
この L個のバイナリツリー集合からそれぞれ k_0個の候補点を抽出する。
結果的に(重複含む) Lk_0個の候補点が得られるのでここから近傍点を k個探索しそれを返す。

用意として L \times nの2次元配列 C L個の優先度付きキュー P_lをそれぞれ用意する。
またあらかじめクエリを \mathbb R^dに射影しておく。

 l \in L番目の優先度付きキュー P_lは、対応する T_l m個のバイナリツリーそれぞれから1つずつ最も距離の近いサンプルを取り出し、クエリとの差分の絶対値のマイナスを優先度として追加し初期化する。
つまり各 P_lには m個のデータが入っていて、距離の近い順に取り出せる状態になる。

ここから探索。
ある l \in Lについて。
 l番目の集合からの候補点が k_0に満たない場合に

  •  P_lから候補点 pを取り出し、対応する学習データのインデックス hから C_lの対応するインデックスのカウントを+1する(C[l][h] += 1のイメージ)。
  • もしカウントが mになったなら(C[l][h] == m)それを l番目の集合の候補点として追加する。
  • 今回のサンプルを選択したバイナリツリーから次に近い点を探索し、同じように P_lに追加する

上記を k_1回繰り返す。

所感

結構計算が多いように感じるけど内積とってスカラ値にするからそんなにきつくはないのかな?
実際に大規模データで試したわけじゃないのでどれくらいの速度なのかちょっとわからない。
ランダム単位ベクトルが唯一の確率的な要素かな?
 k_1のサイズは少々気になる。 k_1 \geq mの制約はありそう?

[論文メモ] Generative Pre-training for Speech with Flow Matching

arxiv.org

MetaAI internship

TTSや音声強調等のダウンストリームタスクのパフォーマンスを向上させるFlow Matching生成モデルの事前学習方法の提案

wav2vecやHuBERT等のSSLモデルは特徴量抽出のための基盤モデルとしてよく利用される。
生成モデルはスピーチタスクにおける基盤モデルとして使えるのかを調査した。

よい生成モデルは他のスピーチタスクにも応用できるという考え。

提案手法名はSpeechFlow

手法

SpeechFlowという名前からわかるように最近ちょっと流行りのFlow Matchingがベースになる。

最適輸送のConditional Flow Matchingの目的関数は以下。

 \psi_t(x) = (1 - (1 - \sigma_{min})t)x + tx_1)


 x_0がガウシアンノイズ、 x_1が元のデータ、 tは時間で[0, 1]、 \sigma_{min}はハイパラでここでは1e-5、 v_tが学習対象のニューラルネット

このflow matchingモデルを事前学習して他のダウンストリームタスクに応用する。
この生成モデルの出力は x \in \mathcal{R}^{d \times L}の音響特徴(メルスペクトログラム)を採用する。 dはメルスペクトログラムの次元数、 Lはフレーム長。
学習時に使うデータはラベルのないただの発話データ。

wav2vecやHuBERTなどで使われていたマスク部分予測をここでも採用する。
モデルの入力としてノイズ x_0だけでなくマスクされたメルスペクトログラム x_{mask}も入力とした条件付き生成モデルとする。
よって目的関数は以下のようになる。

 x_{mask}は確率 p_{cond}で入力され、 1 - p_{cond}ですべてマスクされた情報のない x_{mask}が入力される。
入力メルスペクトログラムの n_{mask}がマスクされ、マスク箇所は最低 l_{mask}フレームマスクされる。
 x_{mask}は入力となる \psi_{t}(x_0)と周波数方向でconcatされ、モデルの次元に合うように線形変換される。
マスク箇所は0で埋められてマスクされていない箇所のみでlossをとる。
実験では n_{mask} \sim \mathcal{U}[70%, 100%]、 l_{mask} = 10をデフォルトに。

こうして出来上がったモデルの入力 x_{mask}をタスクに合わせたものに変更しfine tuningする。

 yはタスク毎に変化する。

音声強調:ノイズの乗った音声
音声分離:複数話者の混ざった音声
TTS:アライメントされた音素特徴

SpeechFlowの全体像が以下の図1

実験・結果

細かい設定等は論文参照。

音声強調の結果が表1。他手法と異なり音響特徴ベースにもかかわらず善戦。

音声分離の結果が表2。素のSpeechFlowでは少々厳しい。
ESTOIiはよいけどSI-SDRiは低く、調べるとSI-SDRiはメルスペクトログラムからwavを生成する時点で厳しい。
Upper-bound w/ clean Specは元のメルスペクトログラムを利用したものだが、それでもこの程度。
そこでinverse-Mel と phase estimationを導入してみたところ改善された。


zero-shot TTSの結果が表3。
VoiceBoxと同じくらいの精度。


マルチタスクの結果が表4。これまでの3タスクをシンプルに組み合わせた。
全体的には単一モデルのがよい。
ただ、1つのモデルで複数タスクを解くユニバーサルモデルを構築できる可能性は十分ありより多くの研究が必要。

事前学習のステップ数、lr、 x_{mask}の採用確率 p_{cond}について調査した結果が図2。
学習率は5e-5以上あれば良さそう。
 p_{cond}は80%程度必要で、 p_{cond}=0のただのFlow Machingは劣化。提案手法SpeechFlowが優れていることを示してる。

所感

Flow MatchingのMAE。
確かにあってもおかしくなかった。ほかのMAEと同じくシンプルで強力そう。
SSLへの利用が検討されるこの流れ、基盤モデルになっていきそうな雰囲気を感じる。

[論文メモ] VITS-based Singing Voice Conversion System with DSPGAN post-processing for SVCC2023

arxiv.org

ASRU2023

VITSベースのSinging Voice Conversion(SVC)モデルの提案

Voice Conversion Challenge 2023 (SVCC2023)に参加したT02チームの手法。
SVCC2023についてはこちらの記事にまとめた。

ninhydrin.hatenablog.com

手法

アーキテクチャ全体像は図2を参照

基本的にはVITSをベースとしていて、学習時の入力はF0、スペクトログラム、HuBERTによるSSL特徴の3つになる。
元のVITSではPrior Encoderの入力がテキスト(音素)、Posterior Encoderの入力がスペクトログラムだったのに対し、提案手法ではPrior Encoderの入力をHuBERT特徴量とF0、Posterior Encoderの入力をスペクトログラムとF0に拡張した。

F0の抽出はPYINを利用。

ソースとなる歌手のF0をそのまま適用するとターゲット歌手の話者性が下がってしまうのでKey Shifterを導入しピッチを変更する。
Key Shifterはまず各歌手の平均F0を計算しておく。そしてソース歌手の平均F0とターゲット歌手の平均F0の差分 \delta F0を計算し、それを抽出したソース歌手のF0に足し合わせる。

ただ、これはソース歌手がわかっているin-domain タスクだけでしか利用できず、cross-domainでは利用しない。

よくあるVITSベースの手法ではVITSのdecoderに当たるvocoderをHiFi-GANベースと異なるもの(Vocosとか)に変更するのが多いが提案手法ではdecoderは変更しない。

ただ、このままだと生成された音声にmetallic noiseがのることがある(特に呼吸時)。それを消すためにDSPGANを導入し、post processとして生成された音声をDSPGANで再生成する。
これによりアーティファクト等が減ったらしい。

システムの全体像は図1の通り。
VITSで声変換し、予測時にはDSPGANのpost processを導入。

実験・結果

データセットと利用については表1を参照。

SVCCのデータは少ないのでVCTKデータセットで事前学習し、次にMixedデータで学習、そしてSVCCデータでの適応学習という手順をとった。
適応学習時には二人ほど追加。この二人は歌唱データでも大量のデータを持つ二人で学習の安定化に役立つと判断。

SVCCデータで学習する際にはspeed perturbationでのaugmentationを行った(0.8~1.4)。使用したのはaudiotsmというライブラリ。

最適化はAdamで \beta_1 = 0.8, \beta_2 = 0.99 \beta_1が少々大きめな印象。学習率は1e-4。

SVCC2023、自然性について結果は以下の図3のT02を参照。
Task1(in-domain)、Task2(cross-domain)ともに自然性は高そう。

類似性についての結果は図4。
参加チームの中では上位。


ablations
提案手法の各テクニックが自然性、類似性にどう影響しているかを調査。
調べたテクニックは

Speech Pre-training:VCTKデータでの事前学習
Adaptation Tricks :適応学習時のaugmentationと二人の話者追加
DSPGAN Post-processor:DSPGANによるpost processの有無

結果が表2。
Speech Pre-trainingとDSPGAN Post-processorがないと自然性が大きく低下(類似性もすこし)、
Adaptation Tricksがないと過学習して類似性が大きく低下した。

所感

DSPGANによる再合成というのは面白いテクニック。vocoder自体のpriorを利用でき、またvocoder学習時に工夫しておけば色々できそう。VCモデルと独立していて、色々な手法に適用できるのもよい。ablationがあるのも嬉しい。
提案されているVCモデル自体はよくある感じで感動は薄かった。

[論文メモ] VITS-Based Singing Voice Conversion Leveraging Whisper and multi-scale F0 Modeling

arxiv.org

VITSベースのSinging Voice Conversion(SVC)モデルの提案


4回目となる Voice Conversion ChallengeはSinging Voice Conversion Challenge(SVCC)となりより難しい歌声変換タスクとなって開催された。
SVCC2023についてはこちらの記事にまとめた。
ninhydrin.hatenablog.com

このSVCC2023に参加した番号、T23の手法についての論文。

手法

アーキテクチャ全体像は図1を参照。

見てわかる通りVITSベースで細かいところに変更が入っている。

Posterior Encoder

特に変更なし

Decoder

中間特徴 zから音声波形を生成する部分でvocoderに該当する。
本家VITSでは入力を調整したHiFi-GANだったが、提案手法では歌声変換に対応するためにf0から生成したサイン波を入力に追加するsource filterタイプに変更した。

ただし、 n_t \sim \mathcal{N}(0, 0.003^2) \phi \in [-\pi, \pi] N_sはサンプリングレート。
discriminatorはVITSと同じくMPDとMSD。

Prior Encoder

本家VITSではテキスト(音素)と話者IDが入力になっていたが、提案手法ではテキストのかわりにWhisperのボトルネック特徴 c_{bnf}と元の音声から抽出したF0得た特徴量 c_{f0}を入力とする。
つまり p(z| text, singer)から p(z| c_{bnf}, c_{f0}, singer)になった。

SVCCはnon-parallelなSVCで言語についても発話と歌で異なる場合がある。なのでマルチリンガルに対応できる必要がある。
whisperは多言語対応の音声認識なのでこれのボトルネック特徴ならそれを解決できると考えた。
whisperのエンコーダのいくつかの層で実験をした結果、浅めの特徴を利用することになった。浅い層には言語特徴、歌唱スタイルが含まれているらしい。
ただし、不要な話者も含まれているためランダムピッチシフトした音声を入力にすることで話者情報をぼかした。

歌声変換のためにF0特徴は重要だが単純にF0を入力するとF0抽出アルゴリズムのミスで変換が失敗することがあった。
そこでparallel bank of transposed convolutions (PBTC) moduleを使ってF0をエンコードする。

PBTC moduleについては図2参照。
ベクトル量子化したF0をone-hot化し、線形変換する。それを複数のdilate rateのTransConvに掛けて合流させる。

Training Strategy

普通なら他話者の歌唱データで事前学習するところだが、SVCCではデータが限られておりそれができない。
そこで3段階に分けての学習を行う。

1) Warm-up: 発話データでの学習
2) Pre-training: 歌唱データでの学習
3) Adaptation: ターゲット歌手のデータで学習

ターゲット歌手のデータが非常に少なく過学習してしまうのでaugmentationを行う。
行ったaugmentationはe formant shifting, pitch randomization, random frequency, speed adjustment。random frequencyってなんだ?
これらのaugmetationはボトルネック特徴に話者情報が漏れるのも防ぐ。

Loss Function

目的関数について、Warm-upとPre-trainingは本家VITSと同じ。
Adaptationのときは過学習を防ぐために以下のlossを追加する。

 L_{wReg} = ||\theta - \hat{\theta}||^2

 \thetaはAdaptation開始時のモデルパラメータ、 \hat{\theta}は現在のモデルパラメータ。
Adaptation開始時からあまり離れないようにというオンライン強化学習でよくあるloss。

実験・結果

データセットは表1の通り。サンプリングレートは一律24kHzに。

SVCC2023のタスク1はin-domain、タスク2はcross-domain。
提案手法のチーム番号はT23。

SVCC2023の自然性についての結果が図3。
両タスク高いスコア。自然性は高そう。


類似性についての結果が図4。
類似性について中央くらいの順位だが、他の手法と比べ大きな差はない。
単純にSVCタスクにおいて類似性を高めるというのが非常に難しいとのこと。

ablationとして

  • PBTC moduleの有無
  • whisperをconformerベースのWenetSpeechとLibriSpeechで学習したモデルに変更
  • Warm-upステージの有無

を調査。結果が表2。
自然性への影響は大きそうだが、類似性については怪しい。


所感

以前読んだSVCC2023に参加したチームの手法の解説。
PBTCを知らなかったので学び。自然性に大きな影響がありそう。確かにf0推定はまれに失敗するので対策したいところ。
so-vits-svcやRVCとはまた違った進化をしていて面白い。
多段階学習習字、学習中パラメータが元のパラメータから離れすぎないようにするのは強化学習味がある。