
AutoGluon 文本预测实战指南用 TextPredictor 与多模态配置赢得 NLP 比赛与 GLUE 基准【免费下载链接】autogluonFast and Accurate ML in 3 Lines of Code项目地址: https://gitcode.com/GitHub_Trending/au/autogluon本文围绕 AutoGluon 仓库中 examples/automm/text_prediction 目录下的完整文本预测示例展开系统讲解如何使用MultiModalPredictorTextPredictor 是其文本场景的典型用法以及 AutoGluon Tabular 中的AG_TEXT_NN多模态配置依次攻克 MachineHack 商品情感分类、图书价格预测、数据科学家薪资预测、Kaggle Mercari 价格建议四类真实比赛任务并完整复现 GLUE 自然语言理解基准的评测流程。读完本文你将掌握一套可直接复制运行的比赛级文本建模工作流理解single / weighted / stacking三种建模模式的区别与底层实现并能将同一套脚本迁移到自己的文本数据集上。一、文本预测能力总览两种 Predictor、一条统一入口文本预测Text Prediction在 AutoGluon 中有两条互补的技术路线而examples/automm/text_prediction目录下的脚本恰好把两条路线封装成了同一个入口单模型路线直接使用MultiModalPredictor内部自动完成预训练语言模型的微调finetune开箱即用无需手动指定模型结构。在 run_competition.py 的single模式下可以看到脚本注释明确写道When no embedding is used, we will just use MultiModalPredictor that will train a single model internally.集成路线使用TabularPredictor配合get_hyperparameter_config(multimodal)返回的hyperparameters字典将文本神经网络AG_TEXT_NN与 AutoGluon-Tabular 的经典表格模型LightGBM、CatBoost 等组合起来通过加权集成weighted或 5 折 Bagging 单层 Stacking 提升精度。两条路线的核心配置文件都来自 tabular/src/autogluon/tabular/configs/hyperparameter_configs.py 中定义的get_hyperparameter_config(config_name)工厂函数传入multimodal即可取回包含AG_TEXT_NN的模型集合。当指定--preset且模式为stacking/weighted时脚本会把 preset 写入hyperparameters[AG_TEXT_NN][presets]见 run_competition.py从而把多模态模型的训练质量预设透传给内部的文本神经网络。质量预设preset的取值与定义可以在 multimodal/src/autogluon/multimodal/constants.py 中找到high_quality、medium_quality、best_quality其中medium_quality_faster_train是比赛脚本额外提供的更快训练版本。不同 preset 的差异如是否启用更大的骨干模型、更长的训练轮数、更强的数据增强集中实现在 multimodal/src/autogluon/multimodal/utils/presets.py 中读者可根据算力在更快训练与更高质量之间权衡。二、统一比赛脚本 run_competition.py参数与三种建模模式目录下的 run_competition.py 是四个 MachineHack / Kaggle 案例共用的驱动脚本通过--task参数分发到不同的数据加载逻辑并统一执行训练 → 预测 → 写提交文件三步流程。其命令行参数如下对应源码 get_parser参数类型 / 取值默认值说明--train_filestrNone训练数据文件CSV / XLSX--test_filestrNone测试数据文件--sample_submissionstrNone比赛提供的提交样例文件--task必选product_sentiment/mercari_price/price_of_books/data_scientist_salary-决定数据加载与提交格式--eval_metricstrNone评测指标如log_loss、r2、acc--modesingle/weighted/stackingsingle建模方式见下文--presetmedium_quality_faster_train/high_quality/best_qualityNone多模态模型质量预设--seedint123随机种子保证可复现--exp_dirstrNone模型与提交文件的输出目录三种模式的核心区别源码 runsingle直接MultiModalPredictor.fit(...)内部训练单个预训练语言模型开销最小、最易上手。weightedTabularPredictor.fit(...)使用AG_TEXT_NN加表格模型的加权集成模型之间不做层叠。stackingTabularPredictor.fit(..., num_bag_folds5, num_stack_levels1)即 5 折 Bagging 1 层 Stacking把文本模型与表格模型通过一层堆叠集成起来是比赛脚本默认推荐的高精度方案README 中多数命令都使用--mode stacking。训练完成后脚本按任务类型生成提交文件分类任务如product_sentiment写出submission.csv概率形式回归任务如mercari_price、price_of_books、data_scientist_salary则先读入--sample_submission再回填预测值。注意回归任务的预测值在内部经过了log/log10变换写出前会做对应的指数逆变换见后文各节因此最终提交文件中的数值与原始数据同尺度。三、案例一MachineHack 商品情感分类Product Sentiment Classification该案例的目标是在 MachineHack 的 Product Sentiment Classification 周末黑客松中取得好成绩。比赛数据由Product_Description商品描述文本与Product_Type商品类别两个特征列和Sentiment标签列构成。README 给出了完整的数据准备与训练命令mkdir -p machine_hack_product_sentiment wget https://automl-mm-bench.s3.amazonaws.com/machine_hack_product_sentiment/all_train.csv -O machine_hack_product_sentiment/all_train.csv wget https://automl-mm-bench.s3.amazonaws.com/machine_hack_product_sentiment/test.csv -O machine_hack_product_sentiment/test.csv mkdir -p ag_product_sentiment python3 run_competition.py --train_file machine_hack_product_sentiment/all_train.csv \ --test_file machine_hack_product_sentiment/test.csv \ --task product_sentiment \ --eval_metric log_loss \ --exp_dir ag_product_sentiment \ --mode stacking 21 | tee -a ag_product_sentiment/log.txt命令执行结束后会在ag_product_sentiment目录生成submission.csv可直接上传到比赛排行榜。数据加载逻辑见 load_machine_hack_product_sentiment训练集只保留Product_Description、Product_Type两个特征列与Sentiment标签列测试集去掉标签列预测阶段使用predict_proba(..., as_multiclassTrue)输出每个类别的概率这正是--eval_metric log_loss所要求的提交格式。这里也体现了一个通用技巧当评测指标是对数损失时提交概率而非硬标签由 run_competition.py 中test_probabilities.to_csv(...)完成。四、案例二MachineHack 图书价格预测Predict Price of Book第二个案例是 Predict The Price Of Books 黑客松的回归任务目标是根据书名、作者、评论、评分等字段预测图书价格。由于比赛数据以.xlsx格式提供README 明确要求先安装openpyxlbash prepare_price_of_books.sh python3 -m pip install openpyxl mkdir -p ag_price_of_books python3 run_competition.py --train_file price_of_books/Participants_Data/Data_Train.xlsx \ --test_file price_of_books/Participants_Data/Data_Test.xlsx \ --sample_submission price_of_books/Participants_Data/Sample_Submission.xlsx \ --task price_of_books \ --eval_metric r2 \ --exp_dir ag_price_of_books \ --mode stacking 21 | tee -a ag_price_of_books/log.txtprepare_price_of_books.sh会从 AutoGluon 的公开评测数据桶automl-mm-bench下载Data.zip并解压到price_of_books目录。脚本结束后ag_price_of_books目录中会出现submission.xlsx文件。这个案例在数据预处理上有两个值得借鉴的工程点见 load_price_of_books文本字段结构化清洗Reviews列原始值是形如123 out of 5 stars的字符串通过ele[:-len( out of 5 stars)]截断后转为数值Ratings列原始值是1,234 customer reviews先去掉千分位逗号再截断 customer reviews后缀同样转为数值。标签对数化对价格做np.log10(Price 1)变换把右偏的长尾价格分布拉近正态显著降低回归误差写出提交文件时再通过np.power(10, predictions) - 1还原为真实价格见 run_competition.py。README 特别提醒建议在 p3.2x或同类 GPU 实例上运行本实验因为价格回归需要较充分的模型训练才能达到理想精度。五、案例三MachineHack 数据科学家薪资预测Data Scientist Salary Prediction第三个案例是 Predict The Data Scientists Salary In India Hackathon根据候选人的工作经验、技能关键词、公司信息等预测其薪资salary列。有趣的是该比赛虽然本质是回归问题README 中却使用--eval_metric acc从源码 load_data_scientist_salary 看脚本还会剔除company_name_encoded列避免模型直接过拟合到公司编码上。bash prepare_data_scientist_salary.sh python3 -m pip install openpyxl mkdir -p ag_data_scientist_salary python3 run_competition.py --train_file data_scientist_salary/Data/Final_Train_Dataset.csv \ --test_file data_scientist_salary/Data/Final_Test_Dataset.csv \ --sample_submission data_scientist_salary/Data/sample_submission.xlsx \ --task data_scientist_salary \ --eval_metric acc \ --exp_dir ag_data_scientist_salary \ --mode stacking 21 | tee -a ag_data_scientist_salary/log.txt与图书价格案例相同prepare_data_scientist_salary.sh负责下载并解压数据命令完成后ag_data_scientist_salary目录中生成submission.xlsx。由于薪资预测同样对模型容量有要求README 同样建议在 p3.2x 实例上运行。提交时脚本读取sample_submission.xlsx将predictor.predict(...)的预测结果回填到salary列后写出见 run_competition.py。六、案例四Kaggle Mercari 价格建议Mercari Price Suggestion第四个案例来自 Kaggle 的 Mercari Price Suggestion Challenge二手商品定价目标是仅凭商品标题、品类、品牌等文本信息预测二手商品价格README 称之为可达到 Top-5 级别的方案。运行前需要先配置 Kaggle API 以通过命令行下载数据集sudo apt install -y p7zip-full bash prepare_mercari_kaggle.shprepare_mercari_kaggle.sh依次执行用 Kaggle API 下载比赛压缩包 → 解压 → 用7za解压train.tsv.7z→ 解压test_stg2.tsv.zip与sample_submission_stg2.csv.zip。单模型模式mkdir -p ag_mercari_price_single python3 run_competition.py --train_file mercari_price/train.tsv \ --test_file mercari_price/test_stg2.tsv \ --sample_submission mercari_price/sample_submission_stg2.csv \ --task mercari_price \ --eval_metric r2 \ --exp_dir ag_mercari_price_single \ --mode single 21 | tee -a ag_mercari_price_single/log.txt加权集成模式mkdir -p ag_mercari_price_weighted python3 run_competition.py --train_file mercari_price/train.tsv \ --test_file mercari_price/test_stg2.tsv \ --sample_submission mercari_price/sample_submission_stg2.csv \ --task mercari_price \ --eval_metric r2 \ --exp_dir ag_mercari_price_weighted \ --mode weighted 21 | tee -a ag_mercari_price_weighted/log.txtStacking 堆叠模式mkdir -p ag_mercari_price_stacking python3 run_competition.py --train_file mercari_price/train.tsv \ --test_file mercari_price/test_stg2.tsv \ --sample_submission mercari_price/sample_submission_stg2.csv \ --task mercari_price \ --eval_metric r2 \ --exp_dir ag_mercari_price_stacking \ --mode stacking 21 | tee -a ag_mercari_price_stacking/log.txt该案例的数据工程最为复杂见 load_mercari_price_prediction其要点包括层级品类拆分原始category_name形如Sports Outdoors/Outdoor Recreation/Camping Hiking脚本用split(/, 2)拆出cat1 / cat2 / cat3三个层级特征并处理缺失值None让模型能同时利用粗细两种粒度的品类信息。标签对数化对价格做np.log(price 1)变换提交前用np.exp(predictions) - 1还原见 run_competition.py。忽略无信息列train_id被显式排除在特征之外避免 ID 泄漏。读者可以对照三种模式各自的效果在真实数据上验证集成 单模型的普遍规律并依据训练耗时选择适合自己算力的模式。七、GLUE 基准评测从数据准备到结果复现README 的最后一节展示了如何用 AutoGluon 文本预测能力解决 GLUE 基准中的全部任务包括 CoLA、SST-2、MRPC、STS-B、QQP、MNLImatched / mismatched、QNLI、RTE、WNLI 等这节内容在 run_text_prediction.py 与配套脚本中得到了完整实现。第一步下载并预处理数据python3 prepare_glue.py --benchmark glueprepare_glue.py 是一个功能完整的基准数据管线部分借鉴自 NLP 社区的 jiant 项目它定义了GLUE_TASKS/SUPERGLUE_TASKS的任务清单、每个任务专属的读取器如read_cola、read_mrpc、read_mnli通过GLUE_TASK2PATH与url_checksums/glue.txtSHA-1 校验文件见 url_checksums校验下载完整性并把 TSV 原始数据统一转换为模型友好的parquet 格式。数据默认输出到当前目录的glue/文件夹下。第二步跑单模型或 5 折 Stacking 基线README 说明可以二选一用单个TextPredictor模型或使用 AutoGluon Tabular 中的multimodal配置——后者会把TextPredictor与 AutoGluon-Tabular 的表格模型通过单层 Stacking 5 折 Bagging组合起来。# Run single model bash run_glue.sh single # Run 5-fold stacking bash run_glue.sh stackingrun_glue.sh 对cola sst mrpc sts qqp qnli rte wnli八个任务逐一调用run_text_prediction.py --do_train并对 MNLI 分别用 matched / mismatched 的验证与测试集跑mnli_m、mnli_mm两个子任务。脚本中每个任务均显式传入--train_file / --dev_file / --test_file并通过--mode ${MODE}透传 single / stacking 模式。run_text_prediction.py 是 GLUE 评测的核心执行体值得关注的设计点任务元信息表源码 TASKS用字典集中定义每个任务的特征列、标签列、主评测指标与附加指标。例如mrpc使用sentence1 / sentence2双句特征 label标签 acc指标sts使用sentence1 / sentence2score连续标签 rmse主指标附加pearsonr、spearmanr。MRPC / STS 的数据增强源码 trainREADME 明确指出For MRPC and STS, we have manually augmented the training and validation data by shuffling the order of two sentences.。实现上脚本将两个句子的顺序互换构造一份镜像样本与原始数据拼接从而让模型对句子顺序不敏感这两个任务本身对顺序不敏感但不同数据集存在顺序偏差。结果落盘训练结束后输出dev_prediction.csv、test_prediction.csv并把验证集指标写入final_model_scores.json方便批量对比。第三步生成 GLUE 提交文件python3 generate_submission.py --prefix autogluon_text --save_dir submissiongenerate_submission.py 读取每个任务运行后产生的{prefix}_{task}/test_prediction.csv拼装成 GLUE 官方提交格式的 TSV 文件index 标签列。其内部逻辑还包含两个细节STS-B 特殊处理预测的相似度分数会被np.clip(predictions, 0, 5)限制在 [0, 5] 合法区间见 generate_submission.py。AX诊断集处理AX 没有独立训练数据脚本直接加载mnli_m的模型检查点做迁移推理见 generate_submission.py体现了预训练语言模型在相似任务间迁移的便捷性。参考结果README 给出了单模型Text Single在各任务验证集上的指标其中带(*)的 MRPC 与 STS 结果来自句子顺序增强后的数据CoLASSTMRPCSTSQQPMNLI-mMNLI-mmQNLIRTEWNLI指标mccaccaccspearmanrf1accaccaccaccaccText (Single) - Validation (*)0.67820.95070.8725 (*)0.9047 (*)0.88660.86710.86960.92350.77980.5634该表格可作为复现时的对照基线读者在自己机器上跑同样的命令若验证集指标与上表基本一致说明环境与流程无误。八、工程经验小结把这套方案用到你自己的文本数据上综合以上五个案例可以沉淀出几条可迁移的实战经验统一入口 任务分发把数据加载、训练、预测、提交封装成run_competition.py式的参数化脚本新增比赛只需实现一个load_xxx()函数并注册到--task分发逻辑中。优先尝试 stacking 模式README 四个案例的主命令全部使用--mode stacking5 折 Bagging 单层 Stacking将文本模型与表格模型互补融合算力紧张时可降级为weighted甚至single。善于做标签变换价格、销量等长尾回归目标先做log/log10变换再训练提交前逆变换还原这是三个回归案例共同的得分点。文本特征工程对半结构化文本如 123 out of 5 stars、层级品类串先做规则清洗与字段拆分让预训练语言模型与表格模型都能吃到更干净的信号。善用 preset 与 seed通过--preset在训练速度与质量之间权衡通过固定--seed 123保证实验可复现。迁移与复用GLUE 案例证明一个训练好的文本模型可以直接复用到同分布的下游任务AX 诊断集直接用 MNLI 检查点推理这对实际业务中的冷启动非常有价值。所有命令与脚本均可在仓库的 examples/automm/text_prediction 目录下找到配合 multimodal/src/autogluon/multimodal/utils/presets.py 与 tabular/src/autogluon/tabular/configs/hyperparameter_configs.py 阅读源码即可把这套比赛级文本预测方案移植到自己的数据集上。【免费下载链接】autogluonFast and Accurate ML in 3 Lines of Code项目地址: https://gitcode.com/GitHub_Trending/au/autogluon创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考