使用预训练的BERT模型解决文本二分类和关键词提取

本文介绍了如何使用预训练的BERT模型解决文本二分类问题和关键词提取。首先,通过加载数据集、预处理、构建dataloader与dataset进行文本分类,包括模型定义、训练和验证。然后,详细阐述了利用BERT模型进行关键词提取的过程,涉及数据处理、模型加载和相似度计算。这两种方法结合BERT的语义表示能力,能有效提升任务的准确性。

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

一. 使用预训练的BERT模型解决文本二分类问题

1. 导入相关的包

import os
import pandas as pd
import torch
from torch import nn
from torch.utils.data import Dataset, DataLoader
# 用于加载bert模型的分词器
from transformers import AutoTokenizer
# 用于加载bert模型
from transformers import BertModel
from pathlib import Path

2. 定义相关参数

batch_size = 16
# 文本的最大长度
text_max_length = 128
# 总训练的epochs数,我只是随便定义了个数
epochs = 100
# 学习率
lr = 3e-5
# 取多少训练集的数据作为验证集
validation_ratio = 0.1
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')

# 每多少步,打印一次loss
log_per_step = 50

# 数据集所在位置
dataset_dir = Path("./基于论文摘要的文本分类与关键词抽取挑战赛公开数据")
os.makedirs(dataset_dir) if not os.path.exists(dataset_dir) else ''

# 模型存储路径
model_dir = Path("./model/bert_checkpoints")
# 如果模型目录不存在,则创建一个
os.makedirs(model_dir) if not os.path.exists(model_dir) else ''

print("Device:", device)

3. 进行数据读取与数据预处理

文本分类需要数据来训练模型,所以先读取数据集并进行预处理。这里我加载了训练集和验证集的CSV文件,主要进行了以下处理:

  • 填充空值
  • 拼接标题、作者、摘要等字段得到文本内容
  • 从训练集中采样部分数据作为验证集

先查看一下当前所在路径
%pwd

然后,读取数据集,进行数据处理

pd_train_data = pd.read_csv('../../原始数据/train.csv')
pd_train_data['title'] = pd_train_data['title'].fillna('')
pd_train_data['abstract'] = pd_train_data['abstract'].fillna('')

test_data = pd.read_csv('../../原始数据/testB.csv')
test_data['title'] = test_data['title'].fillna('')
test_data['abstract'] = test_data['abstract'].fillna('')
pd_train_data['text'] = pd_train_data['title'].fillna('') + ' ' +  pd_train_data['author'].fillna('') + ' ' + pd_train_data['abstract'].fillna('')+ ' ' + pd_train_data['Keywords'].fillna('')
test_data['text'] = test_data['title'].fillna('') + ' ' +  test_data['author'].fillna('') + ' ' + test_data['abstract'].fillna('')+ ' ' + pd_train_data['Keywords'].fillna('')

从训练集

### 使用 BERT 实现关键词提取 #### 方法概述 为了使用基于BERT模型进行关键词提取,可以采用类似于BERT-KPE的方法。这种方法依赖于预训练好的BERT模型来捕捉文本中的语义信息,并在此基础上进一步微调以适应特定任务——即识别并抽取文档中最能表达主题意义的关键短语[^2]。 #### 数据准备 输入数据通常是以句子或者段落的形式提供给BERT模型。对于每一个输入实例,在送入网络之前需要对其进行编码操作,这包括分词、添加特殊标记(如[CLS], [SEP])、构建注意力掩码等处理过程。这些准备工作可以通过Hugging Face提供的`transformers`库轻松完成。 #### 关键组件 - **BERT Encoder**: 负责接收经过上述预处理后的序列作为输入,并输出隐藏状态向量; - **Keyword Extractor Module**: 接收来自Encoder层的信息,用于预测哪些token更有可能成为最终选取出来的关键字或短语的一部分;这一模块可能设计为二分类器或其他适合的方式实现。 #### 示例代码 下面是一个简单的Python脚本片段展示如何加载预训练BERT模型并通过自定义头来进行关键词提取: ```python from transformers import BertTokenizer, BertModel import torch.nn as nn import torch class KeywordExtractor(nn.Module): def __init__(self): super(KeywordExtractor, self).__init__() self.bert = BertModel.from_pretrained('bert-base-chinese') # 定义额外的线性变换层或者其他结构化组件... def forward(self, input_ids, attention_mask=None): outputs = self.bert(input_ids=input_ids, attention_mask=attention_mask) sequence_output = outputs.last_hidden_state # 对sequence_output应用某些逻辑得到keyword scores... tokenizer = BertTokenizer.from_pretrained('bert-base-chinese') text = "这是一个用来演示如何使用BERT关键词提取的例子" encoded_input = tokenizer(text, return_tensors='pt', padding=True) model = KeywordExtractor() outputs = model(**encoded_input) ``` 此代码仅展示了框架性的思路,实际开发过程中还需要考虑更多细节,比如损失函数的选择、评估指标的设计等问题。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值