>100 Views
November 07, 24
スライド概要
AI・機械学習を勉強したい学生たちが集まる、京都大学の自主ゼミサークルです。私たちのサークルに興味のある方はX(Twitter)をご覧ください!
2024年度後期輪読会#6(2024/11/07) 第6章固有表現認識 京都大学理学部3回生 山下 素数 0
アジェンダ ◼ 固有表現認識とは ◼ 固有表現認識を用いたBertの実装 ◼ ビタビアルゴリズムによる推論 ◼ CRF層を用いたBertの実装 1
固有表現認識とは 固有表現認識とは、テキストから固有表現を抽出し、固有表現の種類を分類するタスク 大谷翔平は岩手県水沢市出身 のプロ野球選手 人名:大谷翔平 地名:岩手県水沢市 代表的な固有表現認識のタスクを3種類紹介 易 Flat NER 難 Nested NER Discontinuous NER 同じトークンが 複数の固有表現に 含まれない 固有表現はトークン が連続している 2
固有表現タスクに対するアプローチの種類 固有表現タスクに対しては、系列ラベリング、スパンベース、生成型のアプローチがある 系列ラベリング スパンベース 生成型 予測方法 各トークンに対して 固有表現ラベルを予測 全てのスパンに対して 固有表現ラベルを予測 生成モデルで固有表現の 範囲と固有表現ラベルを 生成 扱うことが 多いタスク Flat NER Nested NER Discontinuous NER 使うことが 多いモデル Bert系 Bert系 LLM系 3
処理の流れ まず、Bertによる系列ラベリング手法での”一番簡単な方法による”固有表現抽出を行う 処理の流れは次のようになっている Step 1 モデルに渡すデータの前処理 Step 2 モデルによる推論 Step 3 モデルの推論結果の後処理 Step 4 評価指標の計算・エラー分析 学習を行う場合は ここでモデルのパラメーター の最適化を行う 4
モデルに渡すデータの前処理 モデルに渡すデータの前処理として次の処理を行う(dataset.mapでこれらの処理を実行) 1. テキストの正規化 • unicodedata.normalizeで正規化 2. テキストのトークナイゼーション・アライメント • transformersのAutoTokenizer.from_pretrained(model_name, label2id, id2label) でtokenizerを読み込む • tokenizer(text)でトークナイゼーション • tokenizer.convert_ids_to_tokens(tokenizer.encode(text))によって特殊トークンを 含むtokenを得る • get_alignments(characters, tokens)によってchar_to_token_indicesを得る 3. ラベル作成 • 今回はIOB2記法を用いる • 固有表現の先頭トークンに”B-”を、先頭以外のトークンには”I-”を付ける • 固有表現ではないトークンには”O”を付ける • 特殊トークンの位置IDは-100に設定 4. データのパディング • transformersのDataCollatorForTokenClassification(tokenizer)をdata_collatorとし て設定 5
モデルの学習 transformersのTrainerを用いてモデルを学習 モデルはcl-tohoku/bert-base-japanese-v3を使う lossはCross Entropy metricはf1-score 6
モデルの推論結果の後処理 モデルの出力を整える 1. 特殊トークンを除いたトークン列を得る 2. get_alignments(characters, tokens)でtoken_to_char_indicesを得る 3. 正解データと同じ形式に揃える • seqeval.metrics.sequence_labelingのget_entitiesで固有表現の開始位置、 終了位置、種類を習得 7
評価指標の計算・エラー分析 1. 評価指標の計算 • 固有表現ごとの属性ごとのprecision, recall, f1-score, support(true_labelの個数), micro average, macro average, weighted averageを求める • 固有表現ではない語句がかなり多いため、正解率にはあまり意味がない • 適合率、再現率、F値を用いるのが良い • micro average:全ラベルをまとめて評価スコアを算出する方法でラベル間で固有表現 の数の偏りがある場合に向いている • macro average:ラベルごとに評価スコアを算出して平均を求める方法。各ラベルの 重要性を等しくしたい場合に向いている • weighted average:各ラベルの固有表現の数で重みを付けてマクロ平均を算出する方 法 2. エラー分析 • モデルの予測が間違えている事例を出力する 8
ラベル間の遷移可能性を考慮して予測をする改良 ラベル間の遷移可能性を考慮して予測をする • “B-”の次に”B-”が並ぶなどはあり得ない • あり得ないケースの遷移スコアを-100、あり得るケースの遷移スコアを0にする • 遷移スコア+モデルの予測値のlogitsをそのトークンから別のトークンへ移るスコアとする ビタビアルゴリズムを用いてスコアの高い文章を求める(動的計画法) 文 -5 -2 -3 -7 -8 -9 -6 max -6 -2 -4 9
遷移スコアも学習する改良 条件付き確率場(CRF)も学習することによって遷移スコアも学習する 入力𝑋 = 𝑥1 , … , 𝑥𝑛 とラベル𝑌 = 𝑦1 , … , 𝑦𝑛 に対してスコア𝑠(𝑋, 𝑌)を 𝑁 𝑁 𝑠 𝑋, 𝑌 = 𝑃𝑥𝑖 ,𝑦𝑖 + 𝐴𝑦𝑖 ,𝑦𝑖+1 とし、 損失関数を 𝑖=1 𝑖=0 exp(𝑠(𝑋, 𝑌)) 𝐿 = −log ෨ σ𝑌∈Γ exp(𝑠(𝑋, 𝑌)) ෨ として学習する 学習した𝐴𝑦𝑖,𝑦𝑖+1 を遷移スコアとして用いる 10
CRFを含むBertの実装 CRFの層をtorchcrfから取ってきて使うだけでCRFを含むBertの実装ができる ([CLS]トークンのlogitは除外して扱う必要があることに注意) 11