概述
学习如何使用PyTorch执行文本分类理解解决文本分类时所涉及的要点学习使用包填充(PackPadding)特性介绍
我总是使用最先进的架构来在一些比赛提交模型结果。得益于PyTorch、Keras和TensorFlow等深度学习框架,实现最先进的体系结构变得非常容易。这些框架提供了一种简单的方法来实现复杂的模型体系结构和算法,而只需要很少的概念知识和代码技能。简而言之,它们是数据科学社区的一座金矿!
在本文中,我们将使用PyTorch,它以其快速的计算能力而闻名。因此,在本文中,我们将介绍解决文本分类问题的关键点。然后我们将在PyTorch中实现第一个文本分类器!
目录
为什么使用PyTorch进行文本分类?处理词汇表外单词处理可变长度序列包装器和预训练模型理解问题实现文本分类为什么使用PyTorch进行文本分类?
在深入研究技术概念之前,让我们先快速熟悉一下将要使用的框架——PyTorch。PyTorch的基本单位是张量,类似于python中的“numpy”数组。使用PyTorch有很多好处,但最重要的两个是:
动态网络——运行时架构的变化跨gpu的分布式训练
我敢肯定你想知道——为什么我们要使用PyTorch来处理文本数据?让我们讨论一下PyTorch的一些令人难以置信的特性,这些特性使它不同于其他框架,特别是在处理文本数据时。
1.处理词汇表外单词
文本分类模型根据固定的词汇量进行训练。但在推理过程中,我们可能会遇到一些词汇表中没有的词。这些词汇被称为词汇量外单词(OutofVocabulary),大多数深度学习框架缺乏处理词汇量不足的能力。这是一个关键的问题,甚至可能导致信息的丢失。
为了处理词汇量不足的单词,PyTorch支持一个很好的功能,它用未知的token替换训练数据中的稀有单词。这反过来又帮助我们解决了词汇量不足的问题。
除了处理词汇之外,PyTorch还有一个可以处理可变长度序列的特性!
2.处理可变长度序列
你听说过循环神经网络是如何处理可变长度序列的吗?有没有想过如何实现它?PyTorch提供了一个有用的特性“填充序列”(PackedPaddingsequence),它实现了动态循环神经网络。
填充是在句首或句尾添加一个称为填充标记的额外标记的过程。由于每个句子中的单词数量不同,我们通过添加填充标记将可变长度的输入句子转换为具有相同长度的句子。
填充是必须的,因为大多数框架支持静态网络,即架构在整个模型训练过程中保持不变。虽然填充解决了可变长度序列的问题,但是这种思想还有另一个问题——体系结构现在像处理任何其他信息/数据一样处理这些填充标记。让我用一个简单的图表来解释一下
正如你在下图中所看到的,在生成输出时还使用了最后一个元素,即padding标记。这是由PyTorch中的填充序列来处理的。
压缩填充会对填充标记忽略输入时间步。这些值不输入给循环神经网络,这帮助我们建立动态循环神经网络。
3.包装器和预训练模型
最新的模型架构状态正在为PyTorch框架发布。HuggingFace发布Transformers,其中提供超过32个自然语言理解生成的最新架构!
不仅如此,PyTorch还为文本到语音、对象检测等任务提供了预训练模型,这些任务可以在几行代码内执行。
不可思议,不是吗?这些是PyTorch的一些非常有用的特性。现在让我们使用PyTorch解决一个文本分类问题。
理解问题陈述
作为本文的一部分,我们将研究一个非常有趣的问题。
Quora希望在他们的平台上追踪不真诚的问题,以便让用户在分享知识的同时感到安全。在这种情况下,一个不真诚的问题被定义为一个旨在发表声明的问题,而不是寻找有用的答案。为了进一步分析这个问题,这里有一些特征可以表明一个特定的问题是不真诚的:
语气非中性是贬低还是煽动性的没有现实根据使用性内容(乱伦、兽交、恋童癖)来达到令人震惊的效果,而不是寻求真正的答案训练数据包括被询问的问题,以及一个表示是否被识别为不真诚的标记(target=1)。标签包含一些噪音,即它们不能保证是完美的。我们的任务是识别某个问题是否“不真诚”。你可以从这里下载数据集。
转载请注明:http://www.0431gb208.com/sjslczl/4657.html