你好,我想使用特定的变压器编码器模型,例如roberta-large,而不是默认的roberta,它加载了roberta-base。有没有办法实现这一点?
roberta-large
roberta
roberta-base
r6hnlfcb1#
你好,你可以使用 auto_transformer,即:
auto_transformer
import pandas as pd import yaml from ludwig.api import LudwigModel config = """ input_features: - name: text type: text encoder: auto_transformer pretrained_model_name_or_path: 'roberta-large' output_features: - name: category type: category trainer: epochs: 1 """ model = LudwigModel(yaml.load(config), backend="local") df = pd.DataFrame( { "text": ["Suomessa vaihtuu kesän aikana sekä pääministeri että valtiovarain"], "category": ["Suomi"], } ) model.train(df) model.predict(df)
相关讨论:#2057文档:https://ludwig-ai.github.io/ludwig-docs/0.5/configuration/features/text_features/#autotransformer
vs91vp4v2#
感谢@justinxzhao提供的示例!我想更深入地了解Ludwig的工作原理。指定的编码器(例如,roberta-large)是在对文本序列进行编码后用于训练的模型吗?还是用于获取序列嵌入的编码器,该嵌入随后被输入到另一个模型(不确定它是什么黑盒模型)?提出这个问题是因为,如果我们的数据中有多个文本序列(例如,问题 (type: text, encoder: auto_transformer, pretrained_model_name_or_path: 'roberta-large') 和段落 (type: text, encoder: auto_transformer, pretrained_model_name_or_path: 'bert-base') ),每个都有一个唯一的编码器,我应该如何指定将两个序列嵌入都输入到哪个编码器模型中?
(type: text, encoder: auto_transformer, pretrained_model_name_or_path: 'roberta-large')
(type: text, encoder: auto_transformer, pretrained_model_name_or_path: 'bert-base')
ttcibm8c3#
指定的编码器(例如,roberta-large)是在对文本序列进行编码后用于训练的模型,还是用于获得序列嵌入的编码器,该嵌入随后被输入到另一个模型(不确定它是什么黑盒模型)?以下是发生的事情的顺序:
nn.Linear
bert-base
question: "...x..." passage: "...y..."
变为:
combined_text: "question ...x... SEP passage ...y..."
序列长度变得更长,但是一个用于组合文本的变压器应该比一个用于每个文本输入特征的变压器训练得更快。
nhn9ugyo4#
感谢@justinxzhao的详细解释。提到了两个变压器模型的例子,以了解Ludwig中的编码器是否执行两项任务 - 对文本序列进行编码和对编码器中指定的模型进行训练(基本上,它是否只是一个编码器或编码器+编码器层)。
fafcakar5#
你好@justinxzhao!我最近遇到了一个类似的机器学习框架-Lightwood。与Ludwig相比,它们都具有处理多种输入类型功能,根据输入类型对它们进行预处理,对输入进行编码,使用编码后的输入训练模型(强调模型),将训练好的模型的输出解码为输出特征。在Lightwood中,可以在这里提供可能用于训练的模型-https://lightwood.io/mixer.html。以类似的方式,是否有一个列表列出了可以使用Ludwig训练的可能模型?如果有,我们如何指定要训练的首选模型(使用组合器的连接输出)?谢谢!
5条答案
按热度按时间r6hnlfcb1#
你好,
你可以使用
auto_transformer
,即:相关讨论:
#2057
文档:
https://ludwig-ai.github.io/ludwig-docs/0.5/configuration/features/text_features/#autotransformer
vs91vp4v2#
感谢@justinxzhao提供的示例!
我想更深入地了解Ludwig的工作原理。指定的编码器(例如,roberta-large)是在对文本序列进行编码后用于训练的模型吗?还是用于获取序列嵌入的编码器,该嵌入随后被输入到另一个模型(不确定它是什么黑盒模型)?
提出这个问题是因为,如果我们的数据中有多个文本序列(例如,问题
(type: text, encoder: auto_transformer, pretrained_model_name_or_path: 'roberta-large')
和段落(type: text, encoder: auto_transformer, pretrained_model_name_or_path: 'bert-base')
),每个都有一个唯一的编码器,我应该如何指定将两个序列嵌入都输入到哪个编码器模型中?ttcibm8c3#
指定的编码器(例如,roberta-large)是在对文本序列进行编码后用于训练的模型,还是用于获得序列嵌入的编码器,该嵌入随后被输入到另一个模型(不确定它是什么黑盒模型)?
以下是发生的事情的顺序:
roberta-large
相同的分词器对文本序列进行预处理和分词。roberta-large
模型。nn.Linear
层,输出大小为2。作为这个问题,如果我们的数据中有多个文本序列(例如,问题
(type: text, encoder: auto_transformer, pretrained_model_name_or_path: 'roberta-large')
和文章(type: text, encoder: auto_transformer, pretrained_model_name_or_path: 'bert-base')
),每个都有唯一的编码器,我应该如何指定将两个序列嵌入都输入到哪个编码器模型?Combiner将所有输入特征编码器的输出组合在一起,然后在提供组合表示给输出特征解码器之前提供组合表示。您可以在配置中的组合部分指定要使用哪个,如果您没有指定组合器,则将使用concat组合器。
如果您有多个文本特征并且正在使用concat组合器,那么它们的编码器输出(一个来自
roberta-large
的特征的编码器输出和一个来自bert-base
的特征的编码器输出)将被连接起来,这个组合表示将被输入到解码器。为每个文本特征单独使用单独的变压器似乎非常重。要考虑的一种替代技术是在线连接您的特征,并使用单个模型来处理组合特征,例如:
变为:
序列长度变得更长,但是一个用于组合文本的变压器应该比一个用于每个文本输入特征的变压器训练得更快。
nhn9ugyo4#
感谢@justinxzhao的详细解释。提到了两个变压器模型的例子,以了解Ludwig中的编码器是否执行两项任务 - 对文本序列进行编码和对编码器中指定的模型进行训练(基本上,它是否只是一个编码器或编码器+编码器层)。
fafcakar5#
你好@justinxzhao!我最近遇到了一个类似的机器学习框架-Lightwood。
与Ludwig相比,它们都具有处理多种输入类型功能,根据输入类型对它们进行预处理,对输入进行编码,使用编码后的输入训练模型(强调模型),将训练好的模型的输出解码为输出特征。
在Lightwood中,可以在这里提供可能用于训练的模型-https://lightwood.io/mixer.html。
以类似的方式,是否有一个列表列出了可以使用Ludwig训练的可能模型?如果有,我们如何指定要训练的首选模型(使用组合器的连接输出)?
谢谢!