羲和小医生0.1

创建一个名为“羲和小医生”的医学类问答机器人,我们使用Python和一些常用的库来实现。这个项目将包括以下几个部分:
数据处理:准备和处理训练数据。
模型训练:使用bert-base-chinese模型进行微调。
GUI开发:使用tkinter库创建图形用户界面。
项目结构

羲和小医生/
│
├── 羲和小医生.py
├── README.md
└── data/└── train_data.json

README.md

# 羲和小医生这是一个基于BERT的医学类问答机器人,旨在帮助用户获取医学相关问题的解答。本项目使用`bert-base-chinese`模型进行微调,并通过`tkinter`库创建了一个简单的图形用户界面(GUI)。## 目录结构- `羲和小医生.py`: 主程序文件,包含数据处理、模型训练和GUI开发。
- `README.md`: 项目说明文档。
- `data/`: 存放训练数据的目录。- `train_data.json`: 训练数据集。## 运行环境- Python 3.7+
- PyTorch 1.7+
- Transformers 4.0+
- Tkinter## 安装依赖
pip install torch transformers
使用方法
将训练数据集放入data/train_data.json。
运行羲和小医生.py。
python 羲和小医生.py
训练数据格式
训练数据集应为JSON格式,示例如下:
[{"instruction": "大肠癌能治愈吗?有什么好的治疗方法?","input": "无","output": "根据你的描述属于恶性肿瘤有关,需要增加营养补充维生素微量元素,易消化易吸收饮食,保持心情舒畅注意休息,需要综合治疗放化疗中药调理生物靶向治疗。","history": null},{"instruction": "外阴脂肪瘤怎样治疗","input": "患者 女50岁,外阴一侧有一个3*5厘米瘤子,约六七年了,以前小,不疼不痒,请问怎样治疗、","output": "你说的症状建议去外科就诊,应该通过手术切除治疗配合抗消炎的药物治疗,平时饮食以清淡为主忌辛辣刺激食物,注意卫生。","history": null}
]
作者
作者:yehaiwz
邮箱:554687453@qq.com

羲和小医生.py

import json
import torch
from transformers import BertTokenizer, BertForSequenceClassification, Trainer, TrainingArguments
import tkinter as tk
from tkinter import messagebox# 加载数据
def load_data(file_path):with open(file_path, 'r', encoding='utf-8') as f:data = json.load(f)return data# 数据预处理
def preprocess_data(data, tokenizer, max_length=128):inputs = []labels = []for item in data:instruction = item['instruction']input_text = item['input']output = item['output']text = f"{instruction} {input_text}"inputs.append(text)labels.append(output)encodings = tokenizer(inputs, truncation=True, padding=True, max_length=max_length, return_tensors='pt')return encodings, labels# 自定义数据集
class MedicalDataset(torch.utils.data.Dataset):def __init__(self, encodings, labels):self.encodings = encodingsself.labels = labelsdef __getitem__(self, idx):item = {key: val[idx] for key, val in self.encodings.items()}item['labels'] = self.labels[idx]return itemdef __len__(self):return len(self.labels)# 模型训练
def train_model(data, model, tokenizer, output_dir):encodings, labels = preprocess_data(data, tokenizer)dataset = MedicalDataset(encodings, labels)training_args = TrainingArguments(output_dir=output_dir,num_train_epochs=3,per_device_train_batch_size=8,warmup_steps=500,weight_decay=0.01,logging_dir='./logs',logging_steps=10,)trainer = Trainer(model=model,args=training_args,train_dataset=dataset,)trainer.train()# 模型推理
def predict(model, tokenizer, instruction, input_text):text = f"{instruction} {input_text}"inputs = tokenizer(text, return_tensors='pt')outputs = model(**inputs)logits = outputs.logitspredicted_label = torch.argmax(logits, dim=-1).item()return predicted_label# GUI
def create_gui(model, tokenizer):def on_query():instruction = entry_instruction.get()input_text = entry_input.get() if var_input.get() == 1 else "无"output = predict(model, tokenizer, instruction, input_text)entry_output.delete(0, tk.END)entry_output.insert(0, output)root = tk.Tk()root.title("羲和小医生")# 问题输入框label_instruction = tk.Label(root, text="问题:")label_instruction.grid(row=0, column=0, padx=10, pady=10)entry_instruction = tk.Entry(root, width=50)entry_instruction.grid(row=0, column=1, padx=10, pady=10)# 补充输入框var_input = tk.IntVar()check_input = tk.Checkbutton(root, text="有补充", variable=var_input)check_input.grid(row=1, column=0, padx=10, pady=10)entry_input = tk.Entry(root, width=50)entry_input.grid(row=1, column=1, padx=10, pady=10)# 查询按钮button_query = tk.Button(root, text="查询", command=on_query)button_query.grid(row=2, column=0, columnspan=2, pady=10)# 输出框label_output = tk.Label(root, text="羲和回答:")label_output.grid(row=3, column=0, padx=10, pady=10)entry_output = tk.Entry(root, width=50)entry_output.grid(row=3, column=1, padx=10, pady=10)root.mainloop()# 主函数
def main():data_path = 'data/train_data.json'output_dir = 'output'data = load_data(data_path)tokenizer = BertTokenizer.from_pretrained('bert-base-chinese')model = BertForSequenceClassification.from_pretrained('bert-base-chinese', num_labels=1)train_model(data, model, tokenizer, output_dir)create_gui(model, tokenizer)if __name__ == "__main__":main()

说明
数据加载和预处理:load_data函数读取JSON文件中的数据,preprocess_data函数对数据进行预处理,将其转换为模型可以接受的格式。
自定义数据集:MedicalDataset类用于封装预处理后的数据。
模型训练:train_model函数使用Trainer类进行模型训练。
模型推理:predict函数用于根据输入的问题和补充信息生成回答。
GUI开发:create_gui函数使用tkinter库创建图形用户界面,包括输入框、按钮和输出框。
运行羲和小医生.py文件后,将弹出一个窗口,用户可以在窗口中输入问题和补充信息,点击“查询”按钮后,程序将显示模型生成的回答。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/61171.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

esp32c3开发板通过micropython的mqtt库连MQTT物联网消息服务器

MQTT介绍 MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息协议,旨在设备之间进行通信,尤其是在网络条件较差的情况下。MQTT v3.1.1 和 MQTT v5 是该协议的两个主要版本。 MQTT v3.1.1: 优点&#xff…

Nginx配置端口重定向及协议重定向

需求来源 我在搭建博客初期是将博客部署在了家里的软路由上,由于家庭宽带的80以及443端口被宽带服务商屏蔽了,所以最开始是通过8443端口对外提供服务,地址为:https://blog.chengpei.top:8443,后来上了阿里云并且经过备…

stm32启动过程解析startup启动文件

1.STM32的启动过程模式 1.1 根据boot引脚决定三种启动模式 复位后,在 SYSCLK 的第四个上升沿锁存 BOOT 引脚的值。BOOT0 为专用引脚,而 BOOT1 则与 GPIO 引脚共用。一旦完成对 BOOT1 的采样,相应 GPIO 引脚即进入空闲状态,可用于…

SQL字段来源表的解析

测试例子: SELECT e.NAME, d.DEPT_NAME,d.DEPT_ID,EMP_ID,100EMP_ID100 FROM EMP e JOIN DEPT d ON e.DEPT_ID d.DEPT_ID WHERE e.EMP_ID IN (SELECT EMP_ID FROM EMP WHERE DEPT_ID 10) 代码示例: package com.test; import org.apache.calcite.jd…

【第三课】Rust变量与数据类型(二)

目录 前言 Vector HashMap 其他 前言 上一课介绍了rust的变量和常见的数据类型,走马观花的看了一下rust常见的变量和数据类型,这些都是rust的基本语法,整理出来只是起一个引子的效果,基本语法多练习才可以熟练。这一课继续介绍…

操作iframe dom元素;监听子节点的变化

1、 不能跨域,如果跨域请配置代理或nginx,必须同源 /restcloud: {target: http://10.1.17.210:8080,changeOrigin: true,pathRewrite: {^/restcloud: /restcloud, // 这里可以省略,因为路径是一样的}} 或者 server {listen 8090;server_name l…

【AI日记】24.11.17 看 GraphRAG 论文,了解月之暗面

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】 核心工作 内容:看 GraphRAG 论文时间:4 小时评估:不错,继续 非核心工作 内容:了解国内大模型方向,重点了解了创业独角兽-月之暗面&…

数据结构查找-哈希表(开发地址法+线性探测法)+(创建+查找+删除代码)+(C语言代码)

#include<stdlib.h> #include<stdio.h> #include<stdbool.h> #define NULLKEY -1//单元为空 #define DELKEY -2//单元内容被删除 #define M 20 typedef struct {int key;//关键字int count;//统计哈希冲突探测次数 }HashTable; //插入到哈希表 void InsertHT…

vue el-date-picker 日期选择器禁用失效问题

当value-format"yyyy-MM-dd"的格式不要改为"yyyyMMdd"&#xff0c;否则会导致日期选择器禁用失效问题&#xff0c;因为该组件默认的格式就是yyyy-MM-dd。 <el-col v-for"(item, index) in formData" :key"index" ><el-date-…

〔 MySQL 〕数据类型

目录 1.数据类型分类 2 数值类型 2.1 tinyint类型 2.2 bit类型 2.3 小数类型 2.3.1 float 2.3.2 decimal 3 字符串类型 3.1 char 3.2 varchar 3.3 char和varchar比较 4 日期和时间类型 5 enum和set mysql表中建立属性列&#xff1a; 列名称&#xff0c;类型在后 n…

数据库审计工具--Yearning 3.1.9普民的使用指南

1 页面登录 登录地址:18000 &#xff08;不要勾选LDAP&#xff09; 2 修改用户密码 3 DML/DDL工单申请及审批 工单申请 根据需要选择【DML/DDL/查询】中的一种进行工单申请 填写工单信息提交SQL检测报错修改sql语句重新进行SQL检测&#xff0c;如检测失败可以进行SQL美化后…

Flutter网络通信-封装Dio

前言 dio 是一个强大的 Dart HTTP 请求库&#xff0c;支持全局配置、Restful API、FormData、拦截器、 请求取消、Cookie 管理、文件上传/下载、超时以及自定义适配器等。 Dio的pub地址为&#xff1a;dio | Dart package 封装要求 能够使用get、post、put、patch、delete、…

tcp 超时计时器

在 TCP&#xff08;传输控制协议&#xff09;中有以下四种重要的计时器&#xff1a; 重传计时器&#xff08;Retransmission Timer&#xff09; 作用&#xff1a;用于处理数据包丢失的情况。当发送方发送一个数据段后&#xff0c;就会启动重传计时器。如果在计时器超时之前没有…

[前端面试]HTML AND CSS

HTML html语义化标签的理解 是什么: 在布局页面的时候&#xff0c;根据内容的结构与含义&#xff0c;选择合适的带语义的html标签 如header&#xff0c;footer&#xff0c;nav&#xff0c;article&#xff0c;main&#xff0c;aside&#xff0c;h标签等 好处&#xff1a; 增…

前端(4)——demo分享

这两天需要用HTML、CSS和js简单组合一个html网页用于展示一些数据内容&#xff0c;这是我简单组合别人的一些文件形成的简单demo&#xff0c;大家也可以拿过去使用。 登录界面&#xff1a; 场景选择界面&#xff0c;有五个场景&#xff0c;每个场景中都需要展示一些特定的数据…

【企业级分布式系统】 Kafka集群

文章目录 KafkaKafka 概述使用消息队列的好处 Kafka 的特性Kafka 系统架构Kafka 的应用场景Kafka 的优缺点 Kafka 集群部署下载安装包安装 KafkaKafka 命令行操作Kafka 架构深入 FilebeatKafkaELK 部署指南~部署 ZookeeperKafka 集群部署 Filebeat部署 ELK&#xff08;Logstash…

高级java每日一道面试题-2024年11月07日-Redis篇-Redis有哪些功能?

如果有遗漏,评论区告诉我进行补充 面试官: Redis有哪些功能? 我回答: Redis 是一个开源的、基于键值对的 NoSQL 数据库&#xff0c;以其高性能、丰富的数据结构和多种功能而闻名。在高级 Java 面试中&#xff0c;了解 Redis 的核心功能和高级特性是非常重要的。以下是 Redi…

14天Java基础学习——第9天:异常处理机制

第9天 Java基础学习&#xff1a;异常处理机制 学习目标 在本日的学习中&#xff0c;我们将深入研究Java中的异常处理机制&#xff0c;包括以下几个方面&#xff1a; 异常与错误分类try-catch-finally语句throw与throws关键字自定义异常 一、异常与错误分类 Java中的异常主…

Java-空链处理

什么是 null 在 Java 中&#xff0c;null 是一个非常常见的关键字&#xff0c;用于表示“没有值”或“空”。然而&#xff0c;对于初学者来说&#xff0c;null 的本质可能会感到有些困惑。在本文中&#xff0c;我们将详细探讨 null 在 Java 中的含义和使用。 在 Java 中&…