埋め込み類似度検索エンジンの選択
WanyinアプリはAIベースの音楽共有コミュニティであり、音楽の共有を促進し、音楽愛好家の作曲を容易にすることを意図している。
Wanyinのライブラリには、ユーザーによってアップロードされた大量の音楽が含まれている。主なタスクは、ユーザーの過去の行動に基づいて興味のある音楽を選別することである。我々は2つの古典的なモデルを評価した:ユーザーベース協調フィルタリング(User-based CF)とアイテムベース協調フィルタリング(Item-based CF)。
- ユーザベース協調フィルタリングは、類似度統計量を用いて、類似した嗜好や興味を持つ近隣ユーザを検索する。取得された近傍ユーザーの集合により、システムはターゲットユーザーの興味を予測し、レコメンデーションを生成することができる。
- Amazonによって導入されたアイテムベースCF(I2I)は、推薦システムのための協調フィルタリングモデルとしてよく知られている。これは、興味のあるアイテムはスコアの高いアイテムと類似していなければならないという仮定に基づき、ユーザーの代わりにアイテム間の類似度を計算する。
ユーザベースのCFは、ユーザ数が一定以上になると、計算時間が法外に長くなる可能性がある。このような製品の特性を考慮し、I2I CFを採用することにしました。楽曲に関するメタデータをあまり持っていないため、楽曲そのものを扱い、楽曲から特徴ベクトル(エンベッディング)を抽出する必要があります。我々のアプローチは、これらの楽曲をMFC(mel-frequency cepstrum)に変換し、楽曲の特徴埋め込みを抽出するために畳み込みニューラルネットワーク(CNN)を設計し、埋め込み類似性検索によって音楽推薦を行うことである。
埋め込み類似度検索エンジンの選択
特徴ベクトルが得られたところで、残された課題は、大量のベクトルの中から、目的のベクトルと類似したベクトルをどのように検索するかである。埋め込み類似度検索エンジンは、FaissとMilvusで迷いました。Milvusに気づいたのは、2019年11月にGitHubのトレンドリポジトリを見ていたときです。プロジェクトを見てみると、その抽象的なAPIに魅力を感じました。(当時はv0.5.x、現在はv0.10.2)。
我々はMilvusをFaissよりも気に入っている。一方では、Faissを使ったことがあるので、新しいものを試したいと思っています。一方、Milvusと比べると、Faissはより基礎的なライブラリであるため、使い勝手があまりよくない。Milvusについて学ぶにつれ、最終的にMilvusを採用することに決めたのは、その2つの大きな特徴による:
- Milvusは非常に使いやすい。Milvusは非常に使いやすい。Dockerイメージを引っ張ってきて、自分のシナリオに基づいてパラメータを更新するだけでいい。
- より多くのインデックスをサポートし、詳細なサポート・ドキュメントがある。
一言で言えば、Milvusはユーザーにとって非常に使いやすく、ドキュメントも非常に詳しい。何か問題が発生した場合、大抵はドキュメンテーションで解決策を見つけることができますが、そうでなければ、いつでもMilvusコミュニティからサポートを受けることができます。
Milvus クラスタサービス ☸️ ⏩.
機能ベクトル検索エンジンとしてMilvusを使用することを決定した後、開発(DEV)環境にスタンドアロンノードを設定しました。このノードは数日間順調に稼動していたので、工場受入テスト(FAT)環境でテストを実行することを計画しました。本番環境でスタンドアロン・ノードがクラッシュすると、サービス全体が利用できなくなる。したがって、可用性の高い検索サービスを展開する必要がある。
Milvusはクラスタ・シャーディング・ミドルウェアであるMishardsと、コンフィギュレーション用のMilvus-Helmの両方を提供している。Milvusクラスタサービスをデプロイするプロセスは簡単だ。いくつかのパラメータを更新し、Kubernetesにデプロイするためにパックするだけだ。Milvusのドキュメントにある以下の図は、Mishardsがどのように動作するかを示している:
1-how-mishards-works-in-milvus-documentation.png。
Mishardsは、上流からのリクエストを分割したサブモジュールにカスケードダウンし、サブサービスの結果を収集して上流に返す。Mishardsベースのクラスタソリューションの全体的なアーキテクチャを以下に示します:
2-mishards-based-cluster-solution-architecture.jpg
公式ドキュメントではMishardsについてわかりやすく紹介しています。興味のある方はMishardsを参照してください。
私たちの音楽レコメンダー・システムでは、Kubernetesに書き込み可能なノード1台、読み取り専用ノード2台、Milvus-Helmを使ってMishardsミドルウェアインスタンス1台をデプロイした。しばらくFAT環境でサービスが安定稼働した後、本番環境にデプロイした。今のところ安定している。
🎧 I2I音楽レコメンデーション🎶。
前述したように、抽出した既存楽曲のエンベッディングを用いて、WanyinのI2I音楽推薦システムを構築しました。まず、ユーザがアップロードした新曲のボーカルとBGMを分離(トラック分離)し、BGMの埋め込みデータを曲の特徴表現として抽出しました。これは、オリジナル曲のカバーバージョンの選別にも役立つ。次に、これらの埋め込みデータをMilvusに格納し、ユーザが聴いた曲を元に類似曲を検索し、検索された曲を並べ替え、おすすめ音楽を生成する。その実装プロセスを以下に示す:
3-music-recommender-system-implementation.png
重複曲フィルター
Milvusを使用するもう一つのシナリオは、重複曲フィルタリングである。一部のユーザーは同じ曲やクリップを何度もアップロードしており、これらの重複した曲が推薦リストに表示される可能性がある。つまり、前処理なしで推薦を生成することは、ユーザーエクスペリエンスに影響を与えることになる。そのため、前処理によって重複する曲を見つけ出し、同じリストに表示されないようにする必要がある。
Milvusを使用するもう一つのシナリオは、重複曲のフィルタリングである。同じ曲やクリップを何度もアップロードするユーザーがおり、重複した曲が推薦リストに表示される可能性がある。つまり、前処理なしで推薦を生成することは、ユーザーエクスペリエンスに影響を与えることになる。そのため、前処理によって重複する曲を見つけ出し、同じリストに表示されないようにする必要がある。
前述のシナリオと同様に、類似した特徴ベクトルを検索することによって、重複曲フィルタリングを実装した。まず、ボーカルとBGMを分離し、Milvusを用いて類似曲を検索した。重複曲のフィルタリングを正確に行うため、対象曲と類似曲の音声指紋を抽出し(Echoprint、Chromaprint等の技術を使用)、対象曲の音声指紋と類似曲の各指紋の類似度を算出した。類似度が閾値を超えた場合、その曲をターゲット曲の複製と定義する。オーディオフィンガープリントマッチングのプロセスは重複曲のフィルタリングをより正確にしますが、時間もかかります。そのため、膨大な音楽ライブラリの楽曲をフィルタリングする場合、その前段階としてMilvusを使って重複候補曲をフィルタリングする。
4-using-milvus-filter-songs-music-recommender-duplicates.png
Wanyinの膨大な音楽ライブラリにI2I推薦システムを実装するために、私たちのアプローチは、曲の埋め込みを特徴として抽出し、ターゲット曲の埋め込みと類似した埋め込みを呼び出し、その結果をソートして並べ替え、ユーザーへの推薦リストを生成することである。リアルタイム・レコメンデーションを実現するため、特徴ベクトル類似検索エンジンとして、FaissよりもMilvusを選択した。また、重複曲フィルタにもMilvusを採用し、ユーザーエクスペリエンスと効率を向上させています。
和音アプリ🎶をダウンロードしてお試しください。(注:すべてのアプリストアで利用できるとは限りません。)
📝 著者
Jason, Algorithm Engineer at Stepbeats Shiyu Chen, Data Engineer at Zilliz
📚 参考文献:
Mishards Docs: https://milvus.io/docs/v0.10.2/mishards.md Mishards: https://github.com/milvus-io/milvus/tree/master/shards Milvus-Helm: https://github.com/milvus-io/milvus-helm/tree/master/charts/milvus
- Milvus クラスタサービス ☸️ ⏩.
- 🎧 I2I音楽レコメンデーション🎶。
- 重複曲フィルター
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word