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
Embeddingモデルを使ったベクトル化のしくみ、fine-tuning手法を解説
Search
payanotty
April 11, 2024
14
4k
Embeddingモデルを使ったベクトル化のしくみ、fine-tuning手法を解説
payanotty
April 11, 2024
Tweet
Share
More Decks by payanotty
See All by payanotty
トークナイザー入門
payanotty
2
1.2k
LLM_Prompt_Recovery
payanotty
3
810
Transformerによるテキストベクトル化を解説
payanotty
4
2.1k
Kaggle_LLMコンペの攻略法を解説.pdf
payanotty
1
1.2k
ManimMLでイケてるアニメーションを作ろう
payanotty
0
630
Lets Finetune LLM
payanotty
3
1.2k
Stable Diffusion Web UI, Let Your Fave Eat Ramen
payanotty
1
960
Lets Finetune Stable Diffusion
payanotty
0
1.2k
Deffusion解説
payanotty
3
770
Featured
See All Featured
Rebuilding a faster, lazier Slack
samanthasiow
79
8.7k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
16
2.1k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
4
370
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
506
140k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
890
Into the Great Unknown - MozCon
thekraken
32
1.5k
Writing Fast Ruby
sferik
627
61k
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
Ruby is Unlike a Banana
tanoku
97
11k
StorybookのUI Testing Handbookを読んだ
zakiyama
27
5.3k
BBQ
matthewcrist
85
9.3k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
6.9k
Transcript
Embeddingモデルを使ったベクトル化のしくみ & fine-tuning手法を解説 早野康太
自己紹介 • 名前 ◦ 早野 康太 • お仕事 ◦ 自然言語モデルの改善
• 今期期待のアニメ ◦ ユーフォ、無職転生、夜のクラゲ このすば、ガールズバンドクライ • 最近の映画 ◦ デデデデおもろかったです ▪ 幾田りら声優うまスンギ ▪ 原作もバチクソ良かった • 今後の映画 ◦ ウマ娘、ぼざろ、デデデデなど
アジェンダ • Transformerモデル ◦ Attentionについて ◦ CLS, mean pooling •
fine-tuningについて ◦ Contrastive Learning ◦ データセットのつくりかた • 世のEmbeddingモデルたちはどうしてるか ◦ m-E5 ◦ E5-mistral-7b-instruct ◦ BGE • Embeddingモデルの応用 ◦ RAGとかStable Diffusionとか
アジェンダ • Transformerモデル ◦ Attentionについて ◦ CLS, mean pooling •
fine-tuningについて ◦ Contrastive Learning ◦ データセットのつくりかた • 世のEmbeddingモデルたちはどうしてるか ◦ m-E5 ◦ E5-mistral-7b-instruct ◦ BGE • Embeddingモデルの応用 ◦ RAGとかStable Diffusionとか
Transformerモデルを使ったテキストベクトル化 • Transformerモデルは文章をベクトル(数値)に落とし込むことが得意 ◦ ベクトル同士の類似度 (近さ) を測って検索に応用できる ◦ いったんベクトルに落とし込んでしまえば 画像処理や音声処理などと文章処理を組み合わせることもできる
吾輩は猫である Transformer 0.1, 0.3, 0.04, … 文章(文字列) ベクトル 画像生成 モデル 類似度 検索
• Attention Is All You Need (Łukasz Kaiser et al.,
2017) ◦ 文章の単語同士の関連度を測る (Attention) 機構を組み込むことで 自然言語処理モデルの性能が大きく向上 ◦ GPTなどの文章生成モデル ▪ → TransformerモデルのDecoder部分を利用 ◦ テキストベクトル化用のモデル ▪ → TransformerモデルのEncoder部分を利用 Transformerモデル
• A Survey of Transformers (TIANYANG LIN et. al.,
2021) ◦ Transformer派生についてのサーベイ ◦ 膨大な数のTransformer派生について 詳細にまとめられている ◦ もっと詳しく知りたい方は こちらを読まれるのをおすすめします Transformerから他のモデルへの派生
Attentionによる単語のベクトル化 吾輩 は 猫 である 。 吾輩は猫である。 文章を単語単位に分かち書き(トークナイズ) •
テキストは必ず最小単位 (トークン) に分割される • トークン単位で単語のベクトルが割り当てられる
Attentionによる単語のベクトル化 吾輩 は 猫 である 。 吾輩 は 猫 である
。 文章を単語単位に分かち書き(トークナイズ) 各単語に対応するベクトル
Attentionによる単語のベクトル化 吾輩 は 猫 である 。 吾輩 は 猫 である
。 0.1 0.3 -0.5 0.8 長方形はベクトルだと思ってください 文章を単語単位に分かち書き(トークナイズ)
Attentionによる単語のベクトル化 吾輩 は 猫 である 。 吾輩 は 猫 である
。 文章を単語単位に分かち書き(トークナイズ) 各単語に対応するベクトル 単語に対応する新しいベクトル ベクトル同士の内積の値(類似度) ×
補足: ベクトル同士の”類似度”の測り方 近い 遠い • 内積 ◦ 近い(同じ方向を向いている)ほど大きくなる • コサイン類似度
◦ 内積を-1 ~ 1に正規化 (要はcosθ ) 内積 = |a||b|cosθ
AttentionからTransformerへ 吾輩 は 猫 である 。 Attention Attention Transformer 吾輩
は 猫 である 。 BERTやGPTをはじめとしたTransformer系列のモデルは Attentionを繰り返して文章をベクトルの連なりに変換している
AttentionからTransformerへ 吾輩 は 猫 である 。 Attention Attention Transformer 吾輩
は 猫 である 。 BERTやGPTをはじめとしたTransformer系列のモデルは Attentionを繰り返して文章をベクトルの連なりに変換している 一番はじめのベクトルは ランダム初期化 (学習の中で最適化されていく) トークンの数だけ ベクトルが出てくる
文章のベクトル化 吾輩 は 猫 である 。 Attention Attention Transformer 吾輩
は 猫 である 。 [CLS] [CLS] 文頭に特別な トークンを追加 • CLS Pooling ◦ 文頭の特別なトークンのベクトルを文章ベクトルとして使う • Average Pooling ◦ 全トークンの値を平均して文章ベクトルとして使う CLSに対応する ベクトル
いったんまとめ • Transformerモデル ◦ Attentionを繰り返してトークンに対応するベクトルを出力 ◦ テキストベクトルの作り方は2種類ある ▪ CLS
Pooling • CLSトークンだけ使う ▪ Average Pooling • 全トークンを平均する
アジェンダ • Transformerモデル ◦ Attentionについて ◦ CLS, mean pooling •
fine-tuningについて ◦ Contrastive Learning ◦ データセットのつくりかた • 世のEmbeddingモデルたちはどうしてるか ◦ m-E5 ◦ E5-mistral-7b-instruct ◦ BGE • Embeddingモデルの応用 ◦ RAGとかStable Diffusionとか
• 意味が近いテキスト → “近い方向性” • 意味が遠いテキスト → “遠い方向性” 良いベクトル表現
猫 キャット 内閣総理大臣
ベクトル化に特化させるためのfine-tuning Query: 吾輩は猫であるの作者は? Positive Passage: 『吾輩は猫である』(わがはいはねこであ る)は、夏目漱石の長編小説であり、処女 小説である。 Negative Passage:
『人間失格』(にんげんしっかく)は、太宰 治による中編小説。 正解の テキストペア 不正解の テキストペア
ベクトル化に特化させるためのfine-tuning Query: 吾輩は猫であるの作者は? Negative Passage: 『人間失格』(にんげんしっかく)は、太宰 治による中編小説。 ベクトル化&スコア 計算 ポジティブスコア
ネガティブスコア Positive Passage: 『吾輩は猫である』(わがはいはねこであ る)は、夏目漱石の長編小説であり、処女 小説である。 • ポジティブスコアが高く、ネガティブスコアが低くなるようにロス関数を設定 • 似ているものは近く、似ていないものは遠く → Contrastive Learning
ロス関数: InfoNCE contrastive loss ネガティブスコア ポジティブ スコア 出典: Text Embeddings
by Weakly-Supervised Contrastive Pre-training cos類似度を定数τで重み付け p- p+ q p- p- loss loss
データセット p- p+ q p- p- 互いに関連する文章のペア たとえば、Wikipediaの(title, passage)など ポジティブ
データセット p- p+ q p- p- p- p+ q p-
p- p- p+ q p- p- p- p+ q p- p- • クエリ、ポジティブ、ネガティブの テキストペアで1セット • fine-tuningする際には テキストペアごとにlossを算出する → どうやってネガポジを集める? loss loss loss loss
データセット p- p+ q p- p- 互いに関連する文章のペア たとえば、Wikipediaの(title, passage)など ポジティブ
データセット p- p+ q p- p- 互いに関連する文章のペア たとえば、Wikipediaの(title, passage)など オープンソースのテキストペアデータセット
• MS-MARCO ◦ Microsoftが深層学習研究のために作成 ◦ Bingやコルタナからクエリを収集 回答は人間が作成 • Natural Questions ◦ Googleのクエリと それに関連するWikipediaページで構成 ポジティブ
データセット p- p+ q p- p- 無関係または不正解となるテキストペア ネガティブ
データセット p- p+ q p- p- 無関係または不正解となるテキストペア • Random Negative
◦ 大規模コーパス(Wikipediaなど)から完全にランダムに選択 およそクエリと無関係なテキストになる (一番簡単なやり方) → あまりに無関係だとネガティブスコアが小さくなってしまう (問題設定として簡単すぎる) ネガティブ
データセット p- p+ q p- p- 無関係または不正解となるテキストペア • Random
Negative ◦ 大規模コーパス(Wikipediaなど)から完全にランダムに選択 およそクエリと無関係なテキストになる (一番簡単なやり方) → あまりに無関係だとネガティブスコアが小さくなってしまう (問題設定として簡単すぎる) • Hard Negative ◦ “それなりの”難易度のネガティブパッセージを 用意することで、embeddingの品質を担保できる ネガティブ
データセット p- p+ q p- p- 無関係または不正解となるテキストペア • Hard
Negative ◦ BM25 Hard Negative ▪ あるクエリについて コーパス内の各パッセージとのBM25スコアを計算 ▪ BM25スコアのtop-kをネガティブサンプルとする ◦ 教師モデルのスコアをもとにHard Negativeをサンプリングする ▪ SIMLM: Pre-training with Representation Bottleneck for Dense Passage Retrieval ネガティブ
いったんまとめ • fine-tuning手法 ◦ Contrastive Learning ▪ ポジティブ同士は近く、ネガティブ同士は遠くなるように 埋め込みを学習する
◦ データセット作成 ▪ クエリ、ポジティブのテキストペアはQAデータセットなどが活用できる ▪ ネガティブサンプリングが意外と難しい • BM25スコアやほかの言語モデルの埋め込みなどから Hard Negativeを作成する手法は割とよく見る
アジェンダ • Transformerモデル ◦ Attentionについて ◦ CLS, mean pooling •
fine-tuningについて ◦ Contrastive Learning ◦ データセットのつくりかた • 世のEmbeddingモデルたちはどうしてるか ◦ m-E5 ◦ E5-mistral-7b-instruct ◦ BGE-M3 • Embeddingモデルの応用 ◦ RAGとかStable Diffusionとか
multilingual-E5 • Text Embeddings by Weakly-Supervised Contrastive Pre-training ◦ 2段階の学習を行いテキストベクトルを高品質化
▪ 1段階目 • “noisy”で大規模なデータセットで学習 ◦ Reddit, Wikipedia, その他Webページからクローリングした文章 ▪ 2段階目 • 高品質で小規模なデータセットで学習 • 別の教師モデルからの出力をLossに組み込み (知識蒸留, knowledge distillation) ◦ ベースモデルはBERT
E5-mistral-7b-instruct • Improving Text Embeddings with Large Language Models ◦
LLMモデルに高品質な学習データセットを生成させることで 少ないデータセットサイズで高精度を達成 ▪ 想定するタスクをいくつかに分類 ▪ 分類したタスクごとにGPT-4に クエリ、ポジティブ、ネガティブのテキストペアを生成させる ◦ BERT系列ではなく大規模な言語モデル (Mistral-7b) をベースモデルに使用
BGE-M3 • BGE M3-Embedding: Multi-Lingual, Multi-Functionality, Multi-Granularity Text Embeddings Through
Self-Knowledge Distillation ◦ 3種類のデータセットでによる多段階学習 ▪ “noisy”で大規模なデータセット • WikipediaやCC-Newsなどのタイトルや本文 ▪ 高品質で小規模なデータセット • NLIやMS-MARCOなどのラベル付きデータセット ▪ GPT-3.5からの生成データセット • Wikipediaなどのパラグラフからクエリ生成 ◦ 自己知識蒸留 (self-knowledge distillation) ▪ 3通りの異なるベクトルからロスを計算 ▪ ↑のロスの和を最小化する
いったんまとめ • 世のEmbeddingモデルたちはどうしているか ◦ Noisyデータセット → 高品質データセットの順で学習 ▪ multilingual-E5,
BGE-M3など ◦ 知識蒸留の活用 ▪ multilingual-E5, BGE-M3など ◦ LLMにデータ生成させる ▪ E5-mistral-7b-instruct, BGE-M3など
アジェンダ • Transformerモデル ◦ Attentionについて ◦ CLS, mean pooling •
fine-tuningについて ◦ Contrastive Learning ◦ データセットのつくりかた • 世のEmbeddingモデルたちはどうしてるか ◦ m-E5 ◦ E5-mistral-7b-instruct ◦ BGE-M3 • Embeddingモデルの応用 ◦ RAGとかStable Diffusionとか
RAG (Retrieval Augmented Generation) 質問 + 選択肢 Wikipedia passages dump
Wikipedia embeddings あらかじめベクトル化 ベクトル化 embedding ベクトル類似度検索 関連する文章 (Context) LLMへのインプット Wikipedia記事から 検索してContextを取得 ベクトル検索用に調整された言語モデルを使う (質問に回答するモデルとは別物)
Stable Diffusion (画像生成モデルへの応用) raw pixel value VAE latent
noisy latent + noise input text Text Encoder embedding UNET prediction loss velocity 生成したい画像についての文章を ベクトル化して生成モデルに与える
音楽生成モデル • Suno AI ◦ 自然言語で歌詞や曲調を指定すると その通りに音楽を生成してくれる ◦
具体的なモデルは公開されていないが 内部では文章→ベクトルの変換を通して 文章情報を生成モデルに与えている......はず!
いったんまとめ • Embeddingモデルの応用 ◦ RAG ▪ Embeddingモデルによる類似度検索結果を LLMへの入力として利用 ◦
Stable Diffusion ▪ 画像からの埋込と文章からの埋め込みを モデル内部で処理することでマルチモーダルを実現
補足: ベクトル化のベンチマーク • MTEB: Massive Text Embedding Benchmark ◦ テキスト埋め込みモデルのための大規模ベンチマーク
◦ 8つのタスクにわたり56のデータセットが含まれる
補足: Triplet loss 出典: Sentence Embeddings using Siamese BERT-Networks
n p a loss ポジティブとの距離 ネガティブとの距離 -loss • クエリとポジティブとの距離よりも ネガティブとの距離の方がなるべく遠くなるように学習する