使用BERT/BiLSTM + CRF 模型进行NER进展记录~

article/2025/8/9 15:30:17

使用代码处理数据集,发现了一些问题,以及解决办法~

下载了一组数据集,数据存放在CSV中,GBK格式。如下:

首先对每一列直接进行NER抽取,结果非常不好:

几乎是乱抽取的,解决办法是自己创建了一个词库:

创建词库需要对自己的数据集进行分词,然后对出现次数进行统计,我统计了前1000个:

import pandas as pd
import os
from collections import Counter
import jieba
from tqdm import tqdminput_dir = 'data/chinese_dialogue_medical'
fields = ['title', 'ask', 'answer']
all_text = []# 读取所有csv文件内容
def read_all_text():print("开始读取CSV文件...")csv_files = [f for f in os.listdir(input_dir) if f.endswith('.csv')]for file in tqdm(csv_files, desc="处理CSV文件"):path = os.path.join(input_dir, file)try:df = pd.read_csv(path, encoding='gbk')print(f"成功读取 {file} (GBK编码)")except Exception:try:df = pd.read_csv(path, encoding='gb18030')print(f"成功读取 {file} (GB18030编码)")except Exception as e:print(f"无法读取 {file}: {str(e)}")continuefor field in fields:if field in df.columns:texts = df[field].dropna().astype(str).tolist()all_text.extend(texts)print(f"从 {file} 的 {field} 字段中提取了 {len(texts)} 条文本")# 分词并统计高频词
def stat_terms():print("\n开始分词和统计...")words = []for text in tqdm(all_text, desc="分词处理"):words.extend(list(jieba.cut(text)))print("统计词频...")counter = Counter(words)# 过滤掉长度为1的词和常见无意义词stopwords = set([',', '。', '的', '了', '和', '是', '在', '我', '有', '也', '就', '不', '都', '与', '及', '或', '你', '他', '她', '吗', '啊', '吧', '哦', '呢', '!', '?', '、', ':', ';', '(', ')', '(', ')', '[', ']', '{', '}', ' ', '', '\n'])result = [(w, c) for w, c in counter.most_common() if len(w) > 1 and w not in stopwords]return resultif __name__ == '__main__':read_all_text()print(f"\n总共读取了 {len(all_text)} 条文本")result = stat_terms()print(f"\n统计出 {len(result)} 个高频词")# 输出前300个高频词到txtoutput_file = 'data/auto_medical_terms.txt'with open(output_file, 'w', encoding='utf-8') as f:for w, c in result[:1000]:f.write(f'{w}\t{c}\n')print(f'高频词统计完成,结果已保存到 {output_file}') 

然后将疾病相关的词放到我的词表中去。

基于新的词表进行训练,结果如下:

没有识别出来...解决中。 

然后发现没有正确加载词表,此外词表未加入同义词等内容。解决中。

刚刚代码有问题,修改之后重新识别。首先,我第一次设计的词表非常不完善,后续增加了中国药典、疾病指南之类的官方书籍的目录进去,现在比较全面了。

其次,我刚刚没有使用到实体识别的模型。


http://www.hkcw.cn/article/framtmqNcB.shtml

相关文章

18. Qt系统相关:多线程

一、概述 在Qt中,使用QThread类对系统线程进行了封装。QThread代表一个在应用程序中可独立控制的线程,也可以和进程中的其他线程共享数据。 二、QThread常用API 三、QThread使用 自定义一个类,继承自QThread,并且只有一个线程处…

YOLOv7 辅助检测头与重参数化解析2025.6.1

YOLOv7 是目标检测领域的一个重要模型,其在速度和精度之间取得了较好的平衡。其中的**辅助检测头(Auxiliary Head)和重参数化(Re-parameterization)**是其核心创新点。以下是对这两个技术的详细解析: 一、辅…

CP4-OFDM模糊函数原理及仿真

文章目录 前言一、互补P4码序列二、barker-OFDM 信号1、OFDM 信号表达式2、模糊函数表达式 三、MATLAB 仿真1、MATLAB 核心源码2、仿真结果①、CP4-OFDM 模糊函数②、CP4-OFDM 距离分辨率③、CP4-OFDM 速度分辨率④、CP4-OFDM 等高线图 四、资源自取 前言 本文进行 CP4-OFDM 的…

【C语言预处理详解(上)】--预定义符号,#define定义常量,#define定义宏,带有副作用的宏参数,宏替换的规则,宏和函数的对比

目录 一.预定义符号 二.#define定义常量 三.#define定义宏 3.1--定义宏的方法和注意事项 3.2--带有副作用的宏参数 3.3--宏替换的规则 四.宏与函数的对比 🔥个人主页:草莓熊Lotso的个人主页 🎬作者简介:C研发方向学习者 &a…

CppCon 2014 学习:C++ Memory Model Meets High-Update-Rate Data Structures

这段内容是对一个主题的概览(Overview),涉及并行更新的问题,特别是“Issaquah Challenge”这个具体案例。详细解读如下: Overview(概览) The Issaquah Challenge 这是一个特定的挑战或问题&am…

如何用利用deepseek的API能力来搭建属于自己的智能体-优雅草卓伊凡

如何用利用deepseek的API能力来搭建属于自己的智能体-优雅草卓伊凡 上一篇文章我们已经介绍了智能体和大模型AI的区别,现在我们开始搭建自己的智能体进行工作 1. 了解 DeepSeek 提供的 AI 能力 DeepSeek 提供强大的 大语言模型(LLM)&#x…

智能制造之精读——RPA制造行业常见场景【附全文阅读】

RPA 在制造行业应用广泛,为企业带来显著价值,是极具潜力的智能化解决方案。它能节省成本,降低人力与管理成本;提升运营效率,减少人机交互损耗;提高质量,保障流程准确性;还能增强合规…

【2025.06】jupyter notebook 7+ 新手安装、配置、扩展应用(windows篇)

本文目录 前述一、安装二、配置2.1 jupyter_notebook_config.py生成配置文件2.2 服务器与网络设置a. 修改端口号b. 允许远程访问c. 设置工作目录 2.3 安全与认证a. 禁用密码登录(仅限本地安全环境)b. 设置登录密码c. 启用SSL加密(HTTPS&#…

ASP.NET Core SignalR 身份认证集成指南(Identity + JWT)

文章目录 前言一、完整解决方案架构二、实现步骤1.配置 Identity 和 JWT 认证2. SignalR JWT配置3.SignalR Hub 集成认证和授权4.控制器5.客户端集成 (JavaScript)6.配置 appsettings.json 三、认证流程详解1.用户登录:2.SignalR 连接:3.JWT 验证&#x…

Redis最佳实践——性能优化技巧之数据结构选择

Redis在电商应用中的数据结构选择与性能优化技巧 一、电商核心场景与数据结构选型矩阵 应用场景推荐数据结构内存占用读写复杂度典型操作商品详情缓存Hash低O(1)HGETALL, HMSET购物车管理Hash中O(1)HINCRBY, HDEL用户会话管理Hash低O(1)HSETEX, HGET商品分类目录Sorted Set高O…

【Tauri2】049——upload

前言 这篇就看看一个简单地插件——upload Upload | Taurihttps://tauri.app/plugin/upload/upload的英文意思是“上传(程序或信息)”。 看来是用来上传文件的。 支持移动端 正文 安装 pnpm tauri add upload 在前后端都会安装,即 .plug…

《深度解构现代云原生微服务架构的七大支柱》

☁️《深度解构现代云原生微服务架构的七大支柱》 一线架构师实战总结,系统性拆解现代微服务架构中最核心的 7 大支柱模块,涵盖通信协议、容器编排、服务网格、弹性伸缩、安全治理、可观测性、CI/CD 等。文内附架构图、实操路径与真实案例,适…

ADAS概述

一、ADAS的概念 1.1 ADAS功能概述、架构方案、控制器、传感器 核心概念:ADAS(Advanced Driving Assistance System)是高级驾驶辅助系统的总称,包含三大类功能: 舒适体验类:如自适应巡航(ACC)、高速公路辅助(HWA)、车道居中控制&…

深入探讨redis:万字讲解集群

什么是集群 广义的集群:多个机器,构成了分布式系统,就可以称为“集群”。 狭义的集群:redis提供的集群模式,这个集群模式之下,主要解决的是存储空间不足的问题(拓展存储空间) 随着数据量的增多一台机器的…

一键开关机电路分析

左边电源9V为输入电源,中间有一个LDO,输出5V给右侧的芯片供电。 Q1是PNP三极管,Q2和Q3是NPN三极管。 初始状态下,按键断开,Q3截止,故Q1的基极为高电平,电压为9V,be间没有电流流过&am…

输入ifconfig,发现ens33不见了,无法连接至虚拟机

输入ifconfig,发现ens33不见了,无法连接至虚拟机 输入ifconfig,发现ens33不见了,无法连接至虚拟机 输入ifconfig,发现ens33不见了,无法连接至虚拟机 当输入ifconfig,发现少了ens33,无…

c++学习值---模版

目录 一、函数模板: 1、基本定义格式: 2、模版函数的优先匹配原则: 二、类模板: 1、基本定义格式: 2、类模版的优先匹配原则(有坑哦): 3、缺省值的设置: 4、ty…

day62—DFS—太平洋大西洋水流问题(LeetCode-417)

题目描述 有一个 m n 的矩形岛屿,与 太平洋 和 大西洋 相邻。 “太平洋” 处于大陆的左边界和上边界,而 “大西洋” 处于大陆的右边界和下边界。 这个岛被分割成一个由若干方形单元格组成的网格。给定一个 m x n 的整数矩阵 heights , hei…

LeetCode第240题_搜索二维矩阵II

LeetCode 第240题:搜索二维矩阵 II 题目描述 编写一个高效的算法来搜索 m n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性: 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 难度 中等 题目链接 点击在LeetCode中查看题目…

开始通信之旅-----话题通信

1. 话题通信的流程 话题通信主要涉及到三个对象 管理者发布者订阅者 其主要流程如下图 详细解释一下:1.发布者向管理者发送发布话题等相关信息,在管理者处注册 2.订阅者向管理者发布订阅话题等相关信息,在管理者处注册 (注意…