多模态Transformers | 带表格数据的Transformers
这是一个用于在文本数据基础上整合多模态数据的工具包,适用于分类和回归任务。它使用HuggingFace transformers作为文本特征的基础模型。该工具包添加了一个组合模块,该模块利用transformer的输出以及分类和数值特征,生成丰富的多模态特征用于下游分类/回归层。给定一个预训练的transformer,组合模块和transformer的参数根据监督任务进行训练。有关简要的文献综述,请查看Georgian Impact博客上的相关博文。
安装
该代码在Python 3.7环境下使用PyTorch和Transformers 4.26.1开发。
多模态相关代码位于multimodal_transformers
文件夹中。
pip install multimodal-transformers
支持的Transformers
以下Hugging Face Transformers支持处理表格数据。详见此文档。
- BERT 来自Devlin等人: BERT: 用于语言理解的深度双向Transformers预训练 (ACL 2019)
- ALBERT 来自Lan等人: ALBERT: 用于语言表示自监督学习的精简BERT (ICLR 2020)
- DistilBERT 来自Sanh等人: DistilBERT, BERT的蒸馏版本:更小、更快、更便宜、更轻 (NeurIPS 2019)
- RoBERTa 来自Liu等人: RoBERTa: 一种稳健优化的BERT预训练方法
- XLM 来自Lample等人: 跨语言语言模型预训练 (NeurIPS 2019)
- XLNET 来自Yang等人: XLNet: 广义自回归预训练用于语言理解 (NeurIPS 2019)
- XLM-RoBERTa 来自Conneau等人: 大规模无监督跨语言表示学习 (ACL 2020)
包含的数据集
该存储库还包含两个包含文本数据和丰富表格特征的kaggle数据集
- 女装电商评论 用于推荐预测 (分类)
- 墨尔本Airbnb公开数据 用于价格预测 (回归)
- PetFindermy收养预测 用于宠物收养速度预测 (多分类)
工作示例
要快速查看这些模型在上述数据集之一上使用预设配置的运行情况,请执行:
$ python main.py ./datasets/Melbourne_Airbnb_Open_Data/train_config.json
或者如果你更喜欢使用命令行参数,请运行:
$ python main.py \
--output_dir=./logs/test \
--task=classification \
--combine_feat_method=individual_mlps_on_cat_and_numerical_feats_then_concat \
--do_train \
--model_name_or_path=distilbert-base-uncased \
--data_path=./datasets/Womens_Clothing_E-Commerce_Reviews \
--column_info_path=./datasets/Womens_Clothing_E-Commerce_Reviews/column_info.json
main.py
需要一个json
文件,详细说明数据集中哪些列包含文本、分类或数值输入特征。它还需要一个存储数据的文件夹路径,包含train.csv
和test.csv
(如果提供的话,还有val.csv
)。有关参数的更多详细信息,请参见multimodal_exp_args.py
。
笔记本介绍
包含的方法
特征组合方法 | 描述 | 是否同时需要分类和数值特征 |
---|---|---|
text_only | 仅使用由HuggingFace transformer处理的文本列,然后进入最终分类器层。本质上等同于HuggingFace的ForSequenceClassification 模型 | 否 |
concat | 在最终分类器层之前将transformer输出、数值特征和分类特征一次性连接 | 否 |
mlp_on_categorical_then_concat | 对分类特征使用MLP,然后在最终分类器层之前连接transformer输出、数值特征和处理后的分类特征 | 否 (需要分类特征) |
individual_mlps_on_cat_and_numerical_feats_then_concat | 对分类特征和数值特征分别使用独立的MLP,然后在最终分类器层之前将transformer输出与处理后的数值特征和分类特征连接 | 否 |
mlp_on_concatenated_cat_and_numerical_feats_then_concat | 对连接的分类和数值特征使用MLP,然后在最终分类器层之前与transformer输出连接 | 是 |
attention_on_cat_and_numerical_feats | 在最终分类器层之前,基于注意力机制对transformer输出、数值特征和分类特征进行求和,其中transformer输出作为查询 | 否 |
gating_on_cat_and_num_feats_then_sum | 在最终分类器层之前,对transformer输出、数值特征和分类特征进行门控求和。灵感来自在大型预训练Transformers中整合多模态信息,该论文对每个token执行此机制 | 否 |
weighted_feature_sum_on_transformer_cat_and_numerical_feats | 在最终分类器层之前,对transformer输出、数值特征和分类特征的每个特征维度进行可学习的加权特征求和 | 否 |
简单基线模型
实际上,将分类和数值特征保持原样,只是将它们标记化并作为额外的文本句子与文本列连接,是一个强大的基线。要在此处实现这一点,只需将所有分类和数值列指定为文本列,并将combine_feat_method
设置为text_only
。例如,对于./datasets
中包含的每个示例数据集,在train_config.json
中将combine_feat_method
更改为text_only
,并将column_info_path
更改为./datasets/{dataset}/column_info_all_text.json
。
在下面的实验中,此基线对应于特征组合方法为unimodal
。
结果
下表显示了通过运行main.py在两个包含的数据集各自的测试集上的结果,未指定的参数为默认值。
评论预测
具体训练参数可以在datasets/Womens_Clothing_E-Commerce_Reviews/train_config.json
中查看。
有2个文本列、3个分类列和3个数值列。
模型 | 特征组合方法 | F1 | PR AUC |
---|---|---|---|
Bert Base Uncased | text_only | 0.957 | 0.992 |
Bert Base Uncased | unimodal | 0.968 | 0.995 |
Bert Base Uncased | concat | 0.958 | 0.992 |
Bert Base Uncased | individual_mlps_on_cat_and_numerical_feats_then_concat | 0.959 | 0.992 |
Bert Base Uncased | attention_on_cat_and_numerical_feats | 0.959 | 0.992 |
Bert Base Uncased | gating_on_cat_and_num_feats_then_sum | 0.961 | 0.994 |
Bert Base Uncased | weighted_feature_sum_on_transformer_cat_and_numerical_feats | 0.962 | 0.994 |
价格预测
具体训练参数可以在datasets/Melbourne_Airbnb_Open_Data/train_config.json
中查看。
有3个文本列、74个分类列和15个数值列。
模型 | 特征组合方法 | MAE | RMSE |
---|---|---|---|
Bert Base Multilingual Uncased | text_only | 82.74 | 254.0 |
Bert Base Multilingual Uncased | unimodal | 79.34 | 245.2 |
Bert Base Uncased | concat | 65.68 | 239.3 |
Bert Base Multilingual Uncased | individual_mlps_on_cat_and_numerical_feats_then_concat | 66.73 | 237.3 |
Bert Base Multilingual Uncased | attention_on_cat_and_numerical_feats | 74.72 | 246.3 |
Bert Base Multilingual Uncased | gating_on_cat_and_num_feats_then_sum | 66.64 | 237.8 |
Bert Base Multilingual Uncased | weighted_feature_sum_on_transformer_cat_and_numerical_feats | 71.19 | 245.2 |
宠物收养预测
具体训练参数可以在datasets/PetFindermy_Adoption_Prediction
中查看
有2个文本列、14个分类列和5个数值列。
模型 | 特征组合方法 | F1_macro | F1_micro |
---|---|---|---|
Bert Base Multilingual Uncased | text_only | 0.088 | 0.281 |
Bert Base Multilingual Uncased | unimodal | 0.089 | 0.283 |
Bert Base Uncased | concat | 0.199 | 0.362 |
Bert Base Multilingual Uncased | individual_mlps_on_cat_and_numerical_feats_then_concat | 0.244 | 0.352 |
Bert Base Multilingual Uncased | attention_on_cat_and_numerical_feats | 0.254 | 0.375 |
Bert Base Multilingual Uncased | gating_on_cat_and_num_feats_then_sum | 0.275 | 0.375 |
Bert Base Multilingual Uncased | weighted_feature_sum_on_transformer_cat_and_numerical_feats | 0.266 | 0.380 |
引用
我们现在有一篇论文可以引用Multimodal-Toolkit。
@inproceedings{gu-budhkar-2021-package,
title = "A Package for Learning on Tabular and Text Data with Transformers",
author = "Gu, Ken and
Budhkar, Akshay",
booktitle = "Proceedings of the Third Workshop on Multimodal Artificial Intelligence",
month = jun,
year = "2021",
address = "Mexico City, Mexico",
publisher = "Association for Computational Linguistics",
url = "https://www.aclweb.org/anthology/2021.maiworkshop-1.10",
doi = "10.18653/v1/2021.maiworkshop-1.10",
pages = "69--73",
}