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
人工無能たいたん
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
hmatsu47
PRO
November 19, 2023
Technology
150
0
Share
人工無能たいたん
JAWS-UG 名古屋 Amazon Bedrock ハンズオン 2023/11/20 LT
hmatsu47
PRO
November 19, 2023
More Decks by hmatsu47
See All by hmatsu47
名古屋城とデータセンター
hmatsu47
PRO
0
24
IPv6 に関する話
hmatsu47
PRO
0
18
さいきんの光ファイバーの話
hmatsu47
PRO
0
45
低いほうのレイヤを見てみる話
hmatsu47
PRO
0
21
IPv6 VPC の実装パターンをいくつか
hmatsu47
PRO
0
40
光ファイバーと IPv6 絡みの話
hmatsu47
PRO
0
54
AWS で試して学ぶ IPv6
hmatsu47
PRO
0
48
今年の MySQL/HeatWave ネタ登壇振り返り
hmatsu47
PRO
0
45
今年の DB ネタ登壇振り返り
hmatsu47
PRO
0
40
Other Decks in Technology
See All in Technology
サプライチェーンセキュリティの空白地帯 - 信頼できる”依存性”の未来を考える
rung
PRO
2
650
「嘘をつくテスト」の失敗例から学ぶ 良いテストコード #frontend_phpcon_do
asumikam
0
140
GoとSIMDとWasmの今。
askua
3
480
「速く作る」から「正しく作る」へ ─ 生成AI時代の開発フロー改革の ロードマップと実行 ─
starfish719
0
5.1k
個人の発見を、組織の知恵に 〜生成AI活用を"探索"から"組織の仕組み"へ〜
kintotechdev
2
690
先取りMaven4 ~16年ぶりのメジャーアップデート、その進化とは?~
ogiwarat
0
130
MIERUNE JCT 発表資料「宇宙から伊能忠敬ごっこ」
syuchimu
0
100
AI Adaptable なテストを整える工夫 / Ways to Make Your Tests AI-Adaptable
bitkey
PRO
2
200
[モダンアプリ勉強会]今更聞けないGit/GitHub入門
tsukuboshi
0
110
oracle-to-databricks-migration-with-llm-and-dbt
casek
1
420
AI活用を推進するために ファインディが下した、一つの小さな決断
starfish719
0
210
Mastering Ruby Box
tagomoris
3
140
Featured
See All Featured
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
270
Art, The Web, and Tiny UX
lynnandtonic
304
22k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
320
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
260
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
150
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
1
330
How to Talk to Developers About Accessibility
jct
2
220
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
240
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
A designer walks into a library…
pauljervisheath
211
24k
Utilizing Notion as your number one productivity tool
mfonobong
4
310
The Spectacular Lies of Maps
axbom
PRO
1
780
Transcript
人工無能たいたん JAWS-UG 名古屋 Amazon Bedrock ハンズオン 2023/11/20 まつひさ(hmatsu47)
自己紹介…は(また)書く時間がなかったのでスキップ 松久裕保(@hmatsu47) • https://qiita.com/hmatsu47 2
本日のネタ着想元 • 10 月に「吉祥寺.pm 34」で話した内容 3
パソコン通信むかしばなし 吉祥寺.pm34【オンライン】 2023/10/31 まつひさ(hmatsu47)
BBS ソフトウェアをリニューアル • 自作に切り替え ◦ 骨格は BASIC ◦ 通信制御とその周辺部分のみアセンブリ言語で書き換え ◦
日本語対応強化 ◦ ファイル転送対応(XMODEM) ◦ ついでにゲームを実装 ◦ おまけとしてチャットに人工無能を追加 5 ←これで思いついた
本日のネタ • Bedrock のモデルを使って文章をベクトル化して ◦ Titan Embeddings G1 - Text
• Vector store に突っ込んで ◦ pgvector(PostgreSQL) • 入力した文章に近い意味の文章を返すチャットを作る ◦ いわゆる人工無能(無脳)の一種 ▪ おうむ返し・唐突なリアクション 6
本日のネタ • こちらを参考に(LangChain を使って) ◦ あえて質問を Claude に投げないスタイルで実装 ▪ https://gihyo.jp/book/2023/978-4-297-13839-4
7
GitHub リポジトリはこちら • https://github.com/hmatsu47/munou-chat 8
Titan Embeddings G1 - Text • 文章ベクトル化のためのモデル ◦ 1536 次元のベクトルを出力
▪ OpenAI の text-embedding-ada-002 と同じ ◦ 日本語にも対応 ▪ Titan Text G1 - Express / Lite(プレビュー)は日本語未対応 9
他の文書ベクトル化方法(従来からあったもの) • TF-IDF(例:scikit-learn(sklearn)の TfidfVectorizer) ◦ 文章中に出てくる単語の頻度とレア度を使ってベクトル化 ▪ 事前に形態素解析して単語に分解した状態の文章を使う ▪ TfidfVectorizer
では単語の頻度・レア度を無視する使い方も可能 ▪ FAQ サイトの関連質問へのリンク生成などに使用 ▪ https://github.com/hmatsu47/vaccinecert-qa-similarity-test (旧ワクチン証明書アプリ FAQ) • Word2vec(2013 年) ◦ 機械学習のモデル(群)by Google の研究チーム 10
文章をベクトル化すると? • ベクトルを比較することで近い意味の文章が検索可能 ◦ ベクトル間のユークリッド距離、コサイン類似度などで比較 ▪ 近いものから順に文章を抽出 ◦ 多言語対応モデルを使うと違う言語間の検索(比較)が可能 ▪
例:「これは猫です」と「This is a cat」が近いものとして抽出 11
pgvector • PostgreSQL 用の拡張機能(Extension) ◦ ベクトルデータの保存・検索が可能に ▪ 16,000 次元までのベクトルに対応 ▪
ユークリッド距離(L2 距離)、コサイン類似度などを計算し検索 ▪ INDEX の作成も可能(検索・比較を高速化) ▪ https://github.com/pgvector/pgvector ◦ 今回は Docker イメージを利用 ▪ https://hub.docker.com/r/ankane/pgvector 12
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])の要素=入力文書に最も近い文章を返す
LangChain から使う • ストア(pgvector)に文章を追加 14 # ベクターストアに入力を追加 store.add_documents([Document(page_content=trimed_prompt)]) 文章を渡すとベクトル値と一緒に保存される
一方、本編(ハンズオン)では • RAG の Retriever として Kendra を使用 • Kendra
はセマンティック検索が可能 ◦ 人が入力(質問)した文の意味に沿った検索 15
デモ • 最初はおうむ返し → 言葉を覚えるとズレた会話に 16
正しく RAG として使うには? • ストアから取得した文章はプロンプトの文脈として渡す ◦ LangChain では RetrievalQA でストアの
retriever を渡す ▪ そうすれば Claude がちゃんとした答えを返してくれるはず • 会話履歴もあわせて渡す ◦ ただし一問一答式の QA の場合は除く 17
まとめ • Titan Embeddings G1 - Text は日本語文章のベクトル化 に使える •
機能は正しく使うべし ◦ 今回はちょっと変な(間違った)使い方をしてみた 18