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

人工無能たいたん

hmatsu47
November 19, 2023

 人工無能たいたん

JAWS-UG 名古屋 Amazon Bedrock ハンズオン 2023/11/20 LT

hmatsu47

November 19, 2023
Tweet

More Decks by hmatsu47

Other Decks in Technology

Transcript

  1. BBS ソフトウェアをリニューアル • 自作に切り替え ◦ 骨格は BASIC ◦ 通信制御とその周辺部分のみアセンブリ言語で書き換え ◦

    日本語対応強化 ◦ ファイル転送対応(XMODEM) ◦ ついでにゲームを実装 ◦ おまけとしてチャットに人工無能を追加 5 ←これで思いついた
  2. 本日のネタ • Bedrock のモデルを使って文章をベクトル化して ◦ Titan Embeddings G1 - Text

    • Vector store に突っ込んで ◦ pgvector(PostgreSQL) • 入力した文章に近い意味の文章を返すチャットを作る ◦ いわゆる人工無能(無脳)の一種 ▪ おうむ返し・唐突なリアクション 6
  3. Titan Embeddings G1 - Text • 文章ベクトル化のためのモデル ◦ 1536 次元のベクトルを出力

    ▪ OpenAI の text-embedding-ada-002 と同じ ◦ 日本語にも対応 ▪ Titan Text G1 - Express / Lite(プレビュー)は日本語未対応 9
  4. 他の文書ベクトル化方法(従来からあったもの) • TF-IDF(例:scikit-learn(sklearn)の TfidfVectorizer) ◦ 文章中に出てくる単語の頻度とレア度を使ってベクトル化 ▪ 事前に形態素解析して単語に分解した状態の文章を使う ▪ TfidfVectorizer

    では単語の頻度・レア度を無視する使い方も可能 ▪ FAQ サイトの関連質問へのリンク生成などに使用 ▪ https://github.com/hmatsu47/vaccinecert-qa-similarity-test (旧ワクチン証明書アプリ FAQ) • Word2vec(2013 年) ◦ 機械学習のモデル(群)by Google の研究チーム 10
  5. pgvector • PostgreSQL 用の拡張機能(Extension) ◦ ベクトルデータの保存・検索が可能に ▪ 16,000 次元までのベクトルに対応 ▪

    ユークリッド距離(L2 距離)、コサイン類似度などを計算し検索 ▪ INDEX の作成も可能(検索・比較を高速化) ▪ https://github.com/pgvector/pgvector ◦ 今回は Docker イメージを利用 ▪ https://hub.docker.com/r/ankane/pgvector 12
  6. LangChain から使う • ストア(pgvector)から入力に類似する文章を取得 13 # ベクターストアから応答を取得 bedrock_client = boto3.client('bedrock-runtime',

    region_name="ap-northeast-1") embeddings = BedrockEmbeddings( client=bedrock_client, model_id="amazon.titan-embed-text-v1" ) store = PGVector( collection_name=COLLECTION_NAME, connection_string=CONNECTION_STRING, embedding_function=embeddings, ) docs = store.similarity_search_with_score(trimed_prompt) (中略) # 近い文章を返す response = docs[0][0].page_content 1つ目([0])の要素=入力文書に最も近い文章を返す
  7. 一方、本編(ハンズオン)では • RAG の Retriever として Kendra を使用 • Kendra

    はセマンティック検索が可能 ◦ 人が入力(質問)した文の意味に沿った検索 15
  8. 正しく RAG として使うには? • ストアから取得した文章はプロンプトの文脈として渡す ◦ LangChain では RetrievalQA でストアの

    retriever を渡す ▪ そうすれば Claude がちゃんとした答えを返してくれるはず • 会話履歴もあわせて渡す ◦ ただし一問一答式の QA の場合は除く 17
  9. まとめ • Titan Embeddings G1 - Text は日本語文章のベクトル化 に使える •

    機能は正しく使うべし ◦ 今回はちょっと変な(間違った)使い方をしてみた 18