E試験 2024#2 シラバスメモ④-2 深層学習の応用 自然言語処理

E試験のシラバスに沿って概要をメモしたものです。

シラバスは2024#2に準拠しています

https://www.jdla.org/certificate/engineer/

本記事は4．深層学習の応用 のうち
- 自然言語処理

についてとなります。
試験範囲外部分は割愛しています。

その他の章については以下の記事にリストしています。
https://qiita.com/hokutoh/items/53fbff185c17171c64b7

# 自然言語処理
## Word Embedding
Word Embedding（単語埋め込み）とは、各単語に対して、特徴空間において固有のベク
トルを与える技術。

### BoW(Bag of Words)
BoWは分や文章をそこに出現する単語の集合とみなして処理をする方法。
ひとつの単語はOne-hotベクトルで表現される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/c6bfce03-9384-53fd-ce99-c62733f2a746.png)

自立語のみを抽出し、それらの出現数からベクトルを作成。
(下記画像は1しかないが「このネコはとても可愛いネコです」だとしたら[1,2,0,1,0,0,1,0,1,0]となる。)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/9b72f5d8-3206-2955-3e33-2539f8c72767.png)
出所：https://zero2one.jp/ai-word/bag-of-words-model/

文の順序や構造はいったん無視し、どの単語が登場するかに注視した手法。

### 潜在的意味インデキシング（LSI:Latent Semantic Indexing）
LSI(LSA:Latent semantic analysisとも)は検索などに用いられる次元圧縮手法で教師なし文書分類種類の一つ。
同じ意味をもつ単語をグルーピングし、１文章に１トピックのみ割り当てる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/f0f6f1bb-fcbe-3b14-6eab-91612610c6e2.png)
BoWを使用して、単語と文書の関係を表すMatrix(Term Document Matrix) を生成。行は単語を表し、列は文章を表す。
LSA は、特異値分解を使用してTerm Document Matrixでマトリックス分解を実行することにより、潜在的なトピックを学習する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/fd7428ff-a87a-962c-1d0c-97d2039169ce.png)

### Word2vec
単語の意味を表現する「単語ベクトル」を作成し、
Word2Vecのメリットは、単語同士の意味がどのくらい類似しているかを計算できること。(距離の近さはコサイン距離で計算
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/dddd1f86-acca-2c57-ddac-69b3cb3c10ad.png)
https://aclanthology.org/N13-1090.pdf

Word2Vecの学習方法には **skip gram** や **CBOW** などがある。
skip gram:中心語から周辺語を予測する
CBOW:周辺の単語から中心語を予測する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/9f8b9d9b-018c-0166-9507-cf03dc6a6e56.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/4778826b-2f74-cdf6-2b7a-8fd862e87ac0.png)
https://ainow.ai/2021/04/08/254071/
#### skip gram
入力データを「基準となる単語」(のone-hot vector)、教師データを「周辺語」(のN個のone-hot vector)として、単語リストの中から周辺語が選ばれる確率が高くなるように重みを学習する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/17bb3b4d-7897-72c7-12dd-ab5018877f97.png)
出所：https://www.researchgate.net/publication/348580170_Identifying_Fake_News_on_Social_Networks_Based_on_Natural_Language_Processing_Trends_and_Challenges より一部編集
#### CBOW:Continuous Bag of Words
入力データを「周辺語」(のN個のone-hot vector) 教師データを「求めたい単語」(のone-hot vector)として、単語リストの中から周辺語が選ばれる確率が高くなるように重みを学習する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/bf062352-8637-7895-ab5b-a05f65cab178.png)
出所：https://www.researchgate.net/publication/348580170_Identifying_Fake_News_on_Social_Networks_Based_on_Natural_Language_Processing_Trends_and_Challenges より一部編集

#### Negative sampling
CBOWにしてもskip-gramにしても入力出力共に語彙数の多さにより、誤差の計算のたびに計算量が非常に大きくなる。

Negative samplingは問題を、「正しく与えられたデータか」「ノイズデータが与えられたか」の2クラス分類とすることにより計算の高速化を図ったもの。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/fa95d325-47f7-7fee-f8dd-fa96696be9a8.png)
出所：https://www.alibabacloud.com/blog/understanding-negative-sampling-in-graph-representation-learning_596748
上記図の(7,8)や(8,9)は正しく周辺語が与えられたデータ(Positive Sampling)
(7,1)はノイズとして与えられた実際は周辺語ではないデータ(Negative Sampling)

出力はPositiveかNegativeの2値クラス分類問題となる。(出力層の活性化関数はsigmoidになる)

## BERT
Bidirectional Encoder
Representations from Transformers（Transformerによる双方向のエンコード表現）
Transformerのエンコーダで構成されており、事前学習とファインチューニングで学習を
行う。
事前学習には
- Masked Language Modeling(MLM)
- Next Sentence Prediction(NSP)
を使う

事前学習の入力には
トークン埋め込みとセグメント埋め込みとポジション埋め込みの和で行われる。
- トークン埋め込み
≒単語
- セグメント埋め込み
複数の文章が入力された時、トークンがどの文章に属するのか、の情報(下記図の通り$E_A$か$E_B$かのような情報)
- ポジション埋め込み
トークンの順番を意識させて学習するための位置番号の様な情報

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/6747be0e-7a78-e701-26e9-d717524e0906.png)
https://arxiv.org/pdf/1810.04805
### Masked Language Modeling(MLM)
文章をラベルなしで学習データとする(教師なし学習)
特定のトークン(≒単語)をMASKし、MASKされたトークンが何かを予測する。

学習データは文章のシーケンスの何割か(上記論文では15%)のトークン(≒単語)をランダムに選び別のモノにする。
選ばれたトークンに対して以下の処理を施す。
(1)80％の確率で[MASK]トークンと置き換える
(2)10％の確率でランダムなトークンと置き換える
(3)10％の確率でそのまま
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/3476c6a4-ac13-9bbd-cff2-f5783ad4a607.png)
https://www.geeksforgeeks.org/understanding-bert-nlp/

### Next Sentence Prediction(NSP)
文章をラベルなしで学習データとする(教師なし学習)
2つの文が与えられ、2番目の文が最初の文の後続文であるかどうかを予測する。

学習データは50%を原文の通りの連続文、50%を不連続な文として与える。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/87066190-2554-e4bc-83d3-61e85c7892a9.png)
https://www.geeksforgeeks.org/understanding-bert-nlp/

## ファインチューニング
事前学習で得られた重みを初期値として、特定のタスクのラベルありデータでの教師あり学習を行う。

ここで行うタスクは目的によって変える。
タスクは大きく分けて
a. 文章ペアの分類タスク
b. 単一文章の分類タスク
c. Q&Aタスク
d. 単一文章のタグづけタスク
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/92b6b7a1-56a8-6948-8e82-ebef1714f7dd.png)
タスクの例
- MNLI-(m/mm):
文ペアの自然言語推論タスクで、mはマッチング、mmはミスマッチ（異なるジャンルの文）
入力: 2つの文ペア
教師ラベル: 文同士の関係（entailment含意、neutral中立、contradiction矛盾）
- QQP
Quoraの質問ペアを使った重複質問検出タスク
入力: 2つの質問ペア
教師ラベル: 質問が同じ意味かどうか（duplicateかnot duplicate）
- QNLI
質問と文のペアに対する自然言語推論タスク
入力: 質問と文のペア
教師ラベル: 文が質問に対する答えかどうか（entailmentかnot entailment）
- SST-2
映画レビューの文を使った感情分析タスク（肯定/否定の分類）
入力: 単一の文
教師ラベル: 文の感情（positiveかnegative）
- CoLA
文の文法的な正しさを判定するタスク
入力: 単一の文
教師ラベル: 文が文法的に正しいかどうか（acceptableかunacceptable）
- STS-B
文ペアの意味的な類似度を0から5のスコアで評価するタスク
入力: 2つの文ペア
教師ラベル: 文ペアの意味的類似度（0から5のスコア）
- MRPC
ニュース文のペアを使った意味的類似文の判定タスク
入力: 2つのニュース文ペア
教師ラベル: 文が意味的に類似しているかどうか（equivalentかnot equivalent）
- RTE
文ペアに対する自然言語推論タスク（テキストの含意関係を判定）
入力: 2つの文ペア
教師ラベル: 片方の文がもう片方の文から導かれるかどうか（entailmentかnot entailment）

スコア
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/01258c4b-26f4-4d86-aa63-7bd46c6cc5af.png)

## GPT-n
同じく、事前学習は教師なし学習。ファインチューニングは教師あり学習で特定タスクを行えるようにする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/48d2162c-34d5-0b79-fc7d-3f5262986ad0.png)
(左）事前学習で使用するモデル
(右）異なるタスクでファインチューニングを行うための入力変換。すべての構造化入力をトークン列に変換し、事前に訓練したモデル(図中の"Transformer"の部分)で処理する。

- Few Shot learning、Zero Shot learning、
数例のデータのみを用いて学習し、新たなタスクを解く。
データ数が1つだけの場合をone-shot learning。データ数がゼロの場合をzero-shot learningという
- Prompt Base Learning
モデルに特定のプロンプト（指示）を与えて、特定のタスクを実行させる手法

#### パラメータサイズの変遷
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/b32204df-b86e-5ae2-5b9f-e4dc240ce6a8.png)
出所：https://neuroflash.com/blog/gpt-4-wiki/