位置: IT常识 - 正文

NLP进阶,Bert+BiLSTM情感分析实战(nlp baseline)

编辑:rootadmin
NLP进阶,Bert+BiLSTM情感分析实战

推荐整理分享NLP进阶,Bert+BiLSTM情感分析实战(nlp baseline),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:nlp bvr,nlp bpe,nlp bpes,nlp bert,nlp bi,nlp进阶书籍,nlp bert,nlp bert,内容如对您有帮助,希望把文章链接给更多的朋友!

Bert+BiLSTM做情感分析

情感分析

情感分析一类的任务比如商品评价正负面分析,敏感内容分析,用户感兴趣内容分析、甚至安全领域的异常访问日志分析等等实际上都可以用文本分类的方式去做,情感分析的问题本质是个二分类或者多分类的问题。

什么是Bert?

BERT的全称为Bidirectional Encoder Representation from Transformers,是一个预训练的语言表征模型。它强调了不再像以往一样采用传统的单向语言模型或者把两个单向语言模型进行浅层拼接的方法进行预训练,而是采用新的masked language model(MLM),以致能生成深度的双向语言表征。

该模型有以下主要优点:

1)采用MLM对双向的Transformers进行预训练,以生成深层的双向语言表征。

2)预训练后,只需要添加一个额外的输出层进行fine-tune,就可以在各种各样的下游任务中取得state-of-the-art的表现。在这过程中并不需要对BERT进行任务特定的结构修改。

今天我们使用Bert+BiLSTM实现对菜品正负评价的情感分析预测!

数据集

数据集是我们搜集了一些菜品的正负评价,正面的评价标记为1,负面评价标记为0,将其保存为csv文件。

将数据集放在工程的根目录

下载预训练模型

下载地址:https://huggingface.co/bert-base-chinese/tree/main。

我们的数据集是中文,所以,选择中文的预训练模型,这点要注意,如果选择其他的可能会出现不收敛的情况。将下图中画红框的文件加载下来。

在工程的根目录,新建文件夹“bert_base_chinese”,将下载的模型放进去,如下图:

模型

思路:将bert做为嵌入层提取特征,然后传入BiLSTM,最后使用全连接层输出分类。创建bert_lstm模型,代码如下:

class bert_lstm(nn.Module): def __init__(self, bertpath, hidden_dim, output_size,n_layers,bidirectional=True, drop_prob=0.5): super(bert_lstm, self).__init__() self.output_size = output_size self.n_layers = n_layers self.hidden_dim = hidden_dim self.bidirectional = bidirectional #Bert ----------------重点,bert模型需要嵌入到自定义模型里面 self.bert=BertModel.from_pretrained(bertpath) for param in self.bert.parameters(): param.requires_grad = True # LSTM layers self.lstm = nn.LSTM(768, hidden_dim, n_layers, batch_first=True,bidirectional=bidirectional) # dropout layer self.dropout = nn.Dropout(drop_prob) # linear and sigmoid layers if bidirectional: self.fc = nn.Linear(hidden_dim*2, output_size) else: self.fc = nn.Linear(hidden_dim, output_size) #self.sig = nn.Sigmoid() def forward(self, x, hidden): batch_size = x.size(0) #生成bert字向量 x=self.bert(x)[0] #bert 字向量 # lstm_out #x = x.float() lstm_out, (hidden_last,cn_last) = self.lstm(x, hidden) #print(lstm_out.shape) #[32,100,768] #print(hidden_last.shape) #[4, 32, 384] #print(cn_last.shape) #[4, 32, 384] #修改 双向的需要单独处理 if self.bidirectional: #正向最后一层,最后一个时刻 hidden_last_L=hidden_last[-2] #print(hidden_last_L.shape) #[32, 384] #反向最后一层,最后一个时刻 hidden_last_R=hidden_last[-1] #print(hidden_last_R.shape) #[32, 384] #进行拼接 hidden_last_out=torch.cat([hidden_last_L,hidden_last_R],dim=-1) #print(hidden_last_out.shape,'hidden_last_out') #[32, 768] else: hidden_last_out=hidden_last[-1] #[32, 384] # dropout and fully-connected layer out = self.dropout(hidden_last_out) #print(out.shape) #[32,768] out = self.fc(out) return out def init_hidden(self, batch_size): weight = next(self.parameters()).data number = 1 if self.bidirectional: number = 2 if (USE_CUDA): hidden = (weight.new(self.n_layers*number, batch_size, self.hidden_dim).zero_().float().cuda(), weight.new(self.n_layers*number, batch_size, self.hidden_dim).zero_().float().cuda() ) else: hidden = (weight.new(self.n_layers*number, batch_size, self.hidden_dim).zero_().float(), weight.new(self.n_layers*number, batch_size, self.hidden_dim).zero_().float() ) return hidden

bert_lstm需要的参数功6个,参数说明如下:

NLP进阶,Bert+BiLSTM情感分析实战(nlp baseline)

–bertpath:bert预训练模型的路径

–hidden_dim:隐藏层的数量。

–output_size:分类的个数。

–n_layers:lstm的层数

–bidirectional:是否是双向lstm

–drop_prob:dropout的参数

定义bert的参数,如下:

class ModelConfig: batch_size = 2 output_size = 2 hidden_dim = 384 #768/2 n_layers = 2 lr = 2e-5 bidirectional = True #这里为True,为双向LSTM # training params epochs = 10 # batch_size=50 print_every = 10 clip=5 # gradient clipping use_cuda = USE_CUDA bert_path = 'bert-base-chinese' #预训练bert路径 save_path = 'bert_bilstm.pth' #模型保存路径

batch_size:batchsize的大小,根据显存设置。

output_size:输出的类别个数,本例是2.

hidden_dim:隐藏层的数量。

n_layers:lstm的层数。

bidirectional:是否双向

print_every:输出的间隔。

use_cuda:是否使用cuda,默认使用,不用cuda太慢了。

bert_path:预训练模型存放的文件夹。

save_path:模型保存的路径。

配置环境

需要下载transformers和sentencepiece,执行命令:

conda install sentencepiececonda install transformers数据集切分

数据集按照7:3,切分为训练集和测试集,然后又将测试集按照1:1切分为验证集和测试集。

代码如下:

model_config = ModelConfig() data=pd.read_csv('caipindianping.csv',encoding='utf-8') result_comments = pretreatment(list(data['comment'].values)) tokenizer = BertTokenizer.from_pretrained(model_config.bert_path) result_comments_id = tokenizer(result_comments, padding=True, truncation=True, max_length=200, return_tensors='pt') X = result_comments_id['input_ids'] y = torch.from_numpy(data['sentiment'].values).float() X_train,X_test, y_train, y_test = train_test_split( X, y, test_size=0.3, shuffle=True, stratify=y, random_state=0) X_valid,X_test,y_valid,y_test = train_test_split(X_test, y_test, test_size=0.5, shuffle=True, stratify=y_test, random_state=0)训练、验证和预测

训练详见train_model函数,验证详见test_model,单次预测详见predict函数。

代码和模型链接: https://download.csdn.net/download/hhhhhhhhhhwwwwwwwwww/36305682

本文链接地址:https://www.jiuchutong.com/zhishi/298469.html 转载请保留说明!

上一篇:机器学习中的预测评价指标MSE、RMSE、MAE、MAPE、SMAPE

下一篇:ChatGPT5是否会影响人类的发展和工作?

  • vivo手机闪充模式怎么开启(vivo手机闪充模式怎么关闭)

    vivo手机闪充模式怎么开启(vivo手机闪充模式怎么关闭)

  • 苹果手机可以互传软件吗(苹果手机可以互相连接吗?)

    苹果手机可以互传软件吗(苹果手机可以互相连接吗?)

  • magicbook和matebook区别(magicbookair)

    magicbook和matebook区别(magicbookair)

  • i3 3240 cpu哪一年的(i3 3240什么时候出的)

    i3 3240 cpu哪一年的(i3 3240什么时候出的)

  • 微信把人拉黑后对方知道吗(微信把人拉黑后对方还能添加吗)

    微信把人拉黑后对方知道吗(微信把人拉黑后对方还能添加吗)

  • 钉钉浮窗看抖音算时间吗(钉钉悬浮窗看抖音会不会计入时长)

    钉钉浮窗看抖音算时间吗(钉钉悬浮窗看抖音会不会计入时长)

  • 微机的字长是四个字节这意味着什么(微机的字长是四个字节这意味着)

    微机的字长是四个字节这意味着什么(微机的字长是四个字节这意味着)

  • 微信直接加好友不用验证的解决方法是什么(微信直接加好友不用验证对方能看到吗)

    微信直接加好友不用验证的解决方法是什么(微信直接加好友不用验证对方能看到吗)

  • 景深大是清晰还是模糊(景深大是背景实还是虚)

    景深大是清晰还是模糊(景深大是背景实还是虚)

  • emui10多久可以更新(emui10更新时间)

    emui10多久可以更新(emui10更新时间)

  • 绿洲怎么注销账号(绿洲注销账号后点赞还有吗)

    绿洲怎么注销账号(绿洲注销账号后点赞还有吗)

  • 有什么软件可以直播(有什么软件可以识别图片的文字)

    有什么软件可以直播(有什么软件可以识别图片的文字)

  • wps的替换功能在哪里(wps的替换在哪里)

    wps的替换功能在哪里(wps的替换在哪里)

  • 华为桌面圆圈怎么取消(华为桌面圆圈怎么弄掉?)

    华为桌面圆圈怎么取消(华为桌面圆圈怎么弄掉?)

  • 华为nova5pro卡槽在哪(华为nova5pro卡槽是哪个孔)

    华为nova5pro卡槽在哪(华为nova5pro卡槽是哪个孔)

  • 华为p30微信视频怎么美颜(华为p30微信视频有美颜功能吗)

    华为p30微信视频怎么美颜(华为p30微信视频有美颜功能吗)

  • ipad怎么做ppt(苹果ipad怎么做ppt)

    ipad怎么做ppt(苹果ipad怎么做ppt)

  • oppo电话黑名单在哪里(oppo电话黑名单怎么找出来)

    oppo电话黑名单在哪里(oppo电话黑名单怎么找出来)

  • 荣耀play能分屏吗(荣耀play能分屏多任务吗)

    荣耀play能分屏吗(荣耀play能分屏多任务吗)

  • iphone设置恋爱纪念日(iphone设置恋爱纪念日到桌面)

    iphone设置恋爱纪念日(iphone设置恋爱纪念日到桌面)

  • 华为mate9怎么切换默认的输入法(华为mate9怎么切换系统)

    华为mate9怎么切换默认的输入法(华为mate9怎么切换系统)

  • 华为p30忘记锁屏密码(华为p30忘记锁屏密码怎么解锁)

    华为p30忘记锁屏密码(华为p30忘记锁屏密码怎么解锁)

  • 迅雷如何通过苹果验证(迅雷如何通过苹果支付)

    迅雷如何通过苹果验证(迅雷如何通过苹果支付)

  • word表格里面的文字自动下一行(word表格里面的字怎么弄到中间)

    word表格里面的文字自动下一行(word表格里面的字怎么弄到中间)

  • flex布局之flex-direction(flex布局用法)

    flex布局之flex-direction(flex布局用法)

  • 出售写字楼需要什么手续
  • 汽车保养 美容
  • 餐饮毛利率多少是赚钱的
  • 债权投资借贷方
  • 分公司预缴企业所得税总公司可以抵扣吗
  • 企业所得税季报营业收入,营业成本怎么填
  • 抵扣白条账单是怎么回事
  • 个人转让商铺个人所得税核定征收
  • 保证金抵扣货款分录
  • 原材料出现贷方余额
  • 企业赞助学校发言稿
  • 政府转账捐赠怎么做分录
  • 分票报关合票出提单怎么清关
  • 增值税专用发票抵扣期限
  • 增值税免税收入计入什么科目
  • 核定征收营业范围
  • 一般纳税人 开以前的税率
  • 税务的电子钥匙是干嘛的
  • 法人往公户转账需要备注吗
  • 纸巾可以开专票吗
  • 红字发票如果开多了下个月能进行抵扣么?
  • 收到银行利息会计分录怎么做账
  • 应付职工薪酬明细表怎么填写
  • 在建工程二级科目待摊支出
  • 借用下属单位人员违反什么政策
  • win10专业版如何改为家庭版
  • win11任务栏图标删除
  • 出售提完折旧的固定资产怎么记账
  • win10电脑如何设置锁屏时间
  • 笔记本电脑怎么重装系统
  • 华为手机隐藏应用
  • 一个更简单的无限级分类菜单代码
  • 春天里的____作文
  • 现金结算起点包括1000元吗
  • 收到供应商现金怎么入账
  • 员工工伤一次性赔偿会计分录
  • 融资租入固定资产的入账价值
  • codelite教程
  • 股权指的是
  • 现金长款怎么做会计分录
  • phpsessid是什么
  • nginx怎么搭建
  • 企业会计准则条文释义与案例详解
  • 库存股属于什么会计科目
  • 银行历年账单怎么查
  • php中验证码如何实现登录验证
  • 煤炭贸易公司的业务流程
  • 以固定资产抵债发生的固定资产
  • 建筑公司包含哪些业务
  • 织梦标签工具
  • mongodb skip数据量大
  • 过期报废产品销毁
  • 季度所得税怎么算
  • 申报表填完后下一步是什么
  • 公司购买办公楼需要缴纳城镇土地使用税吗
  • 消防设备要多少钱
  • 出口退税是什么
  • 包装物的账务处理例题
  • 境外运费支付属什么费用
  • 先收款后给发票合法吗
  • 转出未交增值税借方余额表示什么
  • 现金余额出现负数的原因
  • 有借必有贷借贷必相等的记账规则适用于
  • 现金收账凭证
  • 结转销售成本怎么操作
  • windowssever 2003
  • ubuntu安装软件没反应
  • Windows Server 2008故障转移群集简介
  • bp程序是什么意思
  • win10阻止可能不需要的应用吗
  • windows媒体中心关不掉
  • 勒索病毒一般勒索多少钱
  • 阿里云ecs keepalived
  • js原生dialog
  • nodejs怎么连接mysql
  • android解析xml的方法中,将整个文件加载到内存
  • 火狐firefox浏览器官网
  • 房屋附属设备和配套设施计征房产税
  • 江苏联通客服电话人工服务号码
  • 强化管理定义
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设