【NLP】第 1 章:机器学习和深度学习的基础知识(Pytorch)

     🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎

📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃

🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​

📣系列专栏 - 机器学习【ML】 自然语言处理【NLP】  深度学习【DL】

​​

 🖍foreword

✔说明⇢本人讲解主要包括Python、机器学习(ML)、深度学习(DL)、自然语言处理(NLP)等内容。

如果你对这个系列感兴趣的话,可以关注订阅哟👋

本章目录

机器学习概述

监督学习

无监督学习

模型如何学习?

梯度下降

过拟合和欠拟合

训练与测试

评估模型

神经网络

神经网络的结构

激活函数

神经网络如何学习?

神经网络中的过拟合

用于机器学习的 NLP

词袋

顺序表示

总结

我们的世界充满了自然语言数据。在过去的几十年里,我们相互交流的方式已经转移到数字领域,因此,这些数据可以用来构建模型,从而改善我们的在线体验。从在搜索引擎中返回相关结果,到自动完成您在电子邮件中键入的下一个单词,能够从自然语言中提取见解的好处显而易见。

虽然我们作为人类理解语言的方式与模型或人工智能理解语言的方式明显不同,但通过阐明机器学习及其用途,我们可以开始了解这些深度学习模型如何理解语言以及当模型从数据中学习时会发生什么。

在本书中,我们将探讨人工智能和深度学习在自然语言中的应用。通过使用 PyTorch,我们将逐步学习如何构建允许我们执行情感分析、文本分类和序列翻译的模型,这将导致我们构建一个基本的聊天机器人。通过介绍每个模型背后的理论,以及演示如何实际实现它们,我们将揭开自然语言处理NLP ) 领域的神秘面纱,并为您提供足够的背景,让您开始构建自己的模型。

在我们的第一章中,我们将探讨机器学习的一些基本概念。然后,我们将进一步研究深度学习、神经网络的基础知识,以及深度学习方法相对于基本机器学习技术的一些优势。最后,我们将更详细地了解深度学习,特别是关于 NLP 特定任务以及我们如何使用深度学习模型从自然语言中获得洞察力。具体来说,我们将涵盖以下主题:

  • 机器学习概述
  • 神经网络简介
  • 用于机器学习的 NLP

机器学习概述

从根本上说,机器学习是用于识别模式和从数据中提取趋势的算法过程。通过在数据上训练特定的机器学习算法,机器学习模型可以学习人眼无法立即看到的洞察力。医学成像模型可以学习从人体图像中检测癌症,而情感分析模型可以学习包含优秀有趣等词的书评比包含词的书评更有可能是正面评论,可怕的,无聊的。

从广义上讲,机器学习算法分为两大类:监督学习和无监督学习。

监督学习

监督学习涵盖任何我们希望使用的任务一个输入来预测一个输出。假设我们希望训练一个模型来预测房价。我们知道较大的房子往往会卖更多的钱,但我们不知道价格和大小之间的确切关系。机器学习模型可以通过查看数据来学习这种关系:

                 图 1.1 – 显示住房数据的表格

在这里,我们一直考虑到最近售出的四栋房屋的大小,以及他们卖的价格。鉴于这四所房子的数据,我们可以使用这些信息来预测市场上的新房子吗?称为回归的简单机器学习模型可以估计这两个因素之间的关系:

                                                                 图 1.2 – 住房数据的输出

鉴于这些历史数据,我们可以使用这些数据来估计关系尺寸(X) 和价格(Y) 之间。现在我们已经估计了大小和价格之间的关系,如果给我们一所只知道大小的新房子,我们可以使用学习函数来预测它的价格:

                                                                 图 1.3 – 预测房价

因此,所有监督学习任务旨在学习一些功能模型输入来预测输出,给出了输入与输出之间关系的许多示例:

给定许多 (X, y),学习:

F (X) = y

您的号码的输入可以包含任意数量的特征。我们的简单房价模型仅包含一个特征(大小),但我们可能希望添加更多特征以提供更好的预测(例如,卧室数量、花园大小等)。因此,更具体地说,我们的监督模型学习一个函数,以便将多个输入映射到一个输出。这由以下等式给出:

给定许多([X0, X1, X2,…,Xn], y),学习:

f(X 0, X1, X2,…,Xn) = y

在前面的例子中,我们学习到的函数如下:

 

这里,x轴截距,是直线的斜率。

 模型可以包括数百万甚至数十亿的输入特征(尽管您可能会发现当特征空间变得太大时会遇到硬件限制)。模型的输入类型也可能不同,模型能够从图像中学习:

                                         图 1.4 – 模型训练

正如我们将以后更详细的探索,他们也可以学习来自文字:

我喜欢这部电影->积极

这部电影很糟糕->负面

今年我看过的最好的电影-> ?

无监督学习

无监督学习 与监督学习的不同之处在于无监督学习不使用输入和输出对 ( X, y ) 来学习。相反,我们只提供输入数据,模型将了解输入数据的结构或表示。无监督学习最常见的方法之一是聚类。 

例如,我们从一组四个不同的国家获取温度和降雨量读数的数据集,但没有关于这些读数的采集地点的标签。我们可以使用聚类算法来识别数据中存在的不同聚类(国家):

                                                 图 1.5 – 聚类算法的输出

聚类也有在 NLP 领域内使用。如果我们有一个电子邮件数据集,并且想要确定使用了多少种不同的语言在这些电子邮件中,某种形式的聚类可以帮助我们识别这一点。如果英语单词在同一封电子邮件中与其他英语单词频繁出现,而西班牙语单词与其他西班牙语单词频繁出现,我们将使用聚类来确定我们的数据集有多少不同的单词集群,从而确定语言的数量。

模型如何学习?

为了让模型学习,我们需要某种方法来评估我们的模型的性能。为此,我们使用了一个称为损失的概念。损失是衡量如何关闭我们的模型预测来自其真实值。对于我们数据集中的给定房屋,衡量损失的一种方法可能是真实价格 ( y ) 与我们的模型预测的价格 () 之间的差异。我们可以通过对数据集中所有房屋的损失进行平均来评估我们系统内的总损失。然而,理论上,正损失可以抵消负损失,因此更常见的损失度量是均方误差

虽然其他模型可能使用不同的损失函数,但回归通常使用均方误差。现在,我们可以计算整个数据集的损失度量,但我们仍然需要一个算法达到尽可能低的损失的方法。这个过程被称为梯度下降

梯度下降

在这里,我们绘制了我们的损失函数,因为它与我们的房价模型中的单个学习参数有关。我们注意到,当设置得太高时,MSE 损失很高,而当设置得太低时,MSE 损失也很高。甜蜜点,或损失点最小化,位于中间某处。为了在算法上计算这个,我们使用梯度下降。当我们开始训练我们自己的神经网络时,我们会更详细地看到这一点:

 

                                                                 图 1.6 – 梯度下降

我们首先用一个随机值初始化。为了使我们的损失最小化,我们需要从我们的损失函数进一步下坡,向山谷中部移动。为此,我们首先需要知道向哪个方向移动。在我们的初始点,我们使用基本微积分来计算坡度的初始梯度:

 

 在我们前面的例子中,初始点的梯度是正的。这告诉我们我们的值大于最优值,所以我们更新我们的值,使其低于我们之前的值价值。我们逐渐迭代这个过程,直到  越来越接近 MSE 最小化的值。这发生在梯度等于零的点。

过拟合和欠拟合

考虑以下在这种情况下,基本线性模型与我们的数据拟合不佳。我们可以看到,我们的模型(由等式 表示)似乎不是一个好的预测器:

                                         图 1.7 – 欠拟合和过拟合的例子

当我们的模型由于缺少特征、缺少数据或模型规格不足而不能很好地拟合数据时,我们称之为欠拟合。我们注意到我们的数据梯度不断增加,并怀疑模型,如果使用多项式,可能更适合;例如,。稍后我们将看到,由于神经网络的复杂架构,欠拟合很少成为问题:

考虑以下示例。在这里,我们使用我们的房价模型来拟合一个函数,不仅是房子的大小 ( X ),还有二阶和三阶多项式(X2, X3)。在这里,我们可以看到我们的新模型非常适合我们的数据点。然而,这并不一定会产生一个好的模型:

                                                        图 1.8 – 过拟合的样本输出

我们现在有一个大小110 平方米的房子来预测价格。根据我们的直觉,由于这所房子比100 平方米的房子大,我们预计这所房子会更贵,在340,000 美元左右。使用我们的拟合多项式模型,我们可以看到预测价格实际上低于320,000 美元左右的小房子。我们的模型很好地拟合了我们训练过的数据,但它不能很好地推广到一个新的、看不见的数据点。这是称为过拟合。由于过度拟合,重要的是不要评估模型在训练数据上的性能,因此我们需要生成一组单独的数据来评估我们的数据。

训练与测试

通常,在训练模型时,我们将数据分为两部分:训练数据集和较小的测试数据集。我们使用训练数据集训练模型,并在测试数据集上对其进行评估。这样做是为了衡量模型在一组看不见的数据上的性能。如前所述,要使模型成为良好的预测器,它必须很好地泛化到模型以前从未见过的新数据集,而这正是对测试数据集进行评估的内容。 

评估模型

当我们寻求尽量减少模型中的损失,仅此一项并不能为我们提供太多关于我们的模型在实际做出预测方面有多好的信息。考虑一个反垃圾邮件模型,该模型预测收到的电子邮件是否为垃圾邮件,并自动将垃圾邮件发送到垃圾文件夹。一种简单的评估方法性能就是准确性

为了计算准确性,我们只需将正确预测为垃圾邮件/非垃圾邮件的电子邮件数量除以我们所做的预测总数。如果我们正确预测了 1,000 封电子邮件中的 990 封,我们的准确率将达到 99%。然而,高精度并不一定意味着我们的模型是好的:

                 图 1.9 – 显示预测为垃圾邮件/非垃圾邮件数据的表格

在这里,我们可以看到,虽然我们的模型预测 990 封电子邮件不是垃圾邮件正确(称为真正的否定),它还预测了 10 封垃圾邮件不是垃圾邮件(称为漏报)。我们的模型只是假设所有电子邮件都不是垃圾邮件,这根本不是一个好的反垃圾邮件过滤器!我们不应该仅仅使用准确性,而应该还使用精度和召回率评估我们的模型。在这种情况下,我们的模型的召回率为零(意味着没有返回积极的结果)这一事实将立即成为一个危险信号:

 

神经网络

在我们之前的例子中,我们有主要讨论形式中的回归。我们已经谈到使用多项式来拟合更复杂的方程,例如. 然而,随着我们向模型中添加更多特征,何时使用原始特征的转换成为反复试验的情况。使用神经网络,我们能够将更复杂的函数y = f(X)拟合到我们的数据中,而无需设计或转换我们现有的特征。 

神经网络的结构

当我们学习 的最优值,这使得我们的回归中的损失最小化,这实际上与单层神经网络相同:

 

图 1.10 – 一层神经网络

在这里,我们把我们的每一个特征,作为输入,在此由节点表示。我们希望学习参数, ,在此图中表示为连接。我们之间的所有乘积的最终总和给出了我们的最终预测y

  简单的神经网络基于这个初始概念,在计算中添加额外的层,从而增加复杂性和学习的参数,给我们这样的东西: 

图 1.11 – 全连接网络

每个输入节点都连接到另一层中的每个节点。这称为全连接层。从输出然后将全连接层乘以它自己的附加权重以预测y。因此,我们的预测不再只是一个函数,而是现在包括针对每个参数的多个学习权重。功能不再受. 现在,它也受到了. 参数。

  由于全连接层中的每个节点都将X的所有值作为输入,因此神经网络能够学习输入特征之间的交互特征。多个全连接层可以链接在一起学习更复杂的特征。在本书中,我们将看到我们构建的所有神经网络都将使用这个概念;将不同种类的多层链接在一起,以构建更复杂的模型。然而,在我们能够完全理解神经网络之前,还有一个额外的关键元素需要覆盖:激活函数。

激活函数

同时链接各种权重在一起可以让我们学习更复杂的参数,最终,我们的最终预测仍然是权重和特征的线性乘积的组合。如果我们希望我们的神经网络学习一个真正复杂的非线性函数,那么我们必须在我们的模型中引入一个非线性元素。这是通过使用激活函数来完成的:

图 1.12 – 神经网络中的激活函数

我们应用激活函数到我们的全连接层中的每个节点。这意味着全连接层中的每个节点都将特征和权重的总和作为输入,将非线性函数应用于结果值,并输出转换后的结果。虽然有很多不同激活函数,最近最常用的是ReLURectified Linear Unit

图 1.13 – ReLU 输出的表示

ReLU 是一个非常简单的非线性函数,当X > 0时返回y = 0当y = X。介绍完这些激活函数后,我们的最终学习函数变为非线性,这意味着我们可以创建比单独使用传统回归和特征工程组合更多的模型。

神经网络如何学习?

使用神经网络从我们的数据中学习的行为比使用基本回归学习时稍微复杂一些。虽然我们仍然像以前一样使用梯度下降,但我们需要区分的实际损失函数变得更加复杂。在没有激活函数的单层神经网络中,我们可以很容易地计算损失函数的导数,因为很容易看出损失函数是如何随着我们改变每个参数而变化的。然而,在具有激活函数的多层神经网络中,这更加复杂。

我们必须首先执行前向传递,即其中,使用模型的当前状态,我们计算 y 的预测值并将其与 y真实值进行评估,以获得损失的度量。使用这个损失,我们在网络中向后移动,计算网络中每个参数的梯度。这使我们能够知道更新参数的方向,以便我们可以向损失最小的点靠拢。这称为反向传播。我们可以计算损失函数的导数每个参数使用链式法则

 

这里,是网络中每个给定节点的输出。因此,总而言之,我们在神经网络上执行梯度下降时采取的四个主要步骤如下:

  1. 使用您的数据执行前向传递,计算网络的总损失。
  2. 使用反向传播,计算每个参数相对于网络中每个节点的损失的梯度。
  3. 更新这些参数的值,朝着损失最小的方向移动。
  4. 重复直到收敛。

神经网络中的过拟合

我们看到,在在我们的回归中,有可能添加如此多的特征,以至于有可能过度拟合网络。这达到了模型完美拟合训练数据但不能很好地推广到看不见的测试数据集的地步。这是神经网络中的一个常见问题,因为模型复杂性的增加意味着通常可以将函数拟合到不一定泛化的训练数据集。以下是总损失的图在数据集的每次前向和后向传递(称为 epoch)之后的训练和测试数据集上:

图 1.14 – 测试和训练时期

在这里,我们可以看到我们继续训练网络,随着时间的推移,随着我们越来越接近总损失最小化的点,训练损失变得越来越小。虽然这在一定程度上可以很好地推广到测试数据集,但一段时间后,随着我们的函数过度拟合训练集。对此的一种解决方案是提前停止。因为我们希望我们的模型能够对以前从未见过的数据做出良好的预测,所以我们可以在测试损失最小化的点停止训练我们的模型。一个经过充分训练的 NLP 模型可能能够轻松地对它以前见过的句子进行分类,但衡量一个模型是否真正学到了一些东西的是它对看不见的数据进行预测的能力。

用于机器学习的 NLP

与人类不同,计算机不懂文字——至少不像我们那样。为了创建能够从数据中学习的机器学习模型,我们必须首先学会表示自然语言以某种方式计算机能够处理。

当我们讨论机器学习基础知识时,您可能已经注意到,损失函数都处理数字数据,以便能够最大限度地减少损失。正因为如此,我们希望以数字格式表示我们的文本,这种格式可以构成我们输入神经网络的基础。在这里,我们将介绍几种以数字方式表示数据的基本方法。 

词袋

第一种也是最简单的方法代表的文本是通过使用词袋表示。这种方法只是简单地计算给定句子或文档中的单词并计算所有单词。然后将这些计数转换为一个向量,其中每个向量的元素是语料库中每个单词在句子中出现的次数。语料库是只是所有的话出现在所有正在分析的句子/文档中。取以下两句话:

猫坐在垫子上

狗坐在猫身上

我们可以将这些句子中的每一个表示为单词数:

 

                                                                 图 1.15 – 字数表

然后,我们可以将它们转换为单独的向量: 

The cat sat on the mat -> [2,1,0,1,1,1]

The dog sat on the cat -> [2,1,1,1,1,0]

然后可以将此数字表示用作特征向量为 的机器学习模型的输入特征

顺序表示

我们将在本书后面看到更复杂的神经网络模型,包括 RNN 和 LSTM,不仅仅采用单个向量作为输入,但可以采用矩阵形式的整个向量序列。正因为如此,为了更好地捕捉单词的顺序以及任何句子的含义,我们能够以 one-hot 编码向量序列的形式表示:

                                                 图 1.16 – One-hot 编码向量

总结

在本章中,我们介绍了机器学习和神经网络的基础知识,以及在这些模型中使用文本转换的简要概述。在下一章中,我们将简要概述 PyTorch 以及如何使用它来构建其中一些模型。

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sonhhxg_柒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值