Redisは最近、ベクトル類似性のために設計されたデータ型であり、AIアプリケーションのための新しいオプションであるVector Setの追加を発表した。この新しいデータ型は、Redisの生みの親であるSalvatore Sanfilippo氏(別名「antirez」)がRedisに復帰して以来、初めての大きな貢献となる。
Vector SetsはSorted Setsに似た新しいデータ型だが、スコアの代わりに文字列要素がベクトルに関連付けられており、アイテムを追加し、追加されたアイテムの中から指定されたベクトルにもっとも似ているサブセットを取り出すことができる。フィルター検索機能もサポートされており、ベクトルの類似性とスカラーのフィルターを同時に行うことができる。Sanfilippo氏はブログでこう説明している。
新しいデータ構造の目標は、簡潔に言えば、スコアとしてスカラーを持つのではなく、ベクトルを持つ「セットに似た」データ型を作成することです。Redisが実装している抽象的なデータ構造の特性以外には何も気にすることなく、Redisの方法で要素を追加したり削除したり、指定されたクエリーベクトル(またはすでにセットに入っている要素に関連するベクトル)に似た要素を探すことができます。
Vector Setsは、HNSWデータ構造のhnsw.c
実装をベースにしており、スピードと機能性のために拡張が加えられている。RedisのCEOであるRowan Trollope氏は、Sanfilippo氏の貢献を賞賛している:
彼の専門知識は、最小限の複雑さで高性能なソリューションを提供するというRedisの理念を反映し、シンプルかつ直感的なAPIの作成につながりました。
ベクターデータベースは、生成AIを基盤とするアプリケーションにとって、LLM(RAG)のコンテキストを豊かにするために意味的に関連する情報を取得するために不可欠である。その他の使用例としては、チャットボット、レコメンダーシステム、顔認識のためのセマンティックキャッシングがある。RedisのプロダクトマネージャーであるMirko Ortensi氏は、別記事で顔認識にVector Setsを使う方法を説明している。Ortensi氏はこう書いている:
顔認識はベクトルがすべてです。特殊な埋め込みモデルを使って既知の顔をモデル化し、それをRedisに保存し、データベースに保存されたベクトルに対してテストIDのベクトル検索することで顔認識をするのです。
Sanfilippo氏はこう付け加える:
ベクトル類似性を実装するための基本的な要件は、HNSW(hnsw.cで実装を見ることができる)をゼロから再実装することだと考えました。なぜなら、HNSWは私のコアとなるデータ構造であり、GitHubから適当なコードを取ってきて満足したくはなかったからです。
Sanfilippo氏は、高速性能に焦点を当て、HNSWの修正だけでなく、すべてのベクトル類似性リクエストのマルチスレッド化、8ビットとバイナリ量子化の両方のサポートを導入した。彼は、彼の実装における主な違いを強調している:
Vector Setsのもっとも興味深い部分は、データモデルとそれをサポートするAPIです。多くのデータベースはベクトル類似度をインデックスの一種として提案しているが、それはRedisであり、Redisにおけるものはデータ構造であり、今回も例外ではないのです。
Redisの新機能はVector Setsだけではない:AIアプリやエージェントのためのセマンティックキャッシュサービスであるLangCacheは、LLMの応答をキャッシュすることで、コストがかかり、待ち時間が発生しやすいLLMへの呼び出しを減らすように設計されている。
Vector Setsは、RSALv2またはSSPLv1ライセンスのもと、Redis 8 RC1でプレビュー利用できる。