Slide 1

Slide 1 text

Solrで始める ベクトル検索 さしみもち 2023/4/27 【オンライン】エンジニア達の「完全に理解した」Talk #40

Slide 2

Slide 2 text

自己紹介 2 さしみもち @Sashimimochi343 普段は、検索エンジンを触ったり、 自然言語処理をやっている人です 最近は、月1ペースでTRPGのセッ ションを開いています その関係もあって、StableDiffusion でキャラ作成するにハマっています

Slide 3

Slide 3 text

ベクトル検索を使えば... 3

Slide 4

Slide 4 text

ベクトル検索を使えば... 4 高精度なテキスト toテキスト検索

Slide 5

Slide 5 text

ベクトル検索を使えば... 5 テキストto画像 検索 高精度なテキスト toテキスト検索

Slide 6

Slide 6 text

ベクトル検索を使えば... 6 画像to画像検索 テキストto画像 検索 高精度なテキスト toテキスト検索

Slide 7

Slide 7 text

Solr9でついにベクトル検索が可能に! 7 ベクトル検索 (゚∀゚)キタコレ!! https://solr.apache.org/guide/solr/9_0/upgrade-notes/major-changes-in-solr-9.html

Slide 8

Slide 8 text

Solrで始めるベクトル検索 8

Slide 9

Slide 9 text

Solrで始めるベクトル検索 9 ??? ???

Slide 10

Slide 10 text

Solrで始めるベクトル検索 10 ??? ???

Slide 11

Slide 11 text

Solrとは 11 全文検索エンジンの1つです

Slide 12

Slide 12 text

Solrとは 12 全文検索エンジンの1つです ????? ?????

Slide 13

Slide 13 text

全文検索ってなに? ● 文字通り、検索対象のドキュメントを全てスキャン して該当するドキュメントを探し出す ● 入力文字(クエリ)とのキーワードマッチで検索する 13 最 初 か ら 最 後 ま で ス キ ャ ン 全文検索に特化した検索アルゴリズムを持ち、 高速に検索を行えるシステムが 全文検索エンジン

Slide 14

Slide 14 text

転置インデックス 14 1. I have a bag. 2. I play tennis. 3. I eat rice. word Doc ID I 1,2,3 have 1 a 1 bag 1 play 2 tennis 2 eat 3 rice 3 ● どのドキュメントにどの単語が含まれているかを 記した表 ● 本の索引のようなもの ● 単語から高速に該当ドキュメントを見つけ出せる

Slide 15

Slide 15 text

詳しくは... 【オンライン】完全に理解した人達の「完全に理解したTalk」 #6 - connpass https://easy2.connpass.com/event/178429/ 15

Slide 16

Slide 16 text

Solrとは 16 ● Java製の全文検索エンジンの1つ ● Apacheコミュニティ保有のOSS ● Apache License 2.0のため、誰でも無料で商用利用も可 ● OSSでありながら商用検索エンジンを凌駕する豊富な検索 機能と高い耐障害性を備えている ● 国内外問わず多くの企業で採用されている https://solr.apache.org/

Slide 17

Slide 17 text

Solrで始めるベクトル検索 17 全文検索 エンジンの1つ ???

Slide 18

Slide 18 text

ベクトル検索とは 18 ● 数字配列(ベクトル)を使った検索 ● ベクトルの距離が近ければ類似アイテム CPU Memory(GB) Disk(GB) GPU(GB) 4 8 512 8 あるパソコンに似たパソコンを探したい

Slide 19

Slide 19 text

ベクトル検索の例 19 https://corp.zozo.com/news/20190826-8586/ https://techconference.yahoo.co.jp/2022/ 究極的にはベクトル化できれば「音楽」、「動画」、「香り」何でも比較可能

Slide 20

Slide 20 text

ベクトル検索の距離 20 ● 代表的なものはコサイン類似度 ● 2つのベクトルの間の角度で表す ● -1~1で1に近いほど似ている

Slide 21

Slide 21 text

ベクトル検索と全文検索の違い 21 全文検索 【検索方法】 ● ベクトルの類似性マッチ ● マルチメディア間で検索可能 ● 完全一致しなくても似ている かが判別可能 【検索アルゴリズム】 ● ベクトル間で類似度計算 ● 逐次類似度計算をすると非常 に高コスト 【検索方法】 ● キーワードマッチ ● 何でヒットしたかがわかりやすい ● 表記がちょっとでも違うとヒット しない 【検索アルゴリズム】 ● 転置インデックス ● 大量のドキュメントを高速に検索 が可能 ベクトル検索

Slide 22

Slide 22 text

ベクトル検索と全文検索の違い 22 全文検索 【検索方法】 ● ベクトルの類似性マッチ ● マルチメディア間で検索可能 ● 完全一致しなくても似ている かが判別可能 【検索アルゴリズム】 ● ベクトル間で類似度計算 ● 逐次類似度計算をすると非常 に高コスト 【検索方法】 ● キーワードマッチ ● 何でヒットしたかがわかりやすい ● 表記がちょっとでも違うとヒット しない 【検索アルゴリズム】 ● 転置インデックス ● 大量のドキュメントを高速に検索 が可能 ベクトル検索 検索アルゴリズムが全然違う これが長らく全文検索エンジンと融合できなかった理由 独自にベクトル検索ライブラリが発展 ex. annoy, faiss, etc.

Slide 23

Slide 23 text

近似最近傍探索 23 いろいろやり方はあるが、あらかじめ検索候補を ざっくり絞り込んで、その中でだけ真面目に類似 度計算する 計算量を減らしつつ、かなり全探索に近い精度で 類似ベクトルを見つけられる https://erikbern.com/2015/10/01/nearest-neighbors-and-vector-models-part-2-how-to-s earch-in-high-dimensional-spaces.html

Slide 24

Slide 24 text

Solrで始めるベクトル検索 24 数値配列を使って画像検索 などの新しい検索ができる 全文検索 エンジンの1つ

Slide 25

Slide 25 text

ベクトル検索のためのSolr定義 25 この2行足すだけ managed-shema

Slide 26

Slide 26 text

ベクトル検索のためのインデックスデータ 26 index.json ● 配列形式でインデックスを作るだけ ● 次元数はmanaged-shemaで定義し た数に合わせる

Slide 27

Slide 27 text

ベクトル検索のためのリクエストクエリ 27 ● 配列形式でベクトルをクエリ に渡して検索するだけ ● 類似度が高い順に検索結果が 返ってくる

Slide 28

Slide 28 text

ベクトル検索の応用例 28 キーワードマッチしなくても それっぽい文章がちゃんと検索出来た!! テキストtoテキスト検索

Slide 29

Slide 29 text

ベクトル検索の応用例 29 画像to画像検索 テキストto画像検索 全文検索ではできな かったテキスト以外の 検索も可能に!!

Slide 30

Slide 30 text

実は使い方や使用感のドキュメントが全然なくて... 30 公式ドキュメント以外にまともなものが見つからなかったので自分で書きました

Slide 31

Slide 31 text

技術書典14にてベクトル検索本を頒布します!! 31 予定です ● 第1章:全文検索とApache Solr ● 第2章:全文検索エンジンとしてSolrを動かす ● 第3章:ベクトル検索の理論とそれを支える要 素技術 ● 第4章:Solr上でベクトル検索を動かす ● 第5章:実データを使ってベクトル検索をする 現在、絶賛鋭意執筆中!

Slide 32

Slide 32 text

まとめ 32 ● Solrは全文検索エンジンの1つ ● 従来のキーワードベースの全文検索と違って、ベクトル検索は 数値を使って検索する ● ベクトル化できれば、テキスト、画像、音声、動画何でもOK ● Solr上でなら全文検索とベクトル検索を両立して、全く新しい 検索体験を作れる! みなさんも Let’s ベクトル検索!!

Slide 33

Slide 33 text

ChatGPTとの関係 33 Q. ChatGPTでもベクトル化できるって聞いたけど A. はい、できます。すでにやってみた報告はちらほら ● オレオレChatGPTのかんたん実装 (Google検索 + ベクトル検索) https://zenn.dev/tfutada/articles/b4062347cb4769 ● ChatGPT_APIのEmbedding_カスタマイズ入門 - Speaker Deck https://speakerdeck.com/ryoheiigushi/chatgpt-apinoembedding-kasutamai suru-men ただ、Solrとは相性が悪いです... https://platform.openai.com/docs/guides/embeddings/what-are-embeddings Solrの許容次元数1024 を超えている

Slide 34

Slide 34 text

その他参考資料 ● Solr9 から導入されたベクトル検索ってどうなのよ? - Qiita https://qiita.com/Sashimimochi/items/b52e9ea80f54d7e451ce ● Solr9 から導入されたベクトル検索ってどんな感じ? https://zenn.dev/sashimimochi/articles/1957974d64d571 ● rinna/japanese-clip-cit-b-16 https://huggingface.co/rinna/japanese-clip-vit-b-16 ● フリー素材ぱくたそ www.pakutaso.com 34

Slide 35

Slide 35 text

使用したデータセット ● livedoorニュースコーパス https://www.rondhuit.com/download.html#news%20corpus ● 京都大学テキストコーパス https://nlp.ist.i.kyoto-u.ac.jp/index.php?%E4%BA%AC%E9%83%BD%E5 %A4%A7%E5%AD%A6%E3%83%86%E3%82%AD%E3%82%B9%E3%83%8 8%E3%82%B3%E3%83%BC%E3%83%91%E3%82%B9 ● 京都大学ウェブ文書リードコーパス https://nlp.ist.i.kyoto-u.ac.jp/index.php?KWDLC ● Food-101 https://data.vision.ee.ethz.ch/cvl/datasets_extra/food-101/ 35