Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Start Vector Search with Solr
Search
Sashimimochi
April 27, 2023
Technology
1
1.1k
Start Vector Search with Solr
エンジニア達の「完全に理解した」Talk #40の登壇資料です。
https://easy2.connpass.com/event/279632/
Sashimimochi
April 27, 2023
Tweet
Share
More Decks by Sashimimochi
See All by Sashimimochi
My AI Copilot for writing
sashimimochi
1
150
GraphRAG: What I Thought I Knew (But Didn’t)
sashimimochi
1
590
Search Engineer diving into Kubernetes
sashimimochi
1
200
Using GPTs from Local by Dify
sashimimochi
1
820
Max out Local LLM in Challenging Environments
sashimimochi
3
540
Search Engine for Frontend Engineer
sashimimochi
0
220
Other Decks in Technology
See All in Technology
Azure Well-Architected Framework入門
tomokusaba
1
130
SOTA競争から人間を超える画像認識へ
shinya7y
0
550
AI-Readyを目指した非構造化データのメダリオンアーキテクチャ
r_miura
1
330
OSSで50の競合と戦うためにやったこと
yamadashy
3
990
re:Inventに行くまでにやっておきたいこと
nagisa53
0
300
OTEPsで知るOpenTelemetryの未来 / Observability Conference Tokyo 2025
arthur1
0
260
SQLAlchemy の select(User).where(User.id =="123") を理解してみる/sqlalchemy deep dive
3l4l5
3
460
AI時代、“平均値”ではいられない
uhyo
8
2.6k
プレイドのユニークな技術とインターンのリアル
plaidtech
PRO
1
370
Amazon Athena で JSON・Parquet・Iceberg のデータを検索し、性能を比較してみた
shigeruoda
1
110
ヘンリー会社紹介資料(エンジニア向け) / company deck for engineer
henryofficial
0
390
コンパウンド組織のCRE #cre_meetup
layerx
PRO
1
270
Featured
See All Featured
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.7k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
34
2.3k
Docker and Python
trallard
46
3.6k
Code Review Best Practice
trishagee
72
19k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.2k
Testing 201, or: Great Expectations
jmmastey
45
7.7k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
130k
GitHub's CSS Performance
jonrohan
1032
470k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
253
22k
Transcript
Solrで始める ベクトル検索 さしみもち 2023/4/27 【オンライン】エンジニア達の「完全に理解した」Talk #40
自己紹介 2 さしみもち @Sashimimochi343 普段は、検索エンジンを触ったり、 自然言語処理をやっている人です 最近は、月1ペースでTRPGのセッ ションを開いています その関係もあって、StableDiffusion でキャラ作成するにハマっています
ベクトル検索を使えば... 3
ベクトル検索を使えば... 4 高精度なテキスト toテキスト検索
ベクトル検索を使えば... 5 テキストto画像 検索 高精度なテキスト toテキスト検索
ベクトル検索を使えば... 6 画像to画像検索 テキストto画像 検索 高精度なテキスト toテキスト検索
Solr9でついにベクトル検索が可能に! 7 ベクトル検索 (゚∀゚)キタコレ!! https://solr.apache.org/guide/solr/9_0/upgrade-notes/major-changes-in-solr-9.html
Solrで始めるベクトル検索 8
Solrで始めるベクトル検索 9 ??? ???
Solrで始めるベクトル検索 10 ??? ???
Solrとは 11 全文検索エンジンの1つです
Solrとは 12 全文検索エンジンの1つです ????? ?????
全文検索ってなに? • 文字通り、検索対象のドキュメントを全てスキャン して該当するドキュメントを探し出す • 入力文字(クエリ)とのキーワードマッチで検索する 13 最 初 か
ら 最 後 ま で ス キ ャ ン 全文検索に特化した検索アルゴリズムを持ち、 高速に検索を行えるシステムが 全文検索エンジン
転置インデックス 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 • どのドキュメントにどの単語が含まれているかを 記した表 • 本の索引のようなもの • 単語から高速に該当ドキュメントを見つけ出せる
詳しくは... 【オンライン】完全に理解した人達の「完全に理解したTalk」 #6 - connpass https://easy2.connpass.com/event/178429/ 15
Solrとは 16 • Java製の全文検索エンジンの1つ • Apacheコミュニティ保有のOSS • Apache License 2.0のため、誰でも無料で商用利用も可
• OSSでありながら商用検索エンジンを凌駕する豊富な検索 機能と高い耐障害性を備えている • 国内外問わず多くの企業で採用されている https://solr.apache.org/
Solrで始めるベクトル検索 17 全文検索 エンジンの1つ ???
ベクトル検索とは 18 • 数字配列(ベクトル)を使った検索 • ベクトルの距離が近ければ類似アイテム CPU Memory(GB) Disk(GB) GPU(GB)
4 8 512 8 あるパソコンに似たパソコンを探したい
ベクトル検索の例 19 https://corp.zozo.com/news/20190826-8586/ https://techconference.yahoo.co.jp/2022/ 究極的にはベクトル化できれば「音楽」、「動画」、「香り」何でも比較可能
ベクトル検索の距離 20 • 代表的なものはコサイン類似度 • 2つのベクトルの間の角度で表す • -1~1で1に近いほど似ている
ベクトル検索と全文検索の違い 21 全文検索 【検索方法】 • ベクトルの類似性マッチ • マルチメディア間で検索可能 • 完全一致しなくても似ている
かが判別可能 【検索アルゴリズム】 • ベクトル間で類似度計算 • 逐次類似度計算をすると非常 に高コスト 【検索方法】 • キーワードマッチ • 何でヒットしたかがわかりやすい • 表記がちょっとでも違うとヒット しない 【検索アルゴリズム】 • 転置インデックス • 大量のドキュメントを高速に検索 が可能 ベクトル検索
ベクトル検索と全文検索の違い 22 全文検索 【検索方法】 • ベクトルの類似性マッチ • マルチメディア間で検索可能 • 完全一致しなくても似ている
かが判別可能 【検索アルゴリズム】 • ベクトル間で類似度計算 • 逐次類似度計算をすると非常 に高コスト 【検索方法】 • キーワードマッチ • 何でヒットしたかがわかりやすい • 表記がちょっとでも違うとヒット しない 【検索アルゴリズム】 • 転置インデックス • 大量のドキュメントを高速に検索 が可能 ベクトル検索 検索アルゴリズムが全然違う これが長らく全文検索エンジンと融合できなかった理由 独自にベクトル検索ライブラリが発展 ex. annoy, faiss, etc.
近似最近傍探索 23 いろいろやり方はあるが、あらかじめ検索候補を ざっくり絞り込んで、その中でだけ真面目に類似 度計算する 計算量を減らしつつ、かなり全探索に近い精度で 類似ベクトルを見つけられる https://erikbern.com/2015/10/01/nearest-neighbors-and-vector-models-part-2-how-to-s earch-in-high-dimensional-spaces.html
Solrで始めるベクトル検索 24 数値配列を使って画像検索 などの新しい検索ができる 全文検索 エンジンの1つ
ベクトル検索のためのSolr定義 25 この2行足すだけ managed-shema
ベクトル検索のためのインデックスデータ 26 index.json • 配列形式でインデックスを作るだけ • 次元数はmanaged-shemaで定義し た数に合わせる
ベクトル検索のためのリクエストクエリ 27 • 配列形式でベクトルをクエリ に渡して検索するだけ • 類似度が高い順に検索結果が 返ってくる
ベクトル検索の応用例 28 キーワードマッチしなくても それっぽい文章がちゃんと検索出来た!! テキストtoテキスト検索
ベクトル検索の応用例 29 画像to画像検索 テキストto画像検索 全文検索ではできな かったテキスト以外の 検索も可能に!!
実は使い方や使用感のドキュメントが全然なくて... 30 公式ドキュメント以外にまともなものが見つからなかったので自分で書きました
技術書典14にてベクトル検索本を頒布します!! 31 予定です • 第1章:全文検索とApache Solr • 第2章:全文検索エンジンとしてSolrを動かす • 第3章:ベクトル検索の理論とそれを支える要
素技術 • 第4章:Solr上でベクトル検索を動かす • 第5章:実データを使ってベクトル検索をする 現在、絶賛鋭意執筆中!
まとめ 32 • Solrは全文検索エンジンの1つ • 従来のキーワードベースの全文検索と違って、ベクトル検索は 数値を使って検索する • ベクトル化できれば、テキスト、画像、音声、動画何でもOK •
Solr上でなら全文検索とベクトル検索を両立して、全く新しい 検索体験を作れる! みなさんも Let’s ベクトル検索!!
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 を超えている
その他参考資料 • 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
使用したデータセット • 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