🍣

hugging faceの紹介

2022/11/09に公開約3,600字

TLDR

  • 最新の深層学習のモデルは肥大化し続けている
  • 学習済みモデルを使った転移学習が当たり前になっている
  • transformersにもり様々なディープラーニングモデルを簡潔に記述できるようになった
  • huggingfaceはtransformersを使ってモデルやデータセットの共有、公開が簡単にできるプラットフォームである

はじめに

深層学習のライブラリは何を使ってますか?keras learn、tensorflow、pytorch、、、いろいろなライブラリがありますよね。

昨今、特に自然言語処理の分野では、transformerが登場し、汎用的な特徴抽出が可能になったことで、事前に学習したものを再利用して個々のタスクを学習する、いわゆる転移学習が当たり前になってます。

そもそもtransformer系のモデルのパラメータが億、兆単位になってきて個々で学習させるのがコスト的に無理になってきたという背景もあります。今の深層学習では、従来のように個々でゼロから学習するのではなく、タスクに依存しない特徴抽出器を再利用して転移学習させるのがトレンドです。

そんななか、最近自然言語処理界隈で出て来たのがtransformersとhuggingfaceになります。

肥大化するモデル

最新のディープラーニングでは、パラメータ数をどんどん肥大化し、資源が潤沢でない限り、ゼロから学習することは困難になりました。具体的に言うと、有名なbertというモデルでは、パラメータ数はおそよ3億4千万、これをゼロから学習するには数十万件のデータセットが必要になります。かつそれらを学習するために、高性能なgpuも必要です。実際問題、それらを用意できる人は限られるでしょう。そこで重要になってくるのが転移学習という手法です。

モデルのパラメータ数の推移(link)

転移学習とは

転移学習とは、予め大量のデータを使って学習されたモデルを再利用して、別のドメインのタスクに適用させるようにタスク固有の層を追加して学習させることです。あくまでイメージですが、人間が言語を学びコミュニケーションをすることを学習する過程と同じようなものです。人間はコミュニケーションを学ぶ際、言語に対して理解していることが前提になっているかと思います。言語の意味や構造を理解し、その上でコミュニケーションを学習すると思います。転移学習においても同様で、例えば予め言語の構造を学習させたモデルを再利用して、質疑応答や翻訳など固有のタスクを解くモデルを学習するといったことが可能になります。

引用

とはいえ、実際にモデルを転移学習させて独自のモデルを作るには多くのプログラムを記述する必要がありそうです。深層学習のライブラリにはtensorflowやpytorch、sklearnなど様々な選択肢があり、それらを選定するのに加えて、どの事前学習済みモデルを使うのかも選択し、適切なチューニングを行い、トライアンドエラーを経てようやく最適なモデルを作ることができます。こうした労力を必要とするフローは従来であれば、それぞれと実装者が都度多くのコードを書き、多くの時間をかけて行ってきました。そのなかで、もっと楽にもっと汎用的に特定のライブラリに依存せず、素早く様々なモデルやデータセットを試すことができるツールはないか、もしくは作れないかと考えるのは自然な発想かと思います。そうした中生まれたのが、transformersとhuggingfaceというエコシステムです。

transformersとは

transformersはもともとは自然言語処理に特化してより簡潔に深層学習のコードをかけるようなインターフェイスを提供していましたが、すぐに自然言語処理以外の分野にも適応し普及しました。従来、多くのコードを書く必要があった深層学習のさまざまな処理がtransformersを使うことで非常に簡潔にわかりやすく書けるようになっています。例えば、単語のトークン化は通常のtelnetflow,pytorch等のライブラリであれば、少なくとも数十行書く必要がありますが、transformersでは1行で記述できます。

こうした簡潔さのほか、特定のライブラリに依存しない相互運用性も大きな特徴です。従来、深層学習のプログラムを書く際、様々なライブラリごとに固有の書き方をしていました。tensorflowで実装されているモデルをpytorchで使いたいという場合、変換するのは容易ではありません。transformersでは常に統一されたインターフェイスを提供しており、またtensorflowやtorchなどの主要ライブラリで書かれたモデルを簡単に組み合わせることができるようになっています。

hugging faceとは

huggingfaceはtransformersをベースに機械学習モデルの開発と共有、公開をするためのプラットフォームです.元々transformersのみでしたが、派生する各種ライブラリや各種データセット等を共有するエコシステムとして開発者の間で広がりました.
前述のtransformersのほか主に4つのライブラリ群から成り立っています.

hugging faceのエコシステム 引用

Tokenizers

自然言語処理におけるトークン化とは、生のテキストデータをモデルに入力する単位で分割、数値化するステップを言います.トークン化の手法はさまざまで、タスクに応じて適切に選択する必要があります.
hugging faceではさまざまなトークン化戦略が用意され、さまざまな方法を素早く試すことができるようになっています.

https://github.com/huggingface/tokenizers/

Datasets

機械学習のデータセット周りはどこからダウンロードするかで形式がバラバラだったり、タスクに応じて個々の処理が必要だったりで、かなり面倒です.
huggingfaceのdatasetsでは1万を超える種々のデータセットに対して標準的なインターフェースが用意されており、非常に楽にデータセットを利用できるようになっています.

https://github.com/huggingface/datasets

Accelerate

torchで学習時のインフラ部分(CPU, GPU, TPUなど)を抽象化し、簡単に切り替えができます.
従来では、学習時に環境の違いで動かなくて、コードを修正する必要があるケースがありましたが、Accelerateを使用することで、共通のコードで複数の環境に対応できます.

https://github.com/huggingface/accelerate

おわりに

機械学習のモデル開発はこれまでは実装に多くの労力を要するものでした。しかしながら、hugging faceのようなエコシステムの登場により、非常の簡潔に簡単に実装することができるようになり、機械学習モデル開発は新しく作るのではなく、既存のモデルを共有し使うというのが当たり前になっていくでしょう.

最後に、sweeepではエンジニア絶賛募集中です、興味のある方が覗いてみてくださいm
https://www.wantedly.com/companies/sweeep/projects

Discussion

ログインするとコメントできます