深度学习与大模型 习题及答案 第5章-循环神经网络与自然语言处理-课后习题_第1页
深度学习与大模型 习题及答案 第5章-循环神经网络与自然语言处理-课后习题_第2页
深度学习与大模型 习题及答案 第5章-循环神经网络与自然语言处理-课后习题_第3页
深度学习与大模型 习题及答案 第5章-循环神经网络与自然语言处理-课后习题_第4页
深度学习与大模型 习题及答案 第5章-循环神经网络与自然语言处理-课后习题_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第五章循环神经网络与自然语言处理一、问答题1.简述循环神经网络的基本原理。答:循环神经网络(RNN)的基本原理:核心是通过隐藏层的循环连接保留历史信息,像“带记忆的神经网络”。它在处理序列数据时,每个时刻的输出不仅依赖当前输入,还会结合上一时刻隐藏层的状态,实现对时序信息的捕捉和传递。

2.简述时间序列与RNN的关系。答:时间序列与RNN的关系:时间序列是具有时序依赖的序列数据(如股价、气温),而RNN的核心优势是通过循环结构捕捉时序信息,二者是“数据类型”与“适配模型”的对应关系,RNN是处理时间序列预测、分类等任务的经典模型。3.简述循环神经网络的局限性及解决思路。答:局限性:存在梯度消失/爆炸问题,难以捕捉长序列依赖;模型复杂度高时训练效率低。解决思路:用LSTM(长短期记忆网络)或GRU(门控循环单元)替代传统RNN,通过门控机制控制信息传递,缓解梯度问题;也可采用梯度裁剪、优化初始化等方法辅助改进。二、实践题

基于PyTorch库包实现Word2Vec文本分类。要求:基于PyTorch库包实现Word2Vec文本分类,过程包括数据收集、预处理、Word2Vec模型训练和评估等主要步骤。

答:1环境准备pipinstalltorchtorchvisionnumpypandasnltkgensimscikit-learn2数据收集importnumpyasnpimportpandasaspdfromsklearn.datasetsimportfetch_20newsgroupsfromsklearn.model_selectionimporttrain_test_splitfromsklearn.metricsimportaccuracy_score,classification_report#加载数据(过滤无关信息,仅保留文本内容)newsgroups=fetch_20newsgroups(subset='all',remove=('headers','footers','quotes'),categories=None,#保留所有20个类别shuffle=True,random_state=42)#转换为DataFrame,便于处理data=pd.DataFrame({'text':newsgroups.data,'label':newsgroups.target})#划分训练集和测试集(8:2)train_texts,test_texts,train_labels,test_labels=train_test_split(data['text'],data['label'],test_size=0.2,random_state=42)3数据处理importnltkfromnltk.corpusimportstopwordsfromnltk.tokenizeimportword_tokenizeimportre#下载nltk依赖(首次运行需执行)nltk.download('punkt')nltk.download('stopwords')#定义预处理函数defpreprocess_text(text):#1.小写转换text=text.lower()#2.去除特殊字符、数字和多余空格text=re.sub(r'[^a-zA-Z\s]','',text)text=re.sub(r'\s+','',text).strip()#3.分词tokens=word_tokenize(text)#4.去停用词(英文停用词)stop_words=set(stopwords.words('english'))tokens=[tokenfortokenintokensiftokennotinstop_wordsandlen(token)>2]#过滤短词returntokens#对训练集和测试集文本进行预处理train_corpus=[preprocess_text(text)fortextintrain_texts]test_corpus=[preprocess_text(text)fortextintest_texts]#过滤空文本(预处理后可能为空)train_corpus=[tokensfortokensintrain_corpusiflen(tokens)>0]test_corpus=[tokensfortokensintest_corpusiflen(tokens)>0]#同步过滤对应标签train_labels=train_labels[:len(train_corpus)]test_labels=test_labels[:len(test_corpus)]4模型训练fromgensim.modelsimportWord2Vec#配置Word2Vec参数w2v_params={'vector_size':100,#词向量维度'window':5,#上下文窗口大小'min_count':2,#最小词频(过滤低频词)'sg':1,#1=Skip-gram模型,0=CBOW模型'workers':4,#并行训练线程数'epochs':10#训练轮数}#训练Word2Vec模型w2v_model=Word2Vec(sentences=train_corpus,**w2v_params)#保存Word2Vec模型(可选)w2v_model.save("word2vec.model")defget_text_vector(tokens,w2v_model,vector_size):"""将文本转化为词向量均值"""vectors=[]fortokenintokens:iftokeninw2v_model.wv:#仅保留在Word2Vec中存在的词vectors.append(w2v_model.wv[token])iflen(vectors)==0:#若文本中无有效词,返回零向量returnnp.zeros(vector_size)returnnp.mean(vectors,axis=0)#提取训练集和测试集的文本特征vector_size=100train_features=np.array([get_text_vector(tokens,w2v_model,vector_size)fortokensintrain_corpus])test_features=np.array([get_text_vector(tokens,w2v_model,vector_size)fortokensintest_corpus])5pytorch模型##构建数据集importtorchfromtorch.utils.dataimportDataset,DataLoaderfromtorchimportnn,optim#定义自定义数据集类classTextClassificationDataset(Dataset):def__init__(self,features,labels):self.features=torch.tensor(features,dtype=torch.float32)self.labels=torch.tensor(labels,dtype=torch.long)def__len__(self):returnlen(self.features)def__getitem__(self,idx):returnself.features[idx],self.labels[idx]#创建数据加载器(批量训练)batch_size=32train_dataset=TextClassificationDataset(train_features,train_labels)test_dataset=TextClassificationDataset(test_features,test_labels)train_loader=DataLoader(train_dataset,batch_size=batch_size,shuffle=True)test_loader=DataLoader(test_dataset,batch_size=batch_size,shuffle=False)##分类模型定义classTextClassifier(nn.Module):def__init__(self,input_dim,num_classes):super(TextClassifier,self).__init__()#全连接层:输入维度=词向量维度(100),输出维度=类别数(20)self.fc1=nn.Linear(input_dim,512)self.fc2=nn.Linear(512,256)self.fc3=nn.Linear(256,num_classes)self.dropout=nn.Dropout(0.5)#防止过拟合self.relu=nn.ReLU()defforward(self,x):x=self.relu(self.fc1(x))x=self.dropout(x)x=self.relu(self.fc2(x))x=self.dropout(x)x=self.fc3(x)returnx#初始化模型:输入维度=100,类别数=20model=TextClassifier(input_dim=vector_size,num_classes=20)##模型训练与评估#损失函数(多分类任务用交叉熵损失)criterion=nn.CrossEntropyLoss()#优化器(Adam)optimizer=optim.Adam(model.parameters(),lr=1e-3)#训练轮数epochs=20#设备配置(CPU/GPU自动适配)device=torch.device("cuda"iftorch.cuda.is_available()else"cpu")model.to(device)defevaluate_model(model,test_loader,device):model.eval()#评估模式all_preds=[]all_labels=[]withtorch.no_grad():#禁用梯度计算forfeatures,labelsintest_loader:features,labels=features.to(device),labels.to(device)outputs=model(features)_,preds=torch.max(outputs,1)#获取预测类别all_preds.extend(preds.cpu().numpy())all_labels.extend(labels.cpu().numpy())#计算准确率并输

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论