您将使用哪种模型(GPT2、BERT、XLNet 等)进行文本分类任务?为啥?

Posted

技术标签:

【中文标题】您将使用哪种模型(GPT2、BERT、XLNet 等)进行文本分类任务?为啥?【英文标题】:Which model (GPT2, BERT, XLNet and etc) would you use for a text classification task? Why?您将使用哪种模型(GPT2、BERT、XLNet 等)进行文本分类任务?为什么? 【发布时间】:2020-01-10 17:09:07 【问题描述】:

我正在尝试为句子分类任务训练模型。输入是一个句子(整数向量),输出是一个标签(0 或 1)。我在这里和那里看到了一些关于使用 Bert 和 GPT2 进行文本分类任务的文章。但是,我不确定我应该从哪一个开始。您将从 NLP 中的哪些最新模型开始使用,例如原始 Transformer 模型、Bert、GPT2、XLNet?为什么?我宁愿在 Tensorflow 中实现,但我也可以灵活地选择 PyTorch。 谢谢!

【问题讨论】:

【参考方案1】:

我同意 Max 的回答,但如果限制条件是使用最先进的大型预训练模型,那么有一种非常简单的方法可以做到这一点。 HuggingFace 的库称为 pytorch-transformers。无论您选择 BERT、XLNet 还是其他任何东西,它们都可以轻松更换。 Here 是使用该库进行文本分类的详细教程。

编辑:我刚刚遇到了这个 repo,pytorch-transformers-classification(Apache 2.0 许可证),它是一个可以完全按照您的意愿行事的工具。

【讨论】:

【参考方案2】:

这在很大程度上取决于您的数据集,并且是数据科学家工作的一部分,即根据所选的性能指标、训练成本、模型复杂性等,找出更适合特定任务的模型。

当您处理该问题时,您可能会测试所有上述模型并进行比较。首先选择哪一个? "Machine Learning Yearning" 的 Andrew Ng 建议从简单模型开始,这样您就可以快速迭代和测试您的想法、数据预处理管道等。

不要一开始就尝试设计和构建完美的系统。 相反,快速构建和训练一个基本系统——也许只需要几个 天

根据这个建议,您可以从更简单的模型(例如 ULMFiT)开始作为基线,验证您的想法,然后转向更复杂的模型,看看它们如何改进您的结果。

请注意,现代 NLP 模型包含大量参数,如果没有大型数据集,很难从头开始训练它们。这就是您可能想要使用迁移学习的原因:您可以下载预训练模型并将其用作基础,然后根据您的任务特定数据集对其进行微调,以获得更好的性能并减少训练时间。

【讨论】:

【参考方案3】:

就像其他人提到的那样,这取决于数据集,应该尝试多个模型,并且必须选择最好的一个。

不过,根据我的经验,XLNet 迄今为止以良好的优势击败了所有其他模型。因此,如果学习不是目标,我会简单地从 XLNET 开始,然后再尝试一些并得出结论。它只是节省了探索的时间。

下面的 repo 非常适合快速完成所有这些操作。向他们致敬。

https://github.com/microsoft/nlp-recipes

它使用拥抱面部变形器,使它们变得非常简单。 ?

【讨论】:

【参考方案4】:

我使用 XLNet、BERT 和 GPT2 来完成摘要任务(仅限英文)。根据我的经验,GPT2 在所有 3 种短段落笔记中效果最好,而 BERT 在较长文本(最多 2-3 页)上表现更好。您可以使用 XLNet 作为基准。

【讨论】:

以上是关于您将使用哪种模型(GPT2、BERT、XLNet 等)进行文本分类任务?为啥?的主要内容,如果未能解决你的问题,请参考以下文章

xlnet+bilstm实现菜品正负评价分类

预训练语言模型XLNet: Generalized Autoregressive Pretraining for Language Understanding

预训练语言模型XLNet: Generalized Autoregressive Pretraining for Language Understanding

Bert不完全手册4. 绕不开的MASK?XLNET & ELECTRA

预训练语言模型整理(ELMo/GPT/BERT...)

预训练语言模型关系图+必读论文列表,清华荣誉出品