PyTorch实战:BI-LSTM模型的情感分析详解

总述

本文的目标是针对一个句子,给出其情感二分类,正向/负向。

代码存放地址:

https://github.com/stay-leave/BI-LSTM-sentiment-classify

输入数据集格式:

标签为1代表正向,0代表负向。

txt版本(即训练集、测试集不在一个文件内),这里我用的是百度千言数据集:

xls版本(即训练集、测试集在一个文件内):

输出数据示例:

接下来对整个流程作梳理。

数据处理

目标:将原始数据转为tensor并加载到dataloader,以供后续使用。

思路是将文本从txt或xls中提取出来,进行分词,划分句子长度,将句子进行编码,最后将其加载到pytorch的dataloader类。

1.提取文件

txt文件的提取:

def txt_file(self,inpath):
    #输入TXT,返回列表
        data = []
        fp = open(self.inpath,'r',encoding='utf-8')
        for line in fp:
            line=line.strip('\n')
            line=line.split('\t')
            data.append(line)
        data=data[1:]#去掉表头
        return data

xls文件的提取:

def xls_file(self,inpath):
        """提取一个文件为一个列表"""
        data = xlrd.open_workbook(self.inpath, encoding_override='utf-8')
        table = data.sheets()[0]#选定表
        nrows = table.nrows#获取行号
        ncols = table.ncols#获取列号
        numbers=[]
        for i in range(1, nrows):#第0行为表头
            alldata = table.row_values(i)#循环输出excel表中每一行,即所有数据
            numbers.append(alldata)
        return numbers

结果如下:

2.对句子进行分词

上面的数据中同时包含句子和标签,因此需要将其分开进行处理。

这是txt文件的代码,若使用xls文件,需要注释掉splitt函数的label那一行,取消下一行的注释。

 def tokenlize(self,sentence):
        #分词,只要/保留 中文/其他字符,单句
        #sentence = re.sub('[^\u4e00-\u9fa5]+','',sentence)
        URL_REGEX = re.compile(r'(?i)\b((?:https?://|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'".,<>?«»“”‘’]))',re.IGNORECASE)
        sentence= re.sub(URL_REGEX,'', sentence)# 去除网址
        sentence =jieba.cut(sentence.strip(),cut_all=False,use_paddle=10)#默认精确模式
        out=[] 
        for word in sentence:
            out.append(word)
        return out

    def splitt(self,data):
        #句子和标签的提取
        sentence=[]
        label=[]
        for i in data:
            sentence.append(self.tokenlize(i[1]))
            label.append(int(i[0]))#使用txt
            #label.append(int(i[2]))#使用xls
        sentence=tuple(sentence)
        label=tuple(label)
        return sentence,label

结果如下:

3.建立字典,对句子进行编码

思路是统计词频,将句子转换为数字序列,同时根据自己设置的句子长度对句子进行截取和补全。

这里使用PAD:0作为补全和未登录词的表示。

首先是建立字典,(词:词频):

txt与xls的转换同上

def cou
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值