🤗

Hugging Face NLP Course - 1. TRANSFORMER MODELS

2023/10/14に公開

概要

https://huggingface.co/learn/nlp-course/en/chapter1/1
の要点纏め。

Introduction

前提知識としてこちらのコースを受講しておくと良い。
https://course.fast.ai/

Hugging Face NLP Courseが全部終わったらこちらのコースがおすすめ。
https://www.coursera.org/specializations/natural-language-processing?utm_source=deeplearning-ai&utm_medium=institutions&utm_campaign=20211011-nlp-2-hugging_face-page-nlp-refresh

Natural Language Processing

一般的なNLPタスクの例

  • Classifying whole sentences: 文章の分類、スパムか否か等

  • Classifying each word in a sentence: 文中の各単語を分類する(名詞、動詞、形容詞、人の名前、等)

  • Generating text content: 文章生成、マスクされた文字の穴埋め

  • Extracting an answer from a text: 文脈で提供される情報に基づいて質問の答えを抽出

  • Generating a new sentence from an input text: テキストを別の言語に翻訳する、テキストを要約する等

Transformers, what can they do?

pipelineを使うことによりinputの前処理、modelの準備、outputの調整などよしなに実行してくれる

from transformers import pipeline

classifier = pipeline("sentiment-analysis")
classifier("I've been waiting for a HuggingFace course my whole life.")
[{'label': 'POSITIVE', 'score': 0.9598047137260437}]

複数形にも対応

classifier(
    ["I've been waiting for a HuggingFace course my whole life.", "I hate this so much!"]
)
[{'label': 'POSITIVE', 'score': 0.9598047137260437},
 {'label': 'NEGATIVE', 'score': 0.9994558095932007}]

モデルは初回呼び出し時にキャッシュされる。(次回以降ダウンロードされない)

現状使えるpipeline

feature-extraction (get the vector representation of a text)
fill-mask
ner (named entity recognition)
question-answering
sentiment-analysis
summarization
text-generation
translation
zero-shot-classification

使うモデルを明示的に指定することができる

from transformers import pipeline

generator = pipeline("text-generation", model="distilgpt2")
generator(
    "In this course, we will teach you how to",
    max_length=30,
    num_return_sequences=2,
)
[{'generated_text': 'In this course, we will teach you how to manipulate the world and '
                    'move your mental and physical capabilities to your advantage.'},
 {'generated_text': 'In this course, we will teach you how to become an expert and '
                    'practice realtime, and with a hands on experience on both real '
                    'time and real'}]

各モデルのページで試しに使用することができるので、調査時には便利。

コンテキストを参照して回答を生成する例

from transformers import pipeline

question_answerer = pipeline("question-answering")
question_answerer(
    question="Where do I work?",
    context="My name is Sylvain and I work at Hugging Face in Brooklyn",
)
{'score': 0.6385916471481323, 'start': 33, 'end': 45, 'answer': 'Hugging Face'}

How do Transformers work?

一般的な学習のフロー

  • Self-supervised learning
    大量の生テキストに対して学習
    人間がラベリングする必要がない

  • transfer learning
    特定のタスクに特化させるために人間がアノテーションしたデータでfine-tunedされる

近年モデルは肥大化していて膨大な時間と計算リソースがかかるようになってきている。
transformersはモデルのパラメータを共有することでこの課題を解決する仕組み。

モデルの種類

Encoder-only models: 文章の意味抽出等

Decoder-only models: テキスト生成など

Encoder-decoder models or sequence-to-sequence models: 入力を参照してテキスト生成

Architectures vs. checkpoints

Architectures: モデルの定義(重みは含まない)
ex. BERT

Checkpoints: 重み
ex. bert-base-cased

Encoder models

トランスフォーマーのエンコーダのみを使用したモデル。
auto-encoding modelsと呼ばれる。

事前学習は通常、与えられたテキストのマスク部分を予測することで行う。

文分類、単語分類、抽出的質問応答など、文全体の理解を必要とするタスクに適している。

代表的なモデル

ALBERT
BERT
DistilBERT
ELECTRA
RoBERTa

Decoder models

トランスフォーマーのデコーダのみを使用したモデル。

アテンション層は文中でその単語の前に位置する単語にのみアクセスすることができる。
auto-regressive modelsと呼ばれる。

事前学習は通常、文中の次の単語を予測することで行う。

テキスト生成を含むタスクに適している。

代表的なモデル

CTRL
GPT
GPT-2
Transformer XL

Sequence-to-sequence models

トランスフォーマーののエンコーダ、デコーダ両方を使用したモデル。
Sequence-to-sequenceモデルとも呼ばれる。

エンコーダのアテンション層は初期文中のすべての単語にアクセスできるが、デコーダーのアテンション層は入力中のある単語の前に位置する単語にのみアクセスできる。

事前学習は通常、エンコーダモデル、デコーダモデルの様に行う事ができる(?)が、通常はもう少し複雑なものを含む。
例えば、T5は文中の複数の単語をマスクしてその単語列を予測することで学習する。

要約、翻訳、生成的質問応答など、与えられた入力に応じて新しい文章を生成するタスクに適している。

代表的なモデル

BART
mBART
Marian
T5

Bias and limitations

膨大なデータから学習しているので、様々なバイアスが掛かっていることを忘れないようにする。
(性差別的、人種差別的、同性愛嫌悪等)

Discussion