Upgrade to Pro — share decks privately, control downloads, hide ads and more …

20241015 Dojo ベクトルデータベース入門

Mika
October 16, 2024

20241015 Dojo ベクトルデータベース入門

Mika

October 16, 2024
Tweet

Other Decks in Business

Transcript

  1. 写真撮影 動画撮影 資料公開 SNS拡散 ◯ ◯ ◯ ◯ #IBMDojo セッション受講における注意事項

    セッション中に迷惑行為が発覚した場合は、強制退出、セッション中止などの措置を講じます
  2. 名前:小野 祐作(Yusaku Ono, Ph.D.) 所属:日本アイ・ビー・エム株式会社 テクノロジー事業本部 カスタマー・サクセス 経歴: 2010年:博士(理学)@理学 衛星リモートセンシングによる地球観測に関する研究

    2010年:研究員@宇宙航空研究開発機構(JAXA/EORC) 2015年:助教@千葉大学(CEReS) 2016年:ITコンサルタント@コンサルティングファーム 2017年:データサイエンティスト@EY Japan 2018年:分析コンサルタント@ SAS Institute Japan 2020年:エキスパート→課長@舶用電気機器メーカー 2022年:カスタマー・サクセス・マネージャー@IBM Japan watsonxによるお客様のビジネス目標達成を支援中 自己紹介
  3. ベクトルとは? • 大きさと方向で表される、量 • 数字の列 例えば… クッキー:(甘さ, 丸さ) = (10,

    4) せんべい:(甘さ, 丸さ) = (1, 10) ドーナツ:(甘さ, 丸さ) = (10, 10) ベクトルとは?
  4. ベクトルとは? • 大きさと方向で表される、量 • 数字の列 例えば… クッキー:(甘さ, 丸さ) = (10,

    4) せんべい:(甘さ, 丸さ) = (1, 10) ドーナツ:(甘さ, 丸さ) = (10, 10) ベクトルとは? (10, 10) (10, 4) (1, 10) 甘さ 丸さ
  5. 虎→[?????] テキストをベクトルに変換 単語→ベクトル表現 犬→[0.47, -0.12, 0.26, 0.89, -0.71, …] 猫→[0.46,

    -0.10, 0.54, -0.31, 0.96, …] 子供 大人 飛行機 電車 車 馬 熊 狼 犬 猫 ※イメージです
  6. テキストをベクトルに変換 単語→ベクトル表現 犬→[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, …] 子供 大人 飛行機 電車 車 馬 熊 狼 犬 猫 虎
  7. • RAGを前提としたベクトルデータベースへのデータの • 追加(insert) • 検索(search) • 削除(delete) • 環境

    • OS:macOS • Python 3.11.3 • Langchain • Embedding model:intfloat/multilingual-e5-large ベクトルデータベースの実装
  8. 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で分割
  9. 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で分割 モデル取得
  10. 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の パッケージ 読み込み サーバー接続 追加
  11. 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の パッケージ 読み込み
  12. 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の パッケージ 読み込み 追加
  13. 検索結果 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条(福利厚生) 健康保険、厚生年金保険、雇用保険、労災保険に加入する。 社員が利用可能な福利厚生施設や、社員割引制度を提供する。 年に一度、社員全員が健康診断を受診することが義務付けられる。
  14. 検索結果 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条(福利厚生) 健康保険、厚生年金保険、雇用保険、労災保険に加入する。 社員が利用可能な福利厚生施設や、社員割引制度を提供する。 年に一度、社員全員が健康診断を受診することが義務付けられる。
  15. 検索結果 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条(福利厚生) 健康保険、厚生年金保険、雇用保険、労災保険に加入する。 社員が利用可能な福利厚生施設や、社員割引制度を提供する。 年に一度、社員全員が健康診断を受診することが義務付けられる。
  16. 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” があったら削除
  17. 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” があったら削除
  18. 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” があったら削除
  19. • RAGやベクトルデータベースについて • 代表的な、Elasticsearch、Milvus、Chromaの違いについて • その基礎的な実装方法について 今後の課題 • より実に近いデータを使った性能向上の検討 •

    RAGのための生成AIとの連携 • プロンプトエンジニアリング • 最新の情報をキャッチアップする まとめ Qiita:https://qiita.com/mmmmmika