MATLAB 的 Transformer 模型
本存储库在 MATLAB 中实现了深度学习 transformer 模型。
翻译
要求
BERT 和 FinBERT
- MATLAB R2021a 或更高版本
- Deep Learning Toolbox
- Text Analytics Toolbox
GPT-2
- MATLAB R2020a 或更高版本
- Deep Learning Toolbox
入门
下载或克隆此存储库到你的机器上,并在 MATLAB 中打开它。
函数
bert
mdl = bert
加载预训练的 BERT transformer 模型,如有必要,会下载模型权重。输出 mdl
是一个结构体,包含字段 Tokenizer
和 Parameters
,分别包含 BERT 分词器和模型参数。
mdl = bert("Model",modelName)
指定要使用的 BERT 模型变体:
"base"
(默认) - 一个 12 层模型,隐藏层大小为 768。"multilingual-cased"
- 一个 12 层模型,隐藏层大小为 768。分词器区分大小写。此模型在多语言数据上训练。"medium"
- 一个 8 层模型,隐藏层大小为 512。"small"
- 一个 4 层模型,隐藏层大小为 512。"mini"
- 一个 4 层模型,隐藏层大小为 256。"tiny"
- 一个 2 层模型,隐藏层大小为 128。"japanese-base"
- 一个 12 层模型,隐藏层大小为 768,在日语文本上预训练。"japanese-base-wwm"
- 一个 12 层模型,隐藏层大小为 768,在日语文本上预训练。此外,该模型在掩码语言建模(MLM)目标中启用了全词掩码进行训练。
bert.model
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 嵌入。
Z = bert.model(X,parameters,Name,Value)
使用一个或多个名称-值对指定附加选项:
"PaddingCode"
- 对应填充令牌的正整数。默认值为1
。"InputMask"
- 指示要包含在计算中的元素的掩码,指定为与X
大小相同的逻辑数组或空数组。掩码在对应填充的索引位置必须为 false,在其他位置为 true。如果掩码为[]
,则函数根据PaddingCode
名称-值对确定填充。默认值为[]
。"DropoutProb"
- 输出激活的丢弃概率。默认值为0
。"AttentionDropoutProb"
- 注意力层中使用的丢弃概率。默认值为0
。"Outputs"
- 要返回输出的层的索引,指定为正整数向量或"last"
。如果"Outputs"
为"last"
,则函数仅返回最终编码器层的输出。默认值为"last"
。"SeparatorCode"
- 指定为正整数的分隔符令牌。默认值为103
。
finbert
mdl = finbert
加载用于金融文本情感分析的预训练 BERT transformer 模型。输出 mdl
是一个结构体,包含字段 Tokenizer
和 Parameters
,分别包含 BERT 分词器和模型参数。
mdl = finbert("Model",modelName)
指定要使用的 FinBERT 模型变体:
"sentiment-model"
(默认) - 经过微调的情感分类器模型。"language-model"
- FinBERT 预训练语言模型,使用 BERT-Base 架构。
finbert.sentimentModel
sentiment = finbert.sentimentModel(X,parameters)
使用指定参数对输入的 1
-by-numInputTokens
-by-numObservations
编码令牌数组进行情感分类。输出情感是一个分类数组,类别为 "positive"
、"neutral"
或 "negative"
。
[sentiment, scores] = finbert.sentimentModel(X,parameters)
还返回范围在 [-1 1]
内的对应情感分数。
gpt2
mdl = gpt2
加载预训练的 GPT-2 transformer 模型,如有必要,会下载模型权重。
generateSummary
summary = generateSummary(mdl,text)
使用 transformer 模型 mdl
生成字符串或 char
数组 text
的摘要。输出摘要是一个字符数组。
summary = generateSummary(mdl,text,Name,Value)
使用一个或多个名称-值对指定附加选项。
"MaxSummaryLength"
- 生成摘要的最大令牌数。默认值为 50。"TopK"
- 生成摘要时要采样的令牌数。默认值为 2。"Temperature"
- 应用于 GPT-2 输出概率分布的温度。默认值为 1。"StopCharacter"
- 表示摘要完成的字符。默认值为"."
。
示例:使用BERT对文本数据进行分类
预训练BERT模型最简单的用途是将其作为特征提取器。具体来说,您可以使用BERT模型将文档转换为特征向量,然后将这些向量用作输入来训练深度学习分类网络。
示例 ClassifyTextDataUsingBert.m
展示了如何使用预训练的BERT模型来分类工厂报告数据集中的故障事件。此示例需要Text Analytics Toolbox示例"准备文本数据用于分析"中的 factoryReports.csv
数据集。
示例:微调预训练的BERT模型
为了充分利用预训练的BERT模型,您可以针对您的任务重新训练和微调BERT参数权重。
示例 FineTuneBERT.m
展示了如何微调预训练的BERT模型,以分类工厂报告数据集中的故障事件。此示例需要Text Analytics Toolbox示例"准备文本数据用于分析"中的 factoryReports.csv
数据集。
示例 FineTuneBERTJapanese.m
展示了使用预训练的日语BERT模型的相同工作流程。此示例需要Text Analytics Toolbox示例"分析日语文本数据"中的 factoryReportsJP.csv
数据集,该数据集在R2023a或更高版本中可用。
示例:使用FinBERT进行情感分析
FinBERT是一个在金融文本数据上训练并针对情感分析进行微调的模型。
示例 SentimentAnalysisWithFinBERT.m
展示了如何使用预训练的FinBERT模型对金融新闻报告进行情感分类。
示例:使用BERT和FinBERT预测被掩蔽的标记
BERT模型被训练来执行各种任务。其中一项任务被称为掩蔽语言建模,即预测文本中被掩蔽值替换的标记。
示例 PredictMaskedTokensUsingBERT.m
展示了如何使用预训练的BERT模型预测被掩蔽的标记并计算标记概率。
示例 PredictMaskedTokensUsingFinBERT.m
展示了如何使用预训练的FinBERT模型预测金融文本中被掩蔽的标记并计算标记概率。
示例:使用GPT-2进行文本摘要
像GPT-2这样的Transformer网络可以用于对文本进行摘要。经过训练的GPT-2 transformer可以在给定初始单词序列作为输入的情况下生成文本。该模型是在各种网页和互联网论坛上留下的评论上进行训练的。
由于许多这些评论本身包含以"TL;DR"(太长不看)声明标示的摘要,您可以通过在输入文本后附加"TL;DR"来使用transformer模型生成摘要。generateSummary
函数接收输入文本,自动附加字符串"TL;DR"并生成摘要。
示例 SummarizeTextUsingTransformersExample.m
展示了如何使用GPT-2对一段文本进行摘要。