PyThorch的自然语言处理学习(一)

本文介绍了监督学习的基本概念,包括观察、目标、模型、参数和预测。接着讨论了文本表示,从one-hot编码到TF-IDF,展示了如何将文本数据转换为可用于机器学习的形式。还提到了PyTorch中的计算图和张量操作,以及张量的梯度计算。此外,提及了GPU在深度学习中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

监督学习范式

机器学习中的监督,或者简单的监督学习,是指将目标(被预测的内容)的ground truth用于观察(输入)的情况。
在这里插入图片描述

  • observations:观察是想要预测的东西,用x表示观察值,观察值也叫做输入。
  • targets:目标是和观察相对应的标签,通常是要被预测的事情,用y表示,也被称为ground truth。
  • model:模型是一个数学表达式或者函数,受到一个观察值x,并预测其目标标签的值。
  • parameters:表示权重,参数模型,用符号w表示。
  • predictions:预测,也叫做估计,是模型在给定观测值的情况下所猜测的目标的值。
  • loss function:损失函数,预测和训练数据里的观测目标之间的距离。给定一个目标及其预测,损失函数将分配一个损失的标量实值,损失值越低则预测效果越好。2
    在这里插入图片描述

样本和目标编码

用数字表示观测值(文本),以便与机器学习算法一起使用。
在这里插入图片描述
表示文本的一种简单的方法是用数字向量进行表示。 有无数种方法可以执行这种映射/表示。

独热表示

one-hot表示是从一个零向量开始,如果单词出现在句子或文档里,则将向量里的相应条目设置为1。

对句子进行标记,忽略标点符号,并将所有的单词都用小写字母表示,就会得到一个大小为8的词汇表:{time, fruit, flies, like, a, an, arrow, banana}。所以,我们可以用一个八维的one-hot向量来表示每个单词。

短语“like a banana”的one-hot表示将是一个3×8矩阵,其中的列是8维的one-hot向量。通常还会看到“折叠”或二进制编码,其中文本/短语由词汇表长度的向量表示,用0和1表示单词的缺失或存在。“like a banana”的二进制编码是:[0,0,0,1,1,0,0,1]。

在这里插入图片描述

TF 词频表示

在这里插入图片描述

sklearn生成折叠的单热或者二进制表示

from sklearn.feature_extraction.text import CountVectorizer
import seaborn as sns

corpus =['Time flies flies like an arrow.',
'Fruit flies like a banana.']
one_hot_vectorizer =CountVectorizer(binary=True)
#binary=True则CountVectorizer不再使用术语/令牌的计数。如果文档中存在令牌,则令牌为1(如果不存在),则与令牌0的出现频率无关。因此,您将只处理二进制值。
#默认为False,一个关键词在一篇文档中可能出现n次,如果binary=True,非零的n将全部置为1,这对需要布尔值输入的离散概率模型的有用的
one_hot = one_hot_vectorizer.fit_transform(corpus).toarray()
#CountVectorizer是通过fit_transform函数将文本中的词语转换为词频矩阵,矩阵元素a[i][j] 表示j词在第i个文本下的词频。即各个词语出现的次数
x = ['a','arroe','banana','files','fruit','like','time']
sns.heatmap(one_hot, annot=True,
            cbar=False, xticklabels=True,
            yticklabels=['Sentence 1','Sentence 2'])

在这里插入图片描述

IDF

考虑一组专利文件。您可能希望它们中的大多数都有诸如claim、system、method、procedure等单词,并且经常重复多次。TF表示对更频繁的单词进行加权。然而,像“claim”这样的常用词并不能增加我们对具体专利的理解。
相反,如果“tetrafluoroethylene”这样罕见的词出现的频率较低,但很可能表明专利文件的性质,我们希望在我们的表述中赋予它更大的权重。

在这里插入图片描述

TF-IDF

TF-IDF = TF*IDF
TF−IDF公式表达来一次词的出现频率,并且在一定程度上降低了某些高频词的影响。

如果一个单词在所有文档里都出现,那这个单词IDF=0,则TF-IDF=0,从而可以忽略它的重要性。如果一个词在文档里出现的很少,那么其IDF值将会是最大值logN。

from sklearn.feature_extraction.text import TfidfVectorizer
import seaborn as sns
tfidf_vectorizer = TfidfVectorizer()
tfidf = tfidf_vectorizer.fit_transform(corpus).toarray()
#计算文档里的词的TF-IDF并矩阵表示
x2 = ['a','arroe','banana','files','fruit','like','time']
sns.heatmap(tfidf,annot=True,
            cbar=False,xticklabels=x2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值