---
title: 【大規模言語モデル入門】6章
tags: 
author: [京都大学人工知能研究会KaiRA](https://www.docswell.com/user/kyoto-kaira)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/G7WPLGRZE2.jpg?width=480
description: 【大規模言語モデル入門】6章 by 京都大学人工知能研究会KaiRA
published: November 07, 24
canonical: https://www.docswell.com/s/kyoto-kaira/5XE4EP-2024-11-07-214930
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/G7WPLGRZE2.jpg)

2024年度後期輪読会#6(2024/11/07)
第6章固有表現認識
京都大学理学部3回生
山下
素数
0


# Page. 2

![Page Image](https://bcdn.docswell.com/page/4JZKMLRLJ3.jpg)

アジェンダ
◼ 固有表現認識とは
◼ 固有表現認識を用いたBertの実装
◼ ビタビアルゴリズムによる推論
◼ CRF層を用いたBertの実装
1


# Page. 3

![Page Image](https://bcdn.docswell.com/page/YE6QNWRMEV.jpg)

固有表現認識とは
固有表現認識とは、テキストから固有表現を抽出し、固有表現の種類を分類するタスク
大谷翔平は岩手県水沢市出身
のプロ野球選手
人名:大谷翔平
地名:岩手県水沢市
代表的な固有表現認識のタスクを3種類紹介
易
Flat NER
難
Nested NER
Discontinuous NER
同じトークンが
複数の固有表現に
含まれない
固有表現はトークン
が連続している
2


# Page. 4

![Page Image](https://bcdn.docswell.com/page/GE5R5M8QJ4.jpg)

固有表現タスクに対するアプローチの種類
固有表現タスクに対しては、系列ラベリング、スパンベース、生成型のアプローチがある
系列ラベリング
スパンベース
生成型
予測方法
各トークンに対して
固有表現ラベルを予測
全てのスパンに対して
固有表現ラベルを予測
生成モデルで固有表現の
範囲と固有表現ラベルを
生成
扱うことが
多いタスク
Flat NER
Nested NER
Discontinuous NER
使うことが
多いモデル
Bert系
Bert系
LLM系
3


# Page. 5

![Page Image](https://bcdn.docswell.com/page/972DN9KW7R.jpg)

処理の流れ
まず、Bertによる系列ラベリング手法での”一番簡単な方法による”固有表現抽出を行う
処理の流れは次のようになっている
Step 1
モデルに渡すデータの前処理
Step 2
モデルによる推論
Step 3
モデルの推論結果の後処理
Step 4
評価指標の計算・エラー分析
学習を行う場合は
ここでモデルのパラメーター
の最適化を行う
4


# Page. 6

![Page Image](https://bcdn.docswell.com/page/DJY2P4N9JM.jpg)

モデルに渡すデータの前処理
モデルに渡すデータの前処理として次の処理を行う(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


# Page. 7

![Page Image](https://bcdn.docswell.com/page/V7N85YXDE8.jpg)

モデルの学習
transformersのTrainerを用いてモデルを学習
モデルはcl-tohoku/bert-base-japanese-v3を使う
lossはCross Entropy
metricはf1-score
6


# Page. 8

![Page Image](https://bcdn.docswell.com/page/YJ9KYP88J3.jpg)

モデルの推論結果の後処理
モデルの出力を整える
1. 特殊トークンを除いたトークン列を得る
2. get_alignments(characters, tokens)でtoken_to_char_indicesを得る
3. 正解データと同じ形式に揃える
• seqeval.metrics.sequence_labelingのget_entitiesで固有表現の開始位置、
終了位置、種類を習得
7


# Page. 9

![Page Image](https://bcdn.docswell.com/page/GJ8R6D8Z7D.jpg)

評価指標の計算・エラー分析
1. 評価指標の計算
• 固有表現ごとの属性ごとのprecision, recall, f1-score, support(true_labelの個数),
micro average, macro average, weighted averageを求める
• 固有表現ではない語句がかなり多いため、正解率にはあまり意味がない
• 適合率、再現率、F値を用いるのが良い
• micro average:全ラベルをまとめて評価スコアを算出する方法でラベル間で固有表現
の数の偏りがある場合に向いている
• macro average:ラベルごとに評価スコアを算出して平均を求める方法。各ラベルの
重要性を等しくしたい場合に向いている
• weighted average:各ラベルの固有表現の数で重みを付けてマクロ平均を算出する方
法
2. エラー分析
• モデルの予測が間違えている事例を出力する
8


# Page. 10

![Page Image](https://bcdn.docswell.com/page/LJLK9MR17R.jpg)

ラベル間の遷移可能性を考慮して予測をする改良
ラベル間の遷移可能性を考慮して予測をする
• “B-”の次に”B-”が並ぶなどはあり得ない
• あり得ないケースの遷移スコアを-100、あり得るケースの遷移スコアを0にする
• 遷移スコア+モデルの予測値のlogitsをそのトークンから別のトークンへ移るスコアとする
ビタビアルゴリズムを用いてスコアの高い文章を求める(動的計画法)
文
-5
-2
-3
-7
-8
-9
-6
max
-6
-2
-4
9


# Page. 11

![Page Image](https://bcdn.docswell.com/page/47M2ZYR57W.jpg)

遷移スコアも学習する改良
条件付き確率場(CRF)も学習することによって遷移スコアも学習する
入力𝑋 = 𝑥1 , … , 𝑥𝑛 とラベル𝑌 = 𝑦1 , … , 𝑦𝑛 に対してスコア𝑠(𝑋, 𝑌)を
𝑁
𝑁
𝑠 𝑋, 𝑌 = ෍ 𝑃𝑥𝑖 ,𝑦𝑖 + ෍ 𝐴𝑦𝑖 ,𝑦𝑖+1
とし、
損失関数を
𝑖=1
𝑖=0
exp(𝑠(𝑋, 𝑌))
𝐿 = −log
෨
σ𝑌∈Γ
exp(𝑠(𝑋, 𝑌))
෨
として学習する
学習した𝐴𝑦𝑖,𝑦𝑖+1 を遷移スコアとして用いる
10


# Page. 12

![Page Image](https://bcdn.docswell.com/page/P7RM69RZJ9.jpg)

CRFを含むBertの実装
CRFの層をtorchcrfから取ってきて使うだけでCRFを含むBertの実装ができる
([CLS]トークンのlogitは除外して扱う必要があることに注意)
11


