モチベーション

前回 Hugging Face という機械学習界隈の GitHub っぽいものを見つけた。自分が探していたものっぽさがあるのでその使い方を学ぶために、Introduction - Hugging Face Course をみてみた。

コースの構成

Hugging Faceが提供するエコシステムでNLPやってみようとコースみたいだ。エコシステムとは以下を指すみたいだが、素人なのでなんのことかわからない。

  • Hugging Face Hub
  • Transformers
  • Datasets
  • Tokenizers
  • Accelerate

コースは全 12 Chapter から構成され、それぞれの Chapter は6-8時間かかると想定されているとのことなので、単純に計算すると100時間くらいはかかる。

コースの Chapter 1 ~ 4 で Transformers ライブラリーの使い方を学ぶ。モデルがどのように動作するのか、Hugging Face Hubでどう使うのか、また結果をHugging Face Hub で共有する方法を学ぶらしい。Chapter 5 ~ 8 で Datasets とTokenizersを学ぶ。これが終われば基本的なNLPの問題をとけるようになるらしい。Chapter 9 ~ 12 ではNLPの他にTransformer モデルを使う方法を学ぶ。これは、音声認識やコンピュータビジョンなど。最終的にTransformerモデルが幅広い機械学習の問題に適用可能ということがわかるらしい。

コースに必要な事前知識

Pythonはいいんだけど、ディープラーニングの知識はないので、ちょっとやって無理そうだったら1冊くらい機械学習の本を読んで戻ってこよう。PyTorch や TensorFlow は知らなくてもいいけど、知っていると理解を助けるとのこと

Chapter 1-2: Natural Language Processing (NLP)

from Natural Language Processing - Hugging Face Course

What is 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

NLPはテキストだけでなく音声認識、コンピュータビジョン、音声の字幕(transcript)、画像の説明文(description)も含む。

Why is it challenging?

学習するために機械が分かる形で言語を表現する必要があること。

Chapter 1-3: Transformers, what can they do?

Tesing on Colab

Transformers are everywhere!

Transformer モデルはあらゆる種類の NLP タスクで使われる。 Hugging Face や Transformer モデルを使っている企業や組織(Google, Microsoft, Meta を含む)がある。それらは、Hugging Face にてモデルをエコシステムと共有してくれている。

GitHub - huggingface/transformersがそのモデルにあたり、Model Hubでは学習済みのモデルが誰でも使えるように共有されている。

Transformers are everywhere!

Transformers ライブラリの最も基本的なオブジェクトは pipeline (pipeline()で生成)。モデル、事前処理、事後処理を接続する役割を持つ。

from transformers import pipeline

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

上の pipeline はデフォルトでは英語の感情分析用にチューニングされた事前学習モデルを選択する。classifier オブジェクト生成時にキャッシュするため、再度実行するときはモデルはキャッシュから取得する。pipeline は便利。

Available pipelines

Pipelines で共有されている。

  • 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

そのうち使いながらそれぞれがどのように使えるかわかればいいと思った。いくつかの利用方法を以下に示す。

Zero-shot classification pipeline

allows you to specify which labels to use for the classification, so you don’t have to rely on the labels of the pretrained model.

from transformers import pipeline

classifier = pipeline("zero-shot-classification")
classifier(
    "This is a course about the Transformers library",
    candidate_labels=["education", "politics", "business"],
)
# Out:
# {'sequence': 'This is a course about the Transformers library',
#  'labels': ['education', 'business', 'politics'],
#  'scores': [0.8445963859558105, 0.111976258456707, 0.043427448719739914]}
Text generation pipeline

provide a prompt and the model will auto-complete it by generating the remaining text.

from transformers import pipeline

generator = pipeline("text-generation")
generator("In this course, we will teach you how to")

# [{'generated_text': 'In this course, we will teach you how to understand and use '
#                     'data flow and data interchange when handling user data. We '
#                     'will be working with one or more of the most commonly used '
#                     'data flows — data flows of various types, as seen by the '
#                     'HTTP'}]
Mask filling pipeline
from transformers import pipeline

unmasker = pipeline("fill-mask")
unmasker("This course will teach you all about <mask> models.", top_k=2)

# Out:
# [{'sequence': 'This course will teach you all about mathematical models.',
#   'score': 0.19619831442832947,
#   'token': 30412,
#   'token_str': ' mathematical'},
#  {'sequence': 'This course will teach you all about computational models.',
#   'score': 0.04052725434303284,
#   'token': 38163,
#   'token_str': ' computational'}]
Named entity recognition pipeline

Named entity recognition (NER) is a task where the model has to find which parts of the input text correspond to entities such as persons, locations, or organizations.

from transformers import pipeline

ner = pipeline("ner", grouped_entities=True)
ner("My name is Sylvain and I work at Hugging Face in Brooklyn.")

# Out:
# [{'entity_group': 'PER', 'score': 0.99816, 'word': 'Sylvain', 'start': 11, 'end': 18},
#  {'entity_group': 'ORG', 'score': 0.97960, 'word': 'Hugging Face', 'start': 33, 'end': 45},
#  {'entity_group': 'LOC', 'score': 0.99321, 'word': 'Brooklyn', 'start': 49, 'end': 57}
# ]
Question answering pipeline

The question-answering pipeline answers questions using information from a given context:

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",
)

# Out:
# {'score': 0.6385916471481323, 'start': 33, 'end': 45, 'answer': 'Hugging Face'}
Summarization pipeline

Summarization is the task of reducing a text into a shorter text while keeping all (or most) of the important aspects referenced in the text.

from transformers import pipeline

summarizer = pipeline("summarization")
summarizer(
    """
    America has changed dramatically during recent years. Not only has the number of 
    graduates in traditional engineering disciplines such as mechanical, civil, 
    electrical, chemical, and aeronautical engineering declined, but in most of 
    the premier American universities engineering curricula now concentrate on 
    and encourage largely the study of engineering science. As a result, there 
    are declining offerings in engineering subjects dealing with infrastructure, 
    the environment, and related issues, and greater concentration on high 
    technology subjects, largely supporting increasingly complex scientific 
    developments. While the latter is important, it should not be at the expense 
    of more traditional engineering.

    Rapidly developing economies such as China and India, as well as other 
    industrial countries in Europe and Asia, continue to encourage and advance 
    the teaching of engineering. Both China and India, respectively, graduate 
    six and eight times as many traditional engineers as does the United States. 
    Other industrial countries at minimum maintain their output, while America 
    suffers an increasingly serious decline in the number of engineering graduates 
    and a lack of well-educated engineers.
"""
)

# Out:
# [{'summary_text': ' America has changed dramatically during recent years . The '
#                   'number of engineering graduates in the U.S. has declined in '
#                   'traditional engineering disciplines such as mechanical, civil '
#                   ', electrical, chemical, and aeronautical engineering . Rapidly '
#                   'developing economies such as China and India, as well as other '
#                   'industrial countries in Europe and Asia, continue to encourage '
#                   'and advance engineering .'}]
Translation pipeline

For translation, you can use a default model if you provide a language pair in the task name (such as “translation_en_to_fr”), but the easiest way is to pick the model you want to use on the Model Hub.

from transformers import pipeline

translator = pipeline("translation", model="Helsinki-NLP/opus-mt-fr-en")
translator("Ce cours est produit par Hugging Face.")

# Out:
# [{'translation_text': 'This course is produced by Hugging Face.'}]

The Inference API

それぞれのモデルのページに Inference を試せる機能があり、モデルの使用感をWeb上で確認できる。

The Inference API that powers the widget is also available as a paid product, which comes in handy if you need it for your workflows. See the pricing page for more details.

お金を払うとウィジェットからHugging Faceにあるモデルを使ったInferenceができるようになるっぽい。

所感

Transformers ライブラリ便利すぎる・・・GitHub - huggingface/transformersはTransformerモデルを構築だけでなく、学習済みモデルをColabから使えるので便利そう。学習済みのモデルが置いてあるModel Hubも使っていきたい。それぞれの ModelはHugging Face の Inference API を使って Web 画面から使ってみることができるので手元で色々やる前に browser上で何ができるか確かめるのが良さそう。

読んでいる書籍

以下の本の”2.3 ADALINEと学習の収束”まで読んだ。

Python機械学習プログラミング PyTorch&scikit-learn編 impress top gearシリーズ
  • Author: Sebastian Raschka
  • Manufacturer: インプレス
  • Publish date: 2022-12-15T00:00:00.000Z
  • 現在地

    Hugging Face はコミュニティよりはエコシステムっぽいのでそのように変更。

    参考