このシリーズでは、自然言語処理において主流であるTransformerを中心に、環境構築から学習の方法までまとめます。
今回の記事ではHuggingface Transformersの入門の初回として、自然言語処理とTransformersの概要について紹介します。
Google colabを使用して、簡単に最新の自然言語処理モデルを実装することができますので、ぜひ最後までご覧ください。
今回の内容
・自然言語処理とTransformer
・Transformerとは
・Transformerのアーキテクチャ
・事前学習とファインチューニング
・Huggingface Transformersとは
自然言語処理とTransformer
概要
自然言語処理「NLP (Natural Language Processing)」とは、人が使っている言語(自然言語)をコンピュータで処理・分析する技術全般のことを指します。
自然言語とは、普段私たちがコミュニケーションをとる際に使う言葉のことをいい、数式やプログラミング言語など人工的、形式的に定義された言語を「人工言語」といいます。
自然言語は日常的に人が使用する言葉であり、曖昧さを多く含んでおり、同じ言葉でも、話す人物や文脈によって違う意味を示すことも珍しくないため、コンピュータで機械的に分析するのには高度な技術が求められます。
2017年の「Transformer」の登場以降、自然言語処理の技術が飛躍的に進化しており、実用化も進んでいます。
自然言語処理の分野では、目的ごとに以下のようなタスクに分類されており、必要に応じて使い分けを行います。
代表的なタスクを以下に示します。
タスク名称 | 日本語名称 | 主な用途 |
text-classification | テキスト分類 | テキスト分類は、テキストにラベルまたはクラスを割り当てる一般的な NLP タスクです。 |
sentiment-analysis | 感情分析 | テキスト分類の応用で、ラベルを感情表現にすることで、文章中の感情を分析することができます。 |
language-modeling | 言語モデル | 言語モデリングは、文中の単語を予測します。言語モデリングには 2 つの形式があります。 ・因果言語モデリングは、一連のトークンの次のトークンを予測し、モデルは左側のトークンのみに注意を向けることができます。 ・マスク言語モデリングは、シーケンス内のマスクされたトークンを予測するため、フィル マスク タスクとも呼ばれます。マスク言語モデリングのモデルでは、左側のコンテキストだけでなく、シーケンス全体のコンテキストを十分に理解する必要があります。 |
token-classification | 固有表現抽出 | トークン分類は、テキスト内のいくつかのトークンにラベルが割り当てられる自然言語理解タスクです。いくつかの一般的なトークン分類サブタスクは、固有表現認識 (NER) と品詞 (PoS) タグ付けです。NER モデルは、日付、個人、場所など、テキスト内の特定のエンティティを識別するようにトレーニングできます。PoS タグ付けは、たとえば、テキスト内のどの単語が動詞、名詞、および句読点であるかを識別します。 |
multiple-choice | 多肢選択 | 質問応答に似ていますが、いくつかの回答候補がコンテキストとともに提供される点が異なります。 |
question-answering | 質問応答 | 質問応答タスクは、質問に対して回答を返します。質問応答には、次の 2 つの一般的な形式があります。 抽出: 与えられた文脈から答えを抽出します。 抽象的: 質問に正しく答えるコンテキストから回答を生成します。 |
text-generation | テキスト生成 | テキスト生成 (オープンエンド テキスト生成とも呼ば れます) の目標は、特定のコンテキストからの継続であるテキストの一貫した部分を作成することです。 |
summarization | 要約 | 要約は、すべての重要な情報をキャプチャするドキュメントまたは記事の短いバージョンを作成します。翻訳と並んで、シーケンスからシーケンスへのタスクとして定式化できるタスクのもう 1 つの例です。要約は次のとおりです。 抽出: ドキュメントから最も関連性の高い情報を抽出します。 抽象的: 最も関連性の高い情報を捉えた新しいテキストを生成します。 |
translation | 翻訳 | 翻訳では、一連のテキストをある言語から別の言語に変換します。これは、sequence-to-sequence 問題として定式化できるいくつかのタスクの 1 つであり、視覚および音声タスクに拡張される強力なフレームワークです。 |
bertology | BERTology | 大規模なTransformerの調査に関する研究分野が拡大しています 。これを「BERTology」とも呼びます。 |
Transformerとは
Transformerの概要
「Transformer」は2017年にGoogleが「Attention is all you need」で発表した深層学習モデルです。
現在では、自然言語処理に利用する深層学習モデルの主流になっています。
これまでの自然言語処理分野で多く使われていた「RNN」(Recurrent Neural Network)や「CNN」(Convolutional Neural Network)を利用せず、Attentionのみを用いたEncoder-Decoder型のモデルとなっています。
「Transformer」が登場して以降、多くの自然言語処理モデルが再構築され、過去を上回る成果を上げています。
最近では自然言語処理だけでなく、ViTやDETRなどといった画像認識にも応用されています。
これまでに登場した主なモデルを以下に示します。
登場年 | 主なモデル |
---|---|
2017年 | ・「Attention is all you need」というタイトルの論文で、初めてTransformerモデルの提案がなされた。この論文では、翻訳タスクを行うものであった。 |
2018年 | ・学習済みTransformerモデルとしてGPTが初めて登場。ファインチューニングによる様々なNLPタスクへの適用がなされた。 ・BERTが発表される。 |
2019年 | ・GPTの改良版として、よりサイズも大きいGPT2が誕生した。 ・BERTの蒸留モデルであるDistilBERTが誕生。BERTの97%の精度を維持しつつも、推論速度が60%速く、モデルのサイズも40%小さい。 ・BARTとT5という大規模データセットで学習済みのsequence-to-sequenceモデルが誕生。 |
2020年 | ・GPT-2よりも更に大きいGPT-3が誕生。Few-shot learningによりfine-tuningのコストを出来るだけ抑えて、様々なタスクに転用できるモデル。 ・Transformerを画像認識に応用したVision Transformerが誕生。画像分類タスクにおいて、CNN(畳み込み)を用いずに最高性能の記録。 |
2021年 | ・GPT3と同等の性能でありながら、より小型なモデルであるGPT-NEOやGPT-J-6Bが誕生。 |
2017年の登場以降、多くの派生モデルが登場していることがわかります。
Transformerの特徴
Transformerは従来のモデルをベースにしつつ、様々な工夫によって、計算を高速化した上で文脈情報を保持するため、より正確な変換を実現しました。
主な改善点として、以下の3点が挙げられます。
①RNNやCNNを使わずAttention層のみで構成
並列計算が可能となり、高速化が可能となりました。
②PositionalEncording層の採用
入力する単語データに「文全体における単語の位置情報」を埋め込むことで、本来RNNなどを利用しないことで失われてしまう文脈情報を保持することに成功しました。
③Query-Key-ValueモデルをAttention層に採用
初期のAttentionにおける単純な「Source-Target型」から改良され、より単語同士の照応関係(アライメント)を正確に反映することができるようになったことで、精度向上が図られています。
Transformerのアーキテクチャ
アーキテクチャ
まずは、Transformerの全体像を示します。
上図において、左半分がエンコーダ、右半分がデコーダ になっています。
それぞれ、エンコーダは入力データを多次元の数値ベクトルでの表現に変換する特徴表現の役割を持ち、デコーダはエンコーダの出力(入力データの特徴表現)と別の入力データを受け取り、出力データを生成します。
Transformerの派生モデルとして、エンコーダとデコーダを切り離して個別に使用するものもあります。
エンコーダモデルの例としてBERT、デコーダモデル例としてGPTがあります。
Attention層
Transformerモデルの重要な要素として、「Attention」という技術があります。
Attentionは文中のある単語の意味を理解する時に、文中の単語のどれに注目すれば良いかを表すスコアのことと言えます。
例えば翻訳タスクにおいては、入力データのどこに注目して、出力結果を予測するかを数値により重み付けして表現することができます。
以下の図のように、どの単語に注目しているかを判断していることがわかります。
事前学習とファインチューニング
Transformerベースのモデルでは、精度向上のため言語モデルによる事前学習が行われています。
事前学習によってモデルの精度を大幅に上げることができるため、Transformerベースのモデルでは必要不可欠な存在となっています。
以下にBERTの例を示します。
事前学習
事前学習とは、従来の教師あり学習のように学習用データにラベル付けがされていなくても、機械的にタスクを設定してそれを元に学習を進める手法です。
BERTでは、この事前学習としてMLM(Masked Language Modeling)とNSP(Next Sentence Prediction)を用いており、これによりモデルの精度が大幅に上昇しました
事前学習では、BooksCorpus(単語数:8億)とEnglish Wikipedia(単語数:25億)をデータセットして、2つのタスクを解きます。
Masked Language Modeling (MLM) | 入力の15%のトークンを[Mask]トークンでマスクし、元のトークンを当てるという穴埋め問題を解くタスクです。マスクする単語はランダムに、80%を [Mask]トークンで置き換える、10%をランダムに選んだトークンで置き換える10%をそのままにするという割合になっています。 |
Next Sentence Prediction (NSP) | データセット内から2文選んで、それらが連続した文かどうかを当てるタスクです。 |
これらのタスクは人間があらかじめラベル付けする必要がなく、機械的に自動でタスクを生成することができます。
そのため、数億にも及ぶ多くの単語を学習することが可能となります。
ファインチューニング
事前学習の重みを初期値として、ラベルありデータでファインチューニングを行います。
ファインチューニングは事前学習よりも学習が軽く、おおよそ数時間程度が学習が終わります。
ファインチューニングの必要性
前述のBERTモデルでは、数億も及ぶ単語を事前学習させています。
DistilBERTなどのいくつかの例外を除けば、モデルの精度を向上させるためには、モデルのサイズと事前トレーニングされるデータの量を増やすことが必要となります。
しかし、そのためには膨大な計算資源と時間が必要になります。
例えば、GPT3の事前学習には、電気代だけで5億円もの費用がかかったとされており、個人で言語モデルを事前学習することは非現実的であると言えます。
そこで、公開されている事前学習されたモデルをファインチューニングすることで、個人のレベルでも実用的にNLPのタスクを活用することができるようになります。
以降では、モデルをファインチューニングして簡単に使用することができる「Huggingface Transformers」について紹介していきます。
Huggingface Transformersとは
概要
「Hugging Face」とは米国のHugging Face社が提供している、自然言語処理に特化したディープラーニングのフレームワークです。
「Huggingface Transformers」は、先ほど紹介したTransformerを実装するためのフレームワークであり、「自然言語理解」と「自然言語生成」の最先端の汎用アーキテクチャ(BERT、GPT-2など)と、何千もの事前学習済みモデルを提供しています。
ソースコードは全てGitHub上で公開されており、誰でも無料で使うことができます。
事前学習済みモデル
Hugging Faceではタスクに応じた様々な事前学習済みモデルが提供されています。
例えば、以下のようなタスクのモデルを簡単に実装することができます。
タスク名称 | 日本語名称 | 主な用途 |
text-classification | テキスト分類 | テキスト分類は、テキストにラベルまたはクラスを割り当てる一般的な NLP タスクです。 |
sentiment-analysis | 感情分析 | テキスト分類の応用で、ラベルを感情表現にすることで、文章中の感情を分析することができます。 |
language-modeling | 言語モデル | 言語モデリングは、文中の単語を予測します。言語モデリングには 2 つの形式があります。 ・因果言語モデリングは、一連のトークンの次のトークンを予測し、モデルは左側のトークンのみに注意を向けることができます。 ・マスク言語モデリングは、シーケンス内のマスクされたトークンを予測するため、フィル マスク タスクとも呼ばれます。マスク言語モデリングのモデルでは、左側のコンテキストだけでなく、シーケンス全体のコンテキストを十分に理解する必要があります。 |
token-classification | 固有表現抽出 | トークン分類は、テキスト内のいくつかのトークンにラベルが割り当てられる自然言語理解タスクです。いくつかの一般的なトークン分類サブタスクは、固有表現認識 (NER) と品詞 (PoS) タグ付けです。NER モデルは、日付、個人、場所など、テキスト内の特定のエンティティを識別するようにトレーニングできます。PoS タグ付けは、たとえば、テキスト内のどの単語が動詞、名詞、および句読点であるかを識別します。 |
multiple-choice | 多肢選択 | 質問応答に似ていますが、いくつかの回答候補がコンテキストとともに提供される点が異なります。 |
question-answering | 質問応答 | 質問応答タスクは、質問に対して回答を返します。質問応答には、次の 2 つの一般的な形式があります。 抽出: 与えられた文脈から答えを抽出します。 抽象的: 質問に正しく答えるコンテキストから回答を生成します。 |
text-generation | テキスト生成 | テキスト生成 (オープンエンド テキスト生成とも呼ば れます) の目標は、特定のコンテキストからの継続であるテキストの一貫した部分を作成することです。 |
summarization | 要約 | 要約は、すべての重要な情報をキャプチャするドキュメントまたは記事の短いバージョンを作成します。翻訳と並んで、シーケンスからシーケンスへのタスクとして定式化できるタスクのもう 1 つの例です。要約は次のとおりです。 抽出: ドキュメントから最も関連性の高い情報を抽出します。 抽象的: 最も関連性の高い情報を捉えた新しいテキストを生成します。 |
translation | 翻訳 | 翻訳では、一連のテキストをある言語から別の言語に変換します。これは、sequence-to-sequence 問題として定式化できるいくつかのタスクの 1 つであり、視覚および音声タスクに拡張される強力なフレームワークです。 |
実際のモデルはこちらからご確認ください。
まとめ
最後までご覧いただきありがとうございました。
今回の記事ではHuggingface Transformersの入門として、自然言語処理とTransformersの概要を紹介しました。
次回の記事では、実際に公開されている代表的なモデルと実装例について紹介します。
このシリーズでは、自然言語処理全般に関するより詳細な実装や学習の方法を紹介しておりますので、是非ご覧ください。
【次回】