Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
20241015 Dojo ベクトルデータベース入門
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Mika
October 16, 2024
Business
820
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
20241015 Dojo ベクトルデータベース入門
Mika
October 16, 2024
Other Decks in Business
See All in Business
PdMからみた EMの役割の変化 / When EM Meets PdM
hirokiyamamoto14
PRO
1
180
アッテル会社紹介資料/culture deck
attelu
11
17k
ログラス会社紹介資料 新卒採用 ビジネス職[経営幹部候補]/ Loglass Company Deck
loglass2019
2
25k
Corporate Story (GA technologies Co., Ltd.)
gatechnologies
0
1.1k
なぜデベロッパーアドボカシーが必要なのか?
taiponrock
PRO
0
170
Hubble Behavior Principles
hubbleinc
0
140
会社案内資料
auditech2022
0
110
エスキュービズム 会社紹介資料
human_resources
2
27k
50代で初転職した話
yda
15
23k
より使われるサービスに。行政プロダクトのグロース戦略
middleokada
2
1.4k
プロジェクトのリズムを 体に取り込む
kozotaira
0
230
LW_brochure_engineer
lincwellhr
1
45k
Featured
See All Featured
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
730
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
700
Agile that works and the tools we love
rasmusluckow
331
22k
Believing is Seeing
oripsolob
1
220
Technical Leadership for Architectural Decision Making
baasie
3
560
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
450
Making Projects Easy
brettharned
120
6.7k
Code Review Best Practice
trishagee
74
20k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
230
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.7k
GitHub's CSS Performance
jonrohan
1033
470k
Transcript
日本アイ・ビー・エム株式会社 テクノロジー事業本部 カスタマーサクセス カスタマーサクセスマネージャー 船渡 美佳 小野 祐作 ベクトルデータベース入門
写真撮影 動画撮影 資料公開 SNS拡散 ◯ ◯ ◯ ◯ #IBMDojo セッション受講における注意事項
セッション中に迷惑行為が発覚した場合は、強制退出、セッション中止などの措置を講じます
• 本セッションの情報は現時点で最新のものです • 新入社員のエンジニアリングスキル習得のための研修の一環です • 先輩社員に内容を確認しておりますが、誤った表現があるかもしれません • その際はチャットにてご指摘ください • 確認し、資料等を修正いたします
セッション受講における注意事項
名前:船渡 美佳(Mika Funato) 所属:日本アイ・ビー・エム株式会社 テクノロジー事業本部 カスタマーサクセス 経歴: 大学院 統計学を専攻 2024年4月
新卒入社 4月-6月 営業研修 7月1日付で部署異動 7月-8月 異動先部署の研修 自己紹介
名前:小野 祐作(Yusaku Ono, Ph.D.) 所属:日本アイ・ビー・エム株式会社 テクノロジー事業本部 カスタマー・サクセス 経歴: 2010年:博士(理学)@理学 衛星リモートセンシングによる地球観測に関する研究
2010年:研究員@宇宙航空研究開発機構(JAXA/EORC) 2015年:助教@千葉大学(CEReS) 2016年:ITコンサルタント@コンサルティングファーム 2017年:データサイエンティスト@EY Japan 2018年:分析コンサルタント@ SAS Institute Japan 2020年:エキスパート→課長@舶用電気機器メーカー 2022年:カスタマー・サクセス・マネージャー@IBM Japan watsonxによるお客様のビジネス目標達成を支援中 自己紹介
ゴール • RAGを構築するうえで、 • ベクトルデータベースの選択肢 • 性能向上方法 を知るきっかけにしていただく! 対象 •
生成AIに興味のある初学者 このセッションについて
•RAGとは? •ベクトルデータベースとは? •ベクトルデータベースの比較 •ベクトルデータベースの実装紹介 目次
RAGとは?
さまざまなコンテンツを生成できるAIのこと 生成AIとは?
さまざまなコンテンツを生成できるAIのこと 生成AIとは? 大規模言語モデル LLM
生成AIとは? 生成AIってなに? 生成AIとは…
生成AIとは? IBMの就業規則を 教えて! わからないよ …
Demo watsonx.aiのチャットで 質問してみる
None
LLMによるテキスト生成に、外部情報の検索を組み合わせることで、 回答精度を向上させる技術のこと RAGとは? 〜Retrieval-Augmented Generation〜 +
RAGとは? 〜Retrieval-Augmented Generation〜 IBMの就業規則を 教えて! IBMの就業規則に 関する情報 IBMの就業規則 ① ②
③
RAGとは? 〜Retrieval-Augmented Generation〜 IBMの就業規則を 教えて! IBMの就業規則に 関する情報 IBMの就業規則 IBMの就業規則 を教えて!
IBMの就業規 則に関する情報 + IBMの就業規則は … ① ② ③ ④ ⑤
RAGとは? 〜Retrieval-Augmented Generation〜 ❶検索結果 ❷生成結果
RAGとは? 〜Retrieval-Augmented Generation〜 ❶検索結果 ❷生成結果
ベクトルデータベース とは?
ベクトルとは? • 大きさと方向で表される、量 • 数字の列 例えば… クッキー:(甘さ, 丸さ) = (10,
4) せんべい:(甘さ, 丸さ) = (1, 10) ドーナツ:(甘さ, 丸さ) = (10, 10) ベクトルとは?
ベクトルとは? • 大きさと方向で表される、量 • 数字の列 例えば… クッキー:(甘さ, 丸さ) = (10,
4) せんべい:(甘さ, 丸さ) = (1, 10) ドーナツ:(甘さ, 丸さ) = (10, 10) ベクトルとは? (10, 10) (10, 4) (1, 10) 甘さ 丸さ
保存形式: テキストを文字列(String)として扱う 検索方法: • キーワード検索 従来のデータベースとは? 従来のデータベース 船渡は鳥が好きです。
キーワード検索 従来のデータベース 船渡は鳥が好きです。 船渡は犬を飼っています。 船渡 鳥 田中は鳥が好きです。
保存形式: テキストをベクトルに変換 検索方法: • 類似性検索 • 似た画像、音声も検索できる ベクトルデータベースとは? ベクトルデータベース 船渡は鳥が好きです。
[0.47,-0.12,0.26,0.89,-0.71,…]
虎→[?????] テキストをベクトルに変換 単語→ベクトル表現 犬→[0.47, -0.12, 0.26, 0.89, -0.71, …] 猫→[0.46,
-0.10, 0.54, -0.31, 0.96, …] 子供 大人 飛行機 電車 車 馬 熊 狼 犬 猫 ※イメージです
テキストをベクトルに変換 単語→ベクトル表現 犬→[0.47, -0.12, 0.26, 0.89, -0.71, …] 猫→[0.46, -0.10,
0.54, -0.31, 0.96, …] 虎→[0.46, -0.15, 0.56, 0.31, 0.87, …] 子供 大人 飛行機 電車 車 馬 熊 狼 犬 猫 虎
類似性検索とは? (10, 10) (10, 4) (1, 10) 甘さ 丸さ ベーグル
= (9, 10)
ベクトルデータベースとは? 従来のデータベース ベクトルデータベース 特徴 従来のデータベース ベクトルデータベース 保存形式 文字列 ベクトルに変換 検索方法
キーワード検索 類似性検索
ベクトルデータベースとは? ◎メリット ×デメリット 類似性検索が可能 大きな計算リソースが必要 データの柔軟性 ベクトル変換時の モデル依存 ※モデル:テキストをベクトルに変換する際のルール(ex. 甘さ、丸さ)
https://ibm.biz/BdaYrz
ベクトルデータベース の比較
ベクトルデータベースの比較 • Elasticsearch: キーワード検索と類似性検索のどちらもサポートしている • Milvus: 類似性検索に特化していて、数百万から数十億のベクトルデータでも高速 に処理できる • Chroma:
軽量でシンプル。RAGなど生成AIのデータ検索に適している Elasticsearch Milvus Chroma Open source ◯ ◯ ◯ Cloud management ◯ ◯ ×
ベクトルデータベース の実装
• RAGを前提としたベクトルデータベースへのデータの • 追加(insert) • 検索(search) • 削除(delete) • 環境
• OS:macOS • Python 3.11.3 • Langchain • Embedding model:intfloat/multilingual-e5-large ベクトルデータベースの実装
使用するデータの紹介 • 生成AIに作成させた就業規程が 書かれたwordファイル • word2ページ分
使用するデータの紹介 • 検索検証用のQ&A
追加(insert)
from langchain_community.document_loaders.word_document import UnstructuredWordDocumentLoader from langchain_text_splitters.character import RecursiveCharacterTextSplitter from langchain_huggingface.embeddings
import HuggingFaceEmbeddings Insert 共通部分 loader = UnstructuredWordDocumentLoader(file_path=‘data/就業規程.docx’) data = loader.load() text_splitter = RecursiveCharacterTextSplitter(chunk_size=256,chunk_overlap=0) documents = text_splitter.split_documents(documents=data) パッケージ 読み込み ドキュメント 読み込み Chunkで分割
Chunkとは? • かたまりという意味 • テキストを特定の長さで分割 したもの • ベクトルデータベースでは、 チャンク単位でテキストが検 索される
from langchain_community.document_loaders.word_document import UnstructuredWordDocumentLoader from langchain_text_splitters.character import RecursiveCharacterTextSplitter from langchain_huggingface.embeddings
import HuggingFaceEmbeddings Insert 共通部分 loader = UnstructuredWordDocumentLoader(file_path=‘data/就業規程.docx’) data = loader.load() text_splitter = RecursiveCharacterTextSplitter(chunk_size=256,chunk_overlap=0) documents = text_splitter.split_documents(documents=data) model_name = ‘intfloat/multilingual-e5-large’ embedding = HuggingFaceEmbeddings(model_name=model_name) パッケージ 読み込み ドキュメント 読み込み Chunkで分割 モデル取得
Elasticsearch insert from elasticsearch import Elasticsearch from langchain_elasticsearch import ElasticsearchStore
vector_store = ElasticsearchStore.from_documents( documents=documents, embedding=embedding, index_name=”elastic“, es_connection=client ) client = Elasticsearch(hosts=<INPUR YOUR HOSTNAME>, ca_certs=<INPUT YOUR CA CERTIFICATES FILE>) Elasticsearchの パッケージ 読み込み サーバー接続 追加
Milvus insert from langchain_milvus import Milvus vector_store = Milvus.from_documents( documents=documents,
collection_name=”milvus”, embedding=embedding, connection_args={‘host’:<INPUR YOUR HOSTNAME>, ‘port’:<INPUR YOUR PORT NUMBER>} ) 追加 Milvusの パッケージ 読み込み
Chroma insert from langchain_chroma import Chroma vector_store = Chroma.from_documents( documents=documents,
collection_name=”chroma”, embedding=embeddings, persist_directory=‘chroma_langchain_db’ ) Chromaの パッケージ 読み込み 追加
追加(Insert)の所感 • ElasticsearchとMilvusは、先輩にサーバーを立ててもらっ たものを使った、自分1人ではまだ構築できない • Chromaは、実行するとローカルにベクトルデータベースが 立つ、簡単に実行することができてまさに初心者向け • 今回のようなword2ページほどの軽いデータは、遅いと感じ ることもない
検索(search)
Search 共通 answer = vector_store.similarity_search( query=‘勤続3年半ですが、有給休暇は何日もらえますか?’ )
検索結果 Elasticsearch Query Answer 勤続3年半ですが、有給休暇は何日もら えますか? 祝日は、日本国の法律で定められた全ての国民の祝日とする。 年末年始休暇は、12月29日から翌年1月3日までの6日間とする。 有給休暇は、次の基準に基づいて付与される。 社員が入社後6か月間継続勤務し、全労働日の8割以上出勤した場合、10日の有給休暇が付与される。
以後、勤務年数に応じて次の通り有給休暇が付与される。 勤続1年6か月:11日 勤続2年6か月:12日 勤続3年6か月:14日 勤続4年6か月:16日 勤続5年6か月:18日 勤続6年6か月以上:20日 家から会社まで直線距離で35キロありま すが、住宅手当は受けられますか? 住宅手当:社員の居住地が勤務地から直線距離で30キロメートル以上離れている場合に支給される 手当。支給額は居住地の家賃に応じて、月額2万円を上限とする。 第10条(賞与) 賞与は、夏季(6月)及び冬季(12月)の年2回支給する。 賞与額は、会社の業績および個人の業績評価に基づき、決定する。 第11条(福利厚生) 健康保険、厚生年金保険、雇用保険、労災保険に加入する。 社員が利用可能な福利厚生施設や、社員割引制度を提供する。 年に一度、社員全員が健康診断を受診することが義務付けられる。
検索結果 Milvus Query Answer 勤続3年半ですが、有給休暇は何日もら えますか? 祝日は、日本国の法律で定められた全ての国民の祝日とする。 年末年始休暇は、12月29日から翌年1月3日までの6日間とする。 有給休暇は、次の基準に基づいて付与される。 社員が入社後6か月間継続勤務し、全労働日の8割以上出勤した場合、10日の有給休暇が付与される。
以後、勤務年数に応じて次の通り有給休暇が付与される。 勤続1年6か月:11日 勤続2年6か月:12日 勤続3年6か月:14日 勤続4年6か月:16日 勤続5年6か月:18日 勤続6年6か月以上:20日 家から会社まで直線距離で35キロありま すが、住宅手当は受けられますか? 住宅手当:社員の居住地が勤務地から直線距離で30キロメートル以上離れている場合に支給される 手当。支給額は居住地の家賃に応じて、月額2万円を上限とする。 第10条(賞与) 賞与は、夏季(6月)及び冬季(12月)の年2回支給する。 賞与額は、会社の業績および個人の業績評価に基づき、決定する。 第11条(福利厚生) 健康保険、厚生年金保険、雇用保険、労災保険に加入する。 社員が利用可能な福利厚生施設や、社員割引制度を提供する。 年に一度、社員全員が健康診断を受診することが義務付けられる。
検索結果 Chroma Query Answer 勤続3年半ですが、有給休暇は何日もら えますか? 祝日は、日本国の法律で定められた全ての国民の祝日とする。 年末年始休暇は、12月29日から翌年1月3日までの6日間とする。 有給休暇は、次の基準に基づいて付与される。 社員が入社後6か月間継続勤務し、全労働日の8割以上出勤した場合、10日の有給休暇が付与される。
以後、勤務年数に応じて次の通り有給休暇が付与される。 勤続1年6か月:11日 勤続2年6か月:12日 勤続3年6か月:14日 勤続4年6か月:16日 勤続5年6か月:18日 勤続6年6か月以上:20日 家から会社まで直線距離で35キロありま すが、住宅手当は受けられますか? 住宅手当:社員の居住地が勤務地から直線距離で30キロメートル以上離れている場合に支給される 手当。支給額は居住地の家賃に応じて、月額2万円を上限とする。 第10条(賞与) 賞与は、夏季(6月)及び冬季(12月)の年2回支給する。 賞与額は、会社の業績および個人の業績評価に基づき、決定する。 第11条(福利厚生) 健康保険、厚生年金保険、雇用保険、労災保険に加入する。 社員が利用可能な福利厚生施設や、社員割引制度を提供する。 年に一度、社員全員が健康診断を受診することが義務付けられる。
None
None
1. Chunkの切り方を工夫する 1. 章条項ごとにChunkを切る 2. Embedding Modelを変える 3. ドキュメント内の図表を文章に書き下す 検索における工夫ポイント
None
2. Embedding Modelを 変える https://ibm.biz/BdaYrz
https://ibm.biz/BdaYry 3.ドキュメント内の表を文章 に書き下す 表 文章
削除(delete)
Elasticsearch delete from elasticsearch import Elasticsearch index = ”elastic" if
index in indices: client.indices.delete(index=index) Elasticsearch の パッケージ 読み込み client = Elasticsearch(hosts=host, ca_certs=‘cacert.pem’) indices = client.cat.indices(index=‘*’, h=‘index’).splitlines() サーバーと接続 “elastic” があったら削除
Milvus delete connections.connect(host=‘host’, port=‘port’) collections = list_collections() from pymilvus import
connections from pymilvus import list_collections from pymilvus import drop_collection collection = ”milvus” if collection in collections: drop_collection(collection_name=collection) Milvusの パッケージ 読み込み サーバーと接続 “milvus” があったら削除
Chroma delete import chromadb client = chromadb.PersistentClient(path=‘chroma_langchain_db’) collections = client.list_collections()
collection_name=”chroma” for collection in collections: if collection.name == collection_name: client.delete_collection(name=collection_name) Chromaの パッケージ 読み込み サーバーと接続 “chroma” があったら削除
Demo Elasticsearchを使用して RAGを実行してみる
勤続3年半ですが、有給休暇 は何日もらえますか? RAG構成図 ① 検索結果 質問をベクトル化、検索 ③ + ① 有給休暇は…
② ③ ④ ⑤
None
まとめ
• RAGやベクトルデータベースについて • 代表的な、Elasticsearch、Milvus、Chromaの違いについて • その基礎的な実装方法について 今後の課題 • より実に近いデータを使った性能向上の検討 •
RAGのための生成AIとの連携 • プロンプトエンジニアリング • 最新の情報をキャッチアップする まとめ Qiita:https://qiita.com/mmmmmika
アンケート
None
None
アンケート (姓)船渡 (名)美佳
[email protected]
TechXchange
None