文章目录
bert初学者笔记,有问题欢迎大佬指正!本文介绍了如果查看bert的结构,方便小白进行理解,在看了一些论文资料后,对bert有初步的了解,面对代码可能无从下手,但是在查看bert 的结构以后就清楚很多,对于bert 的输入、输出有具象化的了解。
本文代码参考:
基于BERT的新闻文本分类
BERT文本分类,代码超基础、超详细解析
一、数据准备
1.1 代码:
本文使用的excel存放数据:
label表示分类标签,label=0的text都是0类别。本文将类别名称一同放在text,0的第一个text=高等数学(高数)表示0类别的文档标题是高等数学(高数),以此类推。
本文的原始数据是一堆docx文件,将文件名称和内容提出,放入excel,打上标签。
import pandas as pd
from docx import Document
import os
import re
# 读取 .docx 文件内容并分句
def read_doc(file_path):
try:
doc = Document(file_path)
text = []
for paragraph in doc.paragraphs:
text.append(paragraph.text)
content = '\n'.join(text)
# 去除 AAA 和 \n
content = content.replace('AAA', '').replace('\n', ' ').replace('#', ' ').replace('*', ' ')
# 按句号或感叹号分句
sentences = re.split(r'[。!]', content)
# 去除空字符串
sentences = [s.strip() for s in sentences if s.strip()]
return sentences
except Exception as e:
print(f"Error reading {
file_path}: {
e}")
return []
# 从指定文件夹读取所有 .docx 文件并合并到一个 DataFrame 中
def load_data_from_folder(folder_path):
data = {
'label': [],
'text': []
}
id_counter = 0
for filename in os.listdir(folder_path):
if filename.endswith('.docx'):
file_path = os.path.join(folder_path, filename)
sentences = read_doc(file_path)
if sentences:
# 去除文件名中的 .docx 后缀
title = filename[:-5]
# 添加标题
data['label'].append(id_counter)
data['text'].append(title)
# 添加句子
for sentence in sentences:
# 去除句子中的 AAA、*、- 和多余空格
cleaned_sentence = sentence.replace('AAA', '').replace('*', '').replace('-', ' ')
cleaned_sentence = re.sub(r'\s+', ' ', cleaned_sentence).strip()
data['label'].append(id_counter)
data['text'].append(cleaned_sentence)
id_counter += 1
return pd.DataFrame(data)
def main():
folder_path = 'data'
data = load_data_from_folder(folder_path)
data.to_excel('bert.xlsx', index=False)
print("Data has been written to bert.xlsx")
if __name__ == '__main__':
main()
1.2 代码解释:
1.标签是从0开始标的,不是1,读者可以自行修改。
2.读取目录:
这个代码和我的docx文件的目录如下:
项目
——代码
——data文件夹
————docx文件
因此我的folder_path写的就是‘data’,读者自行修改,不知道怎么改的交给ai生成代码。
3.剔除了docx文件中的AAA,#,*,等符号,读者可以自行修改。
二、bert文本分类
2.1 代码
import torch # PyTorch库
import pandas as pd #