3.1
https://aisuite.jp/column/bert/
・自然言語処理モデル(BERT)を利用した日本語の文章分類 〜GoogleColab & Pytorchによるファインチューニング〜
→bertの流れについて書いてある
https://qiita.com/takubb/items/fd972f0ac3dba909c293
・Twitterにおけるデータ分析
https://leadinge.co.jp/rd/2022/04/27/1888/
SHAPで2値分類結果を解釈する方法とプロットの種類
入力文を以下の形式で準備します。
- トークナイザーを使用して文をトークン化。 - トークン列: `[CLS] この 映画 は 素晴らしく 、 ストーリー も 感動 的 だ 。 [SEP]` - ID列: `[101, 1234, 5678, 2345, 6789, 3456, 7890, 4567, 8910, 5679, 9123, 102]`
各トークンIDを、事前学習済みの埋め込み層で次元 \(d_{model} = 768\) のベクトルに変換。
\[
X = [x_{[CLS]}, x_{\text{この}}, x_{\text{映画}}, \ldots, x_{[SEP]}]
\]
- \(X \in \mathbb{R}^{n \times d_{model}}\)(\(n\): トークン数, \(d_{model}\): 次元数)埋め込みベクトル \(X\) から学習可能な重み行列 \(W_Q, W_K, W_V\) を用いて以下を計算。 \[ Q = XW_Q, \quad K = XW_K, \quad V = XW_V \]
- \(W_Q, W_K, W_V \in \mathbb{R}^{d_{model} \times d_k}\)(\(d_k = 64\)などヘッドの次元) - \(Q, K, V \in \mathbb{R}^{n \times d_k}\)Query \(Q\) と Key \(K\) の内積を計算し、スコアを正規化します。 \[ \text{Attention}(Q, K, V) = \text{Softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V \]
複数のヘッドで並行して注意を計算し、結合後に線形変換 \(W_O\) を適用。 \[ \text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \ldots, \text{head}_h)W_O \]
Multi-Head Attentionの出力を入力 \(X\) に加算し、Layer Normalizationを適用。 \[ \text{Output} = \text{LayerNorm}(X + \text{MultiHead}(Q, K, V)) \]
最終的なモデル出力として、ポジティブとネガティブのスコアを取得。
SHAPを用いて各トークンの予測への寄与度を計算。 \[ \text{SHAP値} = [\text{SHAP}_{[CLS]}, \text{SHAP}_{\text{この}}, \ldots, \text{SHAP}_{[SEP]}] \]
- **「素晴らしく」**: \(+0.35\) - **「感動的」**: \(+0.30\)
重要度の高い単語を視覚的に表示。