羲和小医生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 = encodings
        self.labels = labels

    def __getitem__(self, idx):
        item = {key: val[idx] for key, val in self.encodings.items()}
        item['labels'] = self.labels[idx]
        return item

    def __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.logits
    predicted_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文件后,将弹出一个窗口,用户可以在窗口中输入问题和补充信息,点击“查询”按钮后,程序将显示模型生成的回答。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CentOS网络配置

上一篇文章:VMware Workstation安装Centos系统 在CentOS系统中进行网络配置是确保系统能够顺畅接入网络的重要步骤。本文将详细介绍如何配置静态IP地址、网关、DNS等关键网络参数,以帮助需要的人快速掌握CentOS网络配置的基本方法和技巧。通过遵循本文的…

低速接口项目之串口Uart开发(一)——串口UART

本节目录 一、串口UART 二、串口协议 三、串口硬件 四、往期文章链接本节内容 一、串口UART 串口UART,通用异步收发传输器(Universal Asynchronnous Receiver / Transmitter),一种异步收发传输器,全双工传输。数据发送时,将并行…

Uni-APP+Vue3+鸿蒙 开发菜鸟流程

参考文档 文档中心 运行和发行 | uni-app官网 AppGallery Connect DCloud开发者中心 环境要求 Vue3jdk 17 Java Downloads | Oracle 中国 【鸿蒙开发工具内置jdk17,本地不使用17会报jdk版本不一致问题】 开发工具 HBuilderDevEco Studio【目前只下载这一个就…

SQL 外连接

1 外连接 外连接是一种用于结合两个或多个表的方式,返回至少一个表中的所有记录。 左外连接 LEFT JOIN,左表为驱动表,右表为从表。返回驱动表的所有记录以及从表中的匹配记录。如果从表没有匹配,则结果中从表的部分为NULL。 右…

笔记|M芯片MAC (arm64) docker上使用 export / import / commit 构建amd64镜像

很简单的起因,我的东西最终需要跑在amd64上,但是因为mac的架构师arm64,所以直接构建好的代码是没办法跨平台运行的。直接在arm64上pull下来的docker镜像也都是arm64架构。 检查镜像架构: docker inspect 8135f475e221 | grep Arc…

SAP+Internet主题HTML样式选择

SAP目前只支持三种HTML样式选择: 样式一 背景色:深色,蓝 特点:适中型排列,与SAP界面排列相同,富含UI特征,整齐美观 URL地址:http://cn1000-sap-01.sc.com:8000/sap/bc/gui/sap/it…

使用 Qt 实现基于海康相机的图像采集和显示系统(不使用外部视觉库,如Halcon\OpenCv)[工程源码联系博主索要]

本文将梳理一个不借助外部视觉库(如 OpenCV/Halcon)的海康相机图像采集和显示 Demo。该程序直接使用 Qt GUI 来显示图像。通过海康 MVS SDK 实现相机的连接、参数设置、图像采集和异常处理等功能,并通过 Qt 界面展示操作结果。 1. 功能概述 …

C# 异步Task异常处理和堆栈追踪显示

Task的问题 在C#中异步Task是一个很方便的语法,经常用在处理异步,例如需要下载等待等方法中,不用函数跳转,代码阅读性大大提高,深受大家喜欢。 但是有时候发现我们的异步函数可能出现了报错,但是异常又没…

31.3 XOR压缩和相关的prometheus源码解读

本节重点介绍 : xor 压缩value原理xor压缩过程讲解xor压缩prometheus源码解读xor 压缩效果 xor 压缩value原理 原理:时序数据库相邻点变化不大,采用异或压缩float64的前缀和后缀0个数 xor压缩过程讲解 第一个值使用原始点存储计算和前面的值的xor 如果XOR值为0&…

游戏引擎学习第16天

视频参考:https://www.bilibili.com/video/BV1mEUCY8EiC/ 这些字幕讨论了编译器警告的概念以及如何在编译过程中启用和处理警告。以下是字幕的内容摘要: 警告的定义:警告是编译器用来告诉你某些地方可能存在问题,尽管编译器不强制要求你修复…

解析煤矿一张图

解析煤矿一张图 ​ 煤矿一张图是指通过数字化、智能化技术将煤矿的各项信息、数据和资源进行集中展示和管理,形成一个综合的可视化平台。这一平台将矿井的地理信息、设备状态、人员位置、安全生产、环境监测等信息整合成一个统一的“图形”,以便于管理者…

Python学习27天

字典 dict{one:1,two:2,three:3} # 遍历1: # 先取出Key for key in dict:# 取出Key对应的valueprint(f"key:{key}---value:{dict[key]}")#遍历2,依次取出value for value in dict.values():print(value)# 遍历3:依次取出key,value …

【伪造检测】Noise Based Deepfake Detection via Multi-Head Relative-Interaction

一、研究动机 [!note] 动机:目前基于噪声的检测是利用Photo Response Non-Uniformity (PRNU)实现的,这是一种由于相机感光传感器而造成的缺陷噪声,主要用图像的源识别,在伪造检测的任务中并没有很好的表现。因此在文中提出了一种基…

【eNSP】企业网络架构实验——vlan间的路由通信(三)

VLAN间的路由是指不同VLAN之间的通信,通常VLAN是用来分割网络流量和提高网络安全性的。 一、VLAN 1. 什么是VLAN? VLAN,全称是虚拟局域网(Virtual Local Area Network),是一种将物理局域网(LA…

github 模型下载方法

github 模型权重,如果是项目下载,pth文件有时下载后只有1kb 本人测试ok下载方法: 点击view raw,然后可以下载模型权重文件了。

【微软:多模态基础模型】(2)视觉理解

欢迎关注【youcans的AGI学习笔记】原创作品 【微软:多模态基础模型】(1)从专家到通用助手 【微软:多模态基础模型】(2)视觉理解 【微软:多模态基础模型】(3)视觉生成 【微…

Dolby TrueHD和Dolby Digital Plus (E-AC-3)编码介绍

文章目录 1. Dolby TrueHD特点总结 2. Dolby Digital Plus (E-AC-3)特点总结 Dolby TrueHD 与 Dolby Digital Plus (E-AC-3) 的对比 Dolby TrueHD和Dolby Digital Plus (E-AC-3) 是两种高级的杜比音频编码格式,常用于蓝光影碟、流媒体、影院等高品质音频传输场景。它…

基于SpringBoot的养老院管理系统+文档

💗博主介绍💗:✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示:文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

Figma汉化:提升设计效率,降低沟通成本

在UI设计领域,Figma因其强大的功能而广受欢迎,但全英文界面对于国内设计师来说是一个不小的挑战。幸运的是,通过Figma汉化插件,我们可以克服语言障碍。以下是两种获取和安装Figma汉化插件的方法,旨在帮助国内的UI设计师…

JavaWeb之AJAX

前言 这一节讲JavaWeb之AJAX 1.概述 以前我们在servlet中得到数据,必须通过域给jsp,然后jsp在响应给浏览器 纯html不能获取servlet返回数据 所以我们用jsp 但是现在我们可以同AJAX给返回数据了 我们可以在sevlet中直接通过AJAX返回给浏览器 html中的J…