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
Rubyで動かす検索機能
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
matsudai
September 12, 2025
170
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Rubyで動かす検索機能
engineer unite meetup vol.2
https://enun.connpass.com/event/367436/
matsudai
September 12, 2025
More Decks by matsudai
See All by matsudai
Rubyでゲームを作りたい
matsudai
0
15
SmTでRaspberry Pi Picoを動かす
matsudai
0
62
Ruby × 車 (その後) ~課題:オフライン対応~
matsudai
0
65
Ruby × 車 ~ 愛車のデータを取得せよ! ~
matsudai
2
270
流行れ! AI Tuber!
matsudai
0
150
Islands on Rails !!
matsudai
0
69
ruby.wasmが簡単にビルドできるようになっていた
matsudai
0
180
Featured
See All Featured
The Mindset for Success: Future Career Progression
greggifford
PRO
0
360
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.2k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Making Projects Easy
brettharned
120
6.7k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
240
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
230
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
340
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
1.7k
Optimising Largest Contentful Paint
csswizardry
37
3.7k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
Transcript
Rubyで動かす検索機能 ONNXモデルによるベクトル検索の実装とRAGへの応用
自己紹介 名前: matsudai / ふじはら 所属: R&D室 係長 松江でソフトウェアエンジニアをやっています。 Ruby、React、Javaなどを利用した製造業向け Webシステム開発など。
趣味:ゲーム、プログラミング。 リポジトリ: https://github.com/matsudai/enun_vol2_sample
もくじ • 背景 • 検索手法 ◦ RAGのステップ ◦ キーワード検索とセマンティック検索 ◦
セマンティック検索の実装 • デモ • まとめ リポジトリ: https://github.com/matsudai/enun_vol2_sample
背景 • Google検索に「AI による概要」が追加されるなどRAGが普及。 ◦ RAG (Retrieval Augmented Generation) …
検索結果からの生成。 • 大手クラウドからは文書を登録→検索で使える簡単なサービスの提供。 ◦ Google Cloudでは「Vertex AI Search」、AWSでは「Knowledge bases for Amazon Bedrock」など。 → 仕組みを知りたいので触ってみる!
検索手法 ① RAGのステップ 生成AIは一般的な知識を持っているため、必要なデータの検索が重要。 → 膨大な量の業務データから、生成に必要なものだけ取得する🤔 検索 生成 (OpenAI APIなど)
入力 DB ファイル
検索手法 ② キーワード検索とセマンティック検索 • キーワード検索: いわゆる全文検索・タグ検索など。 ◦ キーワードを抽出して突合する。 ◦ 分かち書き(文節での区切り)や正規化(半角・全角を揃える)など古くから研究。
例:「これはペンです」 → 「これ/は/ペン/です」 → 「ペン」で検索可能。 • セマンティック検索: ◦ 意図・文脈による突合。 ◦ あいまいな表現・キーワードが未記載でも検索できる。 例:「これはペンです」「紙に書けます」が近い文脈。 ◦ → 今回はこちらを実装してみる!
検索手法 ③ セマンティック検索の実装 • メジャーな手法は埋め込み検索: ◦ 1)ベクトル化: 文章をトークン(単語)に分割 → トークンの並びをベクトルで表現。
◦ 2)検索: ベクトルの類似度(距離など)で近いものを判定。 • 実装方針: ◦ 1)検索対象の情報を事前にベクトル化 「これはペンです」 [1, 26, 8, 92, ...] [0.1, 0.6, 0.8, …] 「目玉焼きを食べる」 [13, 9, 5, 32, ...] [0.3, 0.2, 0.6, …] ◦ 2)ユーザ入力(検索クエリ)をベクトル化して、上記と突合 「紙に書くもの」 [9, 58, 6, 44, ...] [0.2, 0.5, 0.9, …] トークナイザ DB ファイル 入力 埋め込みモデル トークナイザ 埋め込みモデル 距離計算
検索手法 ③ セマンティック検索の実装 • 技術選定: ◦ トークナイザ/埋め込みモデル: infloat/multilingual-e5-small ▪ Microsoftが開発した多言語対応の埋め込みモデル。
▪ ランタイムに ONNX Runtime Ruby を利用。 ※ Microsoftが主導して作成された、オープンな機械学習モデルのフォーマット。 Python以外での利用が難しいモデルを変換できる。 ◦ DB: SQLite (拡張に sqlite-vec) ▪ ローカル環境でDB+ベクトルの類似度計算が可能。 トークナイザ DB ファイル or ユーザ入力 埋め込みモデル
検索手法 ③ セマンティック検索の実装 • 実装: ◦ 入力をトークンに変換します。 例: 「これはペンです」 → [1,
26, 8, 92, ...] トークナイザ DB ファイル or ユーザ入力 埋め込みモデル 検索!
検索手法 ③ セマンティック検索の実装 • 実装: ◦ 埋め込みを生成します。 ◦ 正確なベクトルを計算するため 「Average
pooling」処理をします。 Pythonだと自動でやってくれるのですが Rubyの場合は自前実装です。 (細かいことは気にしないで OK!) 例: [1, 26, 8, 92, ...] → [0.1, 0.6, 0.8, …] トークナイザ DB ファイル or ユーザ入力 埋め込みモデル 検索!
検索手法 ③ セマンティック検索の実装 • 実装: ◦ 埋め込みを生成します。 ◦ 正確なベクトルを計算するため 「Average
pooling」処理をします。 Pythonだと自動でやってくれるのですが Rubyの場合は自前実装です。 (細かいことは気にしないで OK!) 例: [1, 26, 8, 92, ...] → [0.1, 0.6, 0.8, …] トークナイザ DB ファイル or ユーザ入力 埋め込みモデル 検索!
検索手法 ③ セマンティック検索の実装 • 実装: ◦ SQLiteにベクトルを保存します。 ※ SQLite vec
拡張で使える vec_f32() 関数を利用します。 トークナイザ DB ファイル or ユーザ入力 埋め込みモデル 検索!
検索手法 ③ セマンティック検索の実装 • 実装: ◦ ユーザ入力も同様に、ベクトル化します。 ◦ SQL vec
拡張の構文 MATCH にて、近いベクトルを 持つテキストを検索します。 トークナイザ DB ファイル or ユーザ入力 埋め込みモデル 検索!
検索手法 ③ セマンティック検索の実装 • 実装: ◦ ユーザ入力も同様に、ベクトル化します。 ◦ DBから、近いベクトルを持つテキストを検索します。 ※
SQL vec 拡張の構文 MATCH を利用します。 Happy End … トークナイザ DB ファイル or ユーザ入力 埋め込みモデル 検索!
デモ リポジトリ: https://github.com/matsudai/enun_vol2_sample
• RAGにおいてより業務に近い「検索」の部分を自分で実装してみた。 ◦ 実装自体はそこまで難しくなく、モデルの精度やコスパが大事。 • ローカルのモデルはクラウドのものとは違うユースケースになりそう。 ◦ Pros. : 高速・無料・機密性
◦ Cons. : 精度・PC資源(メモリ・CPU・ストレージ) ◦ → 定額制のAIエージェントであれば試行回数が稼げるので良さそう? ▪ 例: AI小説の執筆、仕様書を考慮したコーディングなど。 まとめ リポジトリ: https://github.com/matsudai/enun_vol2_sample