《自然语言处理技术》——实训13 基于LSTM实现情感分析.docx
《《自然语言处理技术》——实训13 基于LSTM实现情感分析.docx》由会员分享,可在线阅读,更多相关《《自然语言处理技术》——实训13 基于LSTM实现情感分析.docx(9页珍藏版)》请在三一文库上搜索。
1、项目3深入文本进阶处理基于LSTM实现情感分析1实训目标(1) 熟练进行情感语料的读取,以及评论词语的向量化。(2) 熟练使用torch库中的LSTM类构建LSTM模型。(3) 熟练掌握LSTM模型接收训练数据进行训练的步骤。(4) 熟练掌握LSTM模型预测效果测试的方法。2实训环境环境版本说明Windows1064电脑操作系统Python3.8.5Python语言版本pandas1.3.0主要用于数据读取、清洗等操作NumPy1.21.6主要用于Python中的数值计算jieba0.42.1主要用于文本分词Gensim4.2.0主要用于检索文本、计算文本相似度、训练词向量、建模主题等Matp
2、lotlib3.3.0主要用于数据可视化PaddlePaddle2.4.2是一个深度学习框架,提供了高效的计算框架和优化算法PaddleSpeech1.2.0主要用于语音和音频中的各种关键任务的开发scikit-leam1.0.2广泛地用于统计分析和机器学习建模等数据科学领域Librosa0.8.1主要用于分析一般的音频信号,是一个非常强大的Python语音信号处理的第三方库NLTK3.5是一个常用的自然语言处理工具包,可用于文本处理、语义分析、词性标注等SciPy1.7.3是一个科学计算工具包,可用于数学、科学、工程学等领域pyttsx32.9.0主要用于将文本转换成语音3实训说明情感分析的
3、数据来源为某电商平台的热水器评论数据,其中正面评论10677条,负面评论10428条。本任务的目的是通过构建模型识别各条评论的情感倾向,即情感分析,正面评论为1,负面评论为0。情感分析基本流程如图3-1所示。图3-1情感分析流程图4实训步骤4.1 读取正负情感语料由于情感分析的目的是将数据划分为正面和负面标签,故需将正负语料的数据进行“贴标签”处理,正面评论标签为1,负面评论标签为0,读取语料数据如代码3-1所示。代码3-1读取语料数据importpandasaspd#读取正负情感语料dataset=pd.read-csv(,.dataChnSentiCorp-htLall.csv).drop
4、na()df=dataset,label,review,reviews=df.review.values.tolist()labels=df.label.values.tolist()reviews=df.review.values.tolist()labels=df.label.values.tolist()4.2 评论词语向量化由于数据为评论文本的形式,不能直接用于建模,所以需要对评论数据进行文本的分词处理,计算每个词语出现的频次,将分词结果进行向量化,变为模型可以识别的数据形式。由于每一串索引的长度并不相等,所以为了方便模型的训练,需要将索引的长度标准化,这里每条评论取50个词作为标准。
5、最后再将数据划分为训练集和测试集以便建模训练。将评论文本中的词语向量化,并划分数据,如代码3-2所示。代码3-2词语向量化并划分数据importjieba#分词,去除停用词,生成词汇表withopen(.datastopwordsHIT.txt,r)asf:stopwords-list=line.strip()forlineinf.readlines()#加载停用词表并去重vocab=#词汇表forreviewinreviews:text=review#使用结巴分词库对文本进行分词disease_List=list(set(jieba.cut(text)#去除停用词filtered=wforw
6、indisease_Listif(wnotinStoPWOrdsist)vocab.cxtend(filtered)#将分词结果加入词汇表vocab=list(set(vocab)#去重# 将词汇表中的词语映射为数字IDVocab=dict()Vocab.setdefault(,0)foriinrange(len(vocab):Vbcabvocabi=i+1# 将评论文本转化为数字ID序列defgeneratejds(review):text=reviewdisease_List=list(set(jieba.cut(text)filtered=wforwindisease_Listif(wn
7、otinstopwords_list)|res=Vocabvalforvalinfilteredreturnres# 将评论的数字ID序列标准化,使它们具有相同的长度pad-size=50#每条评论的长度input_ids=#记录评论的数字ID序列label=#记录评论的标签foriinrange(len(df):ids=generate-ids(reviewsi)#将评论文本转化为数字ID序列iflen(ids)pad_size:ids=ids+0*(pad_size-len(ids)#在数字ID序列末尾填充0else:ids=ids:pad_size#如果数字ID序列超过了指定的长度,那么
8、将其截断inputjds.append(ids)label.append(int(labelsi)#将标签加入label列表中# 划分训练集和测试集# 将样本随机打乱importnumpyasnprandom-rder=list(range(len(input_ids)np.random.seed(2023)#设置随机种子,以确保每次运行时结果相同np.random,shuffle(random_order)# 将样本分成训练集和测试集input_ids_train=np.array(input_idsiforiinrandom_order:int(len(input_ids)*0.8)y_t
9、rain=np.array(labeliforiinrandom_order|:int(len(input_ids)*0.8)input_ids_test=np.array(inputjdsiforiinrandom_orderint(len(input_ids)*0.8):)y_test=np.array(labeliforiinrandom_order|int(len(input_ids)*0.8):)1)PrintC训练集样本量:1en(inPULidSJrain)Print(测试集样本量:,len(inputjds-test)运行代码3-2,并输出训练集和测试集样本量如下。训练集样本量
10、6212测试集样本量:15534.3模型构建设置模型参数,包括词汇表的大小、词嵌入向量的维度、LSTM层隐藏状态的维度、情感分类的类别数等,最后构建LSTM模型,代码3-3所示。代码3-3模型构建importtorchimporttorch.nnasnn#定义LSTM模型classLSTMModel(nn.Module):def_init_(self,vocab_size,embed_size,hidden_size,num_classes):super(LSTMModel,self)._init_()# 定义词嵌入层Selfembcdding=nn.Embcdding(vocab_size
11、embcd_size)# 定义LSTM层self.Istm=nn.LSTM(embed-size,hiddcn_size,batch_first=True)# 定义全连接层self.fc=nn.Linear(hiddcn_size,num_classes)defforward(self,x):# 将输入的词语ID序列转化为词嵌入向量embedded=self.embedding(x)# 将词嵌入向量输入到LSTM层中out,_=self.lstm(embedded)# 将LSTM层的输出传入全连接层out=self.fc(out:,-1,:)returnout#设置模型的参数vocab_si
12、ze=len(vocab)#词汇表的大小embed_size=100#词嵌入向量的维度hidden_size=128#LSTM层的隐藏状态的维度num_classes=2#情感分类的类别数#创建LSTM模型model=LSTMModel(vocab_size,embed_size,hidden_size,num_classes)在构建基于LSTM的情感分类模型时,使用了3个关键的神经网络层,主要为词嵌入层、LSTM层和全连接层,设置3个神经网络层的函数及其参数说明如表3-1所示。表3-1LSTM模型中的3个关键层函数说明函数说明参数nn.Embedding词嵌入层。将输入的词语ID序列转换为词
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 自然语言处理技术 自然语言处理技术实训13 基于LSTM实现情感分析 自然语言 处理 技术 实训 13 基于 LSTM 实现 情感 分析
