|
| 1 | +# MATLABのためのトランスフォーマーモデル |
| 2 | +[](https://app.circleci.com/pipelines/github/matlab-deep-learning/transformer-models) |
| 3 | + |
| 4 | +*README in English is [here](https://github.com/matlab-deep-learning/transformer-models/blob/master/README.md) |
| 5 | + |
| 6 | +このリポジトリは、MATLABで深層学習トランスフォーマーモデルを実装するための関数や例題が含まれています。なお、BERT、finBERT、GPT-2は、基本的には、BERTの"multilingual-cased"を除き英語の文書を用いて学習されており、入力値も英語であることが想定されています。 |
| 7 | + |
| 8 | + |
| 9 | +## 要件 |
| 10 | +### BERT・FinBERT |
| 11 | +- MATLABバージョン R2021a以降 |
| 12 | +- Deep Learning Toolbox |
| 13 | +- Text Analytics Toolbox |
| 14 | + |
| 15 | +### GPT-2 |
| 16 | +- MATLABバージョン R2020a以降 |
| 17 | +- Deep Learning Toolbox |
| 18 | + |
| 19 | +## はじめに |
| 20 | +このリポジトリをダウンロードするか、お手元のマシンに[クローン](https://www.mathworks.com/help/matlab/matlab_prog/use-source-control-with-projects.html#mw_4cc18625-9e78-4586-9cc4-66e191ae1c2c)してMATLABで開きます。 |
| 21 | + |
| 22 | +## 関数の説明 |
| 23 | +### bert |
| 24 | +`mdl = bert` により、学習済みBERTトランスフォーマーモデルが読み込まれます。初回実行時などは、必要に応じてモデルの重みもダウンロードされますので時間がかかります。出力値 `mdl` は、BERT用トークナイザ― `Tokenizer` と、モデルパラメータ `Parameters` を含む構造体です。 |
| 25 | + |
| 26 | +`mdl = bert("Model",modelName)` により、使用するBERTモデルの種類を指定します。: |
| 27 | + |
| 28 | +- `"base"` (既定値) - 12-layer、768-hidden |
| 29 | +- `"multilingual-cased"` - 12-layer、768-hidden。トークナイザーでは大文字と小文字が区別されます。このモデルは、多言語データで学習されています。 |
| 30 | +- `"medium"` - 8-layer、512-hidden |
| 31 | +- `"small"` - 4-layer、512-hidden |
| 32 | +- `"mini"` - 4-layer、256-hidden |
| 33 | +- `"tiny"` - 2-layer、128-hidden |
| 34 | + |
| 35 | +### bert.model |
| 36 | +`Z = bert.model(X,parameters)` は、指定されたパラメータを持つ符号化トークンの入力 `1`-by-`numInputTokens`-by-`numObservations` 配列上で BERT モデルによる推論を実行します。 出力 `Z` は、サイズ (`NumHeads*HeadSize`)-by-`numInputTokens`-by-`numObservations` の 配列です。要素 `Z(:,i,j)` は、入力トークン `X(1,i,j)` のBERT埋め込みに相当します。 |
| 37 | + |
| 38 | +`Z = bert.model(X,parameters,Name,Value)` は、1 つ以上の名前と値のペアの引数で指定された追加オプションを設定します。: |
| 39 | + |
| 40 | +- `"PaddingCode"` パディングトークンに対応する正の整数。デフォルトは `1` です。 |
| 41 | +- `"InputMask"` - `X` と同じサイズの論理配列,あるいは空の配列として指定します.このマスクは,パディングに対応するインデックス位置では偽でなければならず,それ以外の場所では真でなければならない.マスクが `[]` である場合,関数は PaddingCode の名前と値の組にしたがってパディングを決定します.デフォルトは `[]` です. |
| 42 | +- `"DropoutProb"` - 出力活性化に対するドロップアウトの確率。デフォルトは `0` です。 |
| 43 | +- `"AttentionDropoutProb"` - アテンション層で利用されるドロップアウトの確率。デフォルトは `0` です。 |
| 44 | +- `"Outputs"` - 出力を返すレイヤーのインデックス、正の整数のベクトル、または `"last"` として指定されます。`"Outputs"` が `"last"` の場合、この関数は最後のエンコーダ層からの出力のみを返します。デフォルトはが `"last"` です。 |
| 45 | +- `"SeparatorCode"` - 正の整数で指定されるセパレータトークン。デフォルトは `103` です。 |
| 46 | + |
| 47 | +### finbert |
| 48 | +`mdl = finbert` は、金融テキストのセンチメント(感情)分析のために、事前に学習されたBERTトランスフォーマーモデルを読み込みます。出力される `mdl` は、フィールド `Tokenizer` と `Parameters` を持つ構造体で、それぞれ BERTトークナイザーとモデルパラメータを含んでいます。 |
| 49 | + |
| 50 | +`mdl = finbert("Model",modelName)` にて、使用するFinBERTモデルの種類を指定します。: |
| 51 | +- `"sentiment-model"` (既定値) - ファインチューニングされたセンチメント分類モデル。 |
| 52 | +- `"language-model"` - BERT-Base アーキテクチャを使用する、FinBERT で事前学習された言語モデル。 |
| 53 | + |
| 54 | +### finbert.sentimentModel |
| 55 | +`sentiment = finbert.sentimentModel(X,parameters)` は、入力 `1`-by-`numInputTokens`-by-`numObservations` の各トークンを、指定されたパラメータで分類します。出力されるセンチメントは、カテゴリ `"positive"`, `"neutral"`, または `"negative"` からなるカテゴリ配列である。 |
| 56 | +`[sentiment, scores] = finbert.sentimentModel(X,parameters)` は、対応するセンチメントスコアを `[-1 1]` の範囲で返すこともできます。 |
| 57 | + |
| 58 | +### gpt2 |
| 59 | +`mdl = gpt2` は学習済み GPT-2 トランスフォーマーモデルを読み込み、初回実行時など、必要であればモデルの重みをダウンロードします。 |
| 60 | + |
| 61 | +### generateSummary |
| 62 | +`summary = generateSummary(mdl,text)` は、トランスフォーマーモデル `mdl` を用いて、文字列または `char` 配列 `text` の要約を生成します。出力される要約は char 配列である。 |
| 63 | + |
| 64 | +`summary = generateSummary(mdl,text,Name,Value)` は、1 つ以上の名前と値のペアの引数で指定された追加オプションを設定します。: |
| 65 | + |
| 66 | +* `"MaxSummaryLength"` - 生成されるサマリーのトークン数の最大値です。デフォルトは50です。 |
| 67 | +* `"TopK"` - 要約を生成する際にサンプリングするトークンの数です。デフォルトは 2 です。 |
| 68 | +* `"Temperature"` - GPT-2出力確率分布に適用される温度。デフォルトは1です。 |
| 69 | +* `"StopCharacter"` - 要約が完了したことを示す文字。デフォルトは `"."` です。 |
| 70 | + |
| 71 | +## 例題:BERTによるテキスト分類 |
| 72 | +事前学習済みBERTモデルの最も単純な使用方法は、特徴抽出器として使用することです。BERT モデルにより文書を特徴ベクトルに変換し、それを入力として使用して、深層学習分類ネットワークを学習することができます。 |
| 73 | + |
| 74 | +例題 [`ClassifyTextDataUsingBERT.m`](./ClassifyTextDataUsingBERT.m) では、工場レポートのデータセットを与えられた故障原因を分類するために事前学習済み BERT モデルを使用する方法を示しています。 |
| 75 | + |
| 76 | +## 例題:学習済みBERTモデルのファイン チューニング |
| 77 | +事前学習済みBERT モデルを最大限に活用するために、タスクに応じた BERT パラメータの重みを再学習し、微調整することが可能です。(=ファインチューニング) |
| 78 | + |
| 79 | +例題 [`FineTuneBERT.m`](./FineTuneBERT.m) では、工場レポートのデータセットが与えられたときに、故障原因を分類するために事前学習済みの BERT モデルを微調整する方法を示しています。 |
| 80 | + |
| 81 | +## 例題:FinBERTによる感情分析 |
| 82 | +FinBERTは、金融テキストデータで学習し、センチメント分析用にファインチューニングされたセンチメント分析モデルです。 |
| 83 | + |
| 84 | +例題 [`SentimentAnalysisWithFinBERT.m`](./SentimentAnalysisWithFinBERT.m) では、事前学習済み FinBERT モデルを使って、金融ニュースレポートの感情分類を行う方法を示しています。 |
| 85 | + |
| 86 | +## 例題:BERTおよびfinBERTによるマスク語予測 |
| 87 | +BERTモデルは、様々なタスクを実行するために学習されている。BERTによって成し遂げられるタスクの一つは、マスク値([MASK]値)で置換された、テキスト中のトークンを予測するタスクです。Masked Language Modelとしても知られています。 |
| 88 | + |
| 89 | +例題 [`PredictMaskedTokensUsingBERT.m`](./PredictMaskedTokensUsingBERT.m) では、事前学習済み BERT モデルを使用して、マスクされたトークンを予測し、トークン確率を計算する方法を示しています。 |
| 90 | + |
| 91 | +例題 [`PredictMaskedTokensUsingFinBERT.m`](./PredictMaskedTokensUsingFinBERT.m) では、事前学習済み FinBERT モデルを使用して、金融テキストのマスクトークンを予測する方法と、トークン確率を計算する方法を示しています。 |
| 92 | + |
| 93 | +## 例題:GPT-2による文書要約 |
| 94 | +GPT-2などのトランスフォーマーネットワークは、テキストの一部を要約するために使用することができます。学習済みGPT-2トランスフォーマーは、最初の単語列を入力としてテキストを生成することが可能です。このモデルは、様々なウェブページやインターネットフォーラムに残されたコメントに対して学習させたものです。 |
| 95 | + |
| 96 | +これらのコメントの多くには「TL;DR」(Too long, didn't read)という文で示される要約が含まれているので、変換器モデルを使って、入力テキストに「TL;DR」を付加して要約を生成することができます。関数 `generateSummary` は、入力テキストを受け取って、文字列 `"TL;DR"` を自動的に付加し、要約を生成します。 |
| 97 | + |
| 98 | +例題 [`SummarizeTextUsingTransformersExample.m`](./SummarizeTextUsingTransformersExample.m) では、GPT-2を用いてテキストを要約する方法を紹介しています。 |
0 commit comments