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
3.8k
Embeddingモデルを使ったベクトル化のしくみ、fine-tuning手法を解説
payanotty
April 11, 2024
Tweet
Share
More Decks by payanotty
See All by payanotty
トークナイザー入門
payanotty
2
1.1k
LLM_Prompt_Recovery
payanotty
3
800
Transformerによるテキストベクトル化を解説
payanotty
4
2k
Kaggle_LLMコンペの攻略法を解説.pdf
payanotty
1
1.2k
ManimMLでイケてるアニメーションを作ろう
payanotty
0
620
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
750
Featured
See All Featured
GraphQLの誤解/rethinking-graphql
sonatard
66
9.9k
Learning to Love Humans: Emotional Interface Design
aarron
272
40k
Designing for Performance
lara
604
68k
Teambox: Starting and Learning
jrom
132
8.7k
Reflections from 52 weeks, 52 projects
jeffersonlam
346
20k
How STYLIGHT went responsive
nonsquared
95
5.2k
Side Projects
sachag
452
42k
GraphQLとの向き合い方2022年版
quramy
43
13k
The World Runs on Bad Software
bkeepers
PRO
65
11k
A designer walks into a library…
pauljervisheath
202
24k
Speed Design
sergeychernyshev
24
570
Into the Great Unknown - MozCon
thekraken
31
1.5k
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 • クエリとポジティブとの距離よりも ネガティブとの距離の方がなるべく遠くなるように学習する