Berdasarkan enam karakteristik kesehatan aktif: inisiatif, pencegahan, akurasi, personalisasi, konstruksi bersama dan berbagi, dan disiplin diri, Sekolah Teknologi Masa Depan Universitas Teknologi China Selatan-Laboratorium Kunci Kembar Digital Provinsi Guangdong memiliki sumber terbuka sistem kesehatan aktif ruang hidup di bidang Cina. Basis model ProactiveHealthGPT, termasuk:
Kami berharap model besar kesehatan aktif ruang hidup berbasis ProactiveHealthGPT dapat membantu civitas akademika mempercepat penelitian dan penerapan model besar di bidang kesehatan aktif seperti penyakit kronis dan konseling psikologis. Proyek ini adalah BianQue, model besar kesehatan ruang hidup .
Melalui penelitian, kami menemukan bahwa di bidang kesehatan, pengguna biasanya tidak menjelaskan masalah mereka dengan jelas dalam putaran interaksi, dan saat ini model tanya jawab medis open source yang umum (seperti: ChatDoctor, HuaTuo (sebelumnya dikenal sebagai HuaTuo), DoctorGLM , MedicalGPT -zh) berfokus pada penyelesaian masalah satu putaran deskripsi pengguna, sambil mengabaikan situasi di mana "deskripsi pengguna mungkin tidak mencukupi". Bahkan ChatGPT yang populer saat ini pun akan mengalami masalah serupa: jika pengguna tidak memaksa ChatGPT untuk mengadopsi format tanya jawab melalui deskripsi teks, ChatGPT juga akan lebih memilih deskripsi pengguna dan dengan cepat memberikan saran dan solusi yang dianggap tepat. Namun, percakapan sebenarnya antara dokter dan pengguna sering kali melibatkan "dokter yang melakukan beberapa putaran pertanyaan berdasarkan deskripsi pengguna saat ini". Dan dokter akhirnya memberikan saran yang komprehensif berdasarkan informasi yang diberikan oleh pengguna, seperti terlihat pada gambar di bawah ini. Kami mendefinisikan proses pertanyaan terus menerus dari dokter sebagai rantai pertanyaan (CoQ, Chain of Questioning) . Ketika model berada dalam tahap rantai pertanyaan, pertanyaan selanjutnya biasanya ditentukan oleh riwayat konteks percakapan.
Kami menggabungkan kumpulan data tanya jawab medis Tiongkok open source saat ini (MedDialog-CN, IMCS-V2, CHIP-MDCFNPC, MedDG, cMedQA2, data dialog medis Tiongkok) untuk menganalisis karakteristik putaran tunggal/multi dan karakteristik penyelidikan dokter., dikombinasikan dengan data besar percakapan kesehatan ruang hidup jangka panjang yang dibangun sendiri di laboratorium, BianQueCorpus, data besar kesehatan Bianque dengan skala puluhan juta, dibangun. Data percakapan tersebut disatukan ke dalam format instruksi berupa "Pasien: xxxnDokter: xxxnPasien: xxxnDokter:", seperti terlihat pada gambar di bawah ini.
input: "病人:六岁宝宝拉大便都是一个礼拜或者10天才一次正常吗,要去医院检查什么项目n医生:您好n病人:六岁宝宝拉大便都是一个礼拜或者10天才一次正常吗,要去医院检查什么项目n医生:宝宝之前大便什么样呢?多久一次呢n病人:一般都是一个礼拜,最近这几个月都是10多天n医生:大便干吗?n病人:每次10多天拉的很多n医生:"
target: "成形还是不成形呢?孩子吃饭怎么样呢?"
Data pelatihan berisi sejumlah besar teks target yang merupakan konten pertanyaan dokter, bukan saran langsung, yang akan membantu meningkatkan kemampuan penyelidikan model AI.
cd ~
git clone https://github.com/scutcyr/BianQue.git
cd BianQue
conda env create -n proactivehealthgpt_py38 --file proactivehealthgpt_py38.yml
conda activate proactivehealthgpt_py38
pip install cpm_kernels
pip install torch==1.13.1+cu116 torchvision==0.14.1+cu116 torchaudio==0.13.1 --extra-index-url https://download.pytorch.org/whl/cu116
cd BianQue
conda create -n proactivehealthgpt_py38 python=3.8
conda activate proactivehealthgpt_py38
pip install torch==1.13.1+cu116 torchvision==0.14.1+cu116 torchaudio==0.13.1 --extra-index-url https://download.pytorch.org/whl/cu116
pip install -r requirements.txt
pip install rouge_chinese nltk jieba datasets
# 以下安装为了运行demo
pip install streamlit
pip install streamlit_chat
[Suplemen] Mengonfigurasi CUDA-11.6 di Windows: Unduh dan instal CUDA-11.6, unduh cudnn-8.4.0, unzip dan salin file ke jalur yang sesuai dengan CUDA-11.6, lihat: Menggunakan conda untuk menginstal pytorch di bawah win11-cuda11 .6-Ide instalasi umum
Panggil model BianQue-2.0 dengan Python:
import torch
from transformers import AutoModel , AutoTokenizer
# GPU设置
device = torch . device ( "cuda" if torch . cuda . is_available () else "cpu" )
# 加载模型与tokenizer
model_name_or_path = 'scutcyr/BianQue-2'
model = AutoModel . from_pretrained ( model_name_or_path , trust_remote_code = True ). half ()
model . to ( device )
tokenizer = AutoTokenizer . from_pretrained ( model_name_or_path , trust_remote_code = True )
# 单轮对话调用模型的chat函数
user_input = "我的宝宝发烧了,怎么办?"
input_text = "病人:" + user_input + " n医生:"
response , history = model . chat ( tokenizer , query = input_text , history = None , max_length = 2048 , num_beams = 1 , do_sample = True , top_p = 0.75 , temperature = 0.95 , logits_processor = None )
# 多轮对话调用模型的chat函数
# 注意:本项目使用"n病人:"和"n医生:"划分不同轮次的对话历史
# 注意:user_history比bot_history的长度多1
user_history = [ '你好' , '我最近失眠了' ]
bot_history = [ '我是利用人工智能技术,结合大数据训练得到的智能医疗问答模型扁鹊,你可以向我提问。' ]
# 拼接对话历史
context = " n " . join ([ f"病人: { user_history [ i ] } n医生: { bot_history [ i ] } " for i in range ( len ( bot_history ))])
input_text = context + " n病人:" + user_history [ - 1 ] + " n医生:"
response , history = model . chat ( tokenizer , query = input_text , history = None , max_length = 2048 , num_beams = 1 , do_sample = True , top_p = 0.75 , temperature = 0.95 , logits_processor = None )
Proyek ini menyediakan bianque_v2_app.py sebagai contoh penggunaan model BianQue-2.0. Anda dapat memulai layanan melalui perintah berikut, dan kemudian mengaksesnya melalui http://<your_ip>:9005.
streamlit run bianque_v2_app.py --server.port 9005
Khususnya, di bianque_v2_app.py, Anda dapat mengubah kode berikut untuk menggantikan kartu grafis yang ditentukan:
os . environ [ 'CUDA_VISIBLE_DEVICES' ] = '1'
Untuk pengguna kartu grafis tunggal Windows, Anda perlu memodifikasinya menjadi: os.environ['CUDA_VISIBLE_DEVICES'] = '0'
, jika tidak, kesalahan akan dilaporkan!
Anda dapat menentukan jalur model menjadi jalur lokal dengan mengubah kode berikut:
model_name_or_path = "scutcyr/BianQue-2"
Kami juga menyediakan bianque_v1_app.py sebagai contoh penggunaan model BianQue-1.0, dan bianque_v1_v2_app.py sebagai contoh penggunaan gabungan model BianQue-1.0 dan model BianQue-2.0.
Berdasarkan data besar BianQue Health BianQueCorpus, kami memilih ChatGLM-6B sebagai model inisialisasi, dan memperoleh generasi baru BianQue [BianQue-2.0] setelah instruksi menyempurnakan pelatihan semua parameter. Berbeda dari model Bianque-1.0, Bianque-2.0 telah memperluas data seperti instruksi obat, instruksi pengetahuan ensiklopedia medis, dan instruksi distilasi ChatGPT, sehingga memperkuat saran model dan kemampuan kueri pengetahuan. Di bawah ini adalah dua sampel uji.
Gunakan perintah berikut untuk bersama-sama menggunakan Bianque-2.0 dan Bianque-1.0 untuk membangun layanan kesehatan aktif:
streamlit run bianque_v1_v2_app.py --server.port 9005
Berikut contoh penerapannya: beberapa putaran pertama adalah proses penyelidikan melalui model Bianque-1.0, dan putaran terakhir tanggapan adalah jawaban melalui model Bianque-2.0.
BianQue-1.0 (BianQue-1.0) adalah model dialog medis berskala besar yang disempurnakan melalui instruksi dan beberapa putaran dialog penyelidikan. Setelah melakukan penelitian, kami menemukan bahwa dalam bidang medis, dokter sering kali harus melalui berbagai pertanyaan sebelum mengambil keputusan. Ini bukanlah model "jawaban-instruksi" yang sederhana. Saat pengguna berkonsultasi dengan dokter, seringkali mereka tidak memberi tahu dokter tentang situasi lengkap di awal, sehingga dokter perlu terus bertanya sebelum akhirnya dapat membuat diagnosis dan memberikan saran yang masuk akal. Berdasarkan hal ini, kami membangun BianQue-1.0 (BianQue-1.0) , yang bertujuan untuk memperkuat kemampuan interogasi sistem AI untuk mensimulasikan proses interogasi dokter. Kami mendefinisikan kemampuan ini sebagai bagian “bertanya” dari “melihat, mendengar, bertanya, dan memahami”. Dengan mempertimbangkan arsitektur model bahasa Mandarin saat ini, jumlah parameter, dan daya komputasi yang diperlukan, kami menggunakan ClueAI/ChatYuan-large-v2 sebagai model dasar, dan menyempurnakan 1 epoch pada 8 kartu grafis NVIDIA RTX 4090 untuk mendapatkan Bianque- 1.0 (BianQue-1.0) , kumpulan data campuran instruksi tanya jawab medis Tiongkok dan dialog penyelidikan multi-putaran yang digunakan untuk pelatihan berisi lebih dari 9 juta sampel, yang membutuhkan waktu sekitar 16 hari untuk menyelesaikan satu periode pelatihan. Kami berencana untuk melakukan beberapa versi penelitian berulang model berdasarkan kemampuan "melihat, mendengar, bertanya, dan merasakan" model Bian Que, dikombinasikan dengan pengetahuan ahli medis, teknologi multi-modal, dan perhitungan sinyal multi-fisiologis. Model BianQue menyambut kontribusi Anda! Kami mendorong Anda untuk melaporkan masalah, menyumbangkan PR, dan berpartisipasi dalam diskusi di halaman GitHub BianQue. Kami berharap dapat bekerja sama dengan lebih banyak universitas, rumah sakit, laboratorium penelitian, perusahaan, dll. untuk bersama-sama melakukan penelitian model Bianque generasi berikutnya. Untuk permintaan tersebut (dan permintaan lain yang tidak sesuai untuk dibuat di GitHub), silakan kirim email langsung ke [email protected].
Empat metode diagnostik yaitu "melihat, mencium, bertanya, dan merasakan" ditemukan oleh Bian Que. "Empat Metode Diagnosis" (inspeksi, penciuman, pertanyaan, dan palpasi) adalah metode dasar diagnosis dalam pengobatan tradisional Tiongkok. Diantaranya, kemampuan “bertanya” dapat dimodelkan ke dalam model bahasa. Kami mendefinisikan kemampuan “meminta” model AI sebagai:
Kemampuan "Bertanya" : Model AI dapat melakukan pertanyaan yang sesuai berdasarkan informasi yang dimasukkan oleh pasien dan dikombinasikan dengan pengetahuan medis, dan memberikan "diagnosis atau saran yang tepat" berdasarkan informasi pasien yang diperoleh dari pertanyaan lebih lanjut. Proses “bertanya” biasanya merupakan proses dialog multi-babak.
Berikut adalah 2 contoh sederhana:
Contoh 1
Pengguna: Saya merasa sangat lelah akhir-akhir ini. Bian Que-1.0: Apakah karena kelelahan atau begadang?
Pengguna: Saya begadang minggu ini untuk menyelesaikan makalah saya. Bian Que-1.0: Ya, begadang dapat dengan mudah menyebabkan berbagai ketidaknyamanan, seperti pusing, kelelahan, susah tidur, melamun, dll. Perbanyak istirahat bisa minum oryzanol, vitamin B1 dan Anshen Bu Nao Liquid agar tidak begadang.
Contoh 2
Pengguna: Saya sering menderita insomnia akhir-akhir ini. Bianque-1.0: Sudah berapa lama Anda menderita insomnia?
Pengguna: Sudah dua minggu Bianque-1.0: Bagaimana tidurmu?
Pengguna: Berapa jam yang Anda butuhkan untuk tidur sebelum Anda bisa tidur? Bian Que-1.0: Anda dapat meminum beberapa obat secara oral. Pengguna: Apakah Anda memiliki rekomendasi khusus? Bian Que-1.0: Saya perlu memeriksanya terlebih dahulu : Tes apa yang saya perlukan?
Bian Que-1.0: Elektrokardiogram
import os
from transformers import T5Tokenizer , T5ForConditionalGeneration , AutoTokenizer
import torch
device = torch . device ( "cuda" if torch . cuda . is_available () else "cpu" )
tokenizer = T5Tokenizer . from_pretrained ( "scutcyr/BianQue-1.0" )
model = T5ForConditionalGeneration . from_pretrained ( "scutcyr/BianQue-1.0" )
model = model . to ( device )
def preprocess ( text ):
text = text . replace ( " n " , " \ n" ). replace ( " t " , " \ t" )
return text
def postprocess ( text ):
return text . replace ( " \ n" , " n " ). replace ( " \ t" , " t " )
def answer ( user_history , bot_history , sample = True , top_p = 1 , temperature = 0.7 ):
'''sample:是否抽样。生成任务,可以设置为True;
top_p:0-1之间,生成的内容越多样
max_new_tokens=512 lost...'''
if len ( bot_history ) > 0 :
context = " n " . join ([ f"病人: { user_history [ i ] } n医生: { bot_history [ i ] } " for i in range ( len ( bot_history ))])
input_text = context + " n病人:" + user_history [ - 1 ] + " n医生:"
else :
input_text = "病人:" + user_history [ - 1 ] + " n医生:"
return "我是利用人工智能技术,结合大数据训练得到的智能医疗问答模型扁鹊,你可以向我提问。"
input_text = preprocess ( input_text )
print ( input_text )
encoding = tokenizer ( text = input_text , truncation = True , padding = True , max_length = 768 , return_tensors = "pt" ). to ( device )
if not sample :
out = model . generate ( ** encoding , return_dict_in_generate = True , output_scores = False , max_new_tokens = 512 , num_beams = 1 , length_penalty = 0.6 )
else :
out = model . generate ( ** encoding , return_dict_in_generate = True , output_scores = False , max_new_tokens = 512 , do_sample = True , top_p = top_p , temperature = temperature , no_repeat_ngram_size = 3 )
out_text = tokenizer . batch_decode ( out [ "sequences" ], skip_special_tokens = True )
print ( '医生: ' + postprocess ( out_text [ 0 ]))
return postprocess ( out_text [ 0 ])
answer_text = answer ( user_history = [ "你好!" ,
"我最近经常失眠" ,
"两周了" ,
"上床几小时才睡得着" ],
bot_history = [ "我是利用人工智能技术,结合大数据训练得到的智能医疗问答模型扁鹊,你可以向我提问。" ,
"失眠多久了?" ,
"睡眠怎么样?" ])
conda env create -n bianque_py38 --file py38_conda_env.yml
conda activate bianque_py38
pip install torch==1.13.1+cu116 torchvision==0.14.1+cu116 torchaudio==0.13.1 --extra-index-url https://download.pytorch.org/whl/cu116
cd scripts
bash run_train_model_bianque.sh
BianQue-1.0 (BianQue-1.0) hanya dilatih selama 1 epoch. Meskipun model ini memiliki kemampuan penyelidikan medis tertentu, model ini masih memiliki keterbatasan berikut:
**BianQue-2.0(BianQue-2.0)** menggunakan bobot model ChatGLM-6B dan harus mengikuti MODEL_LICENSE-nya. Oleh karena itu, proyek ini hanya dapat digunakan untuk tujuan penelitian non-komersial Anda .
Proyek ini diprakarsai oleh Laboratorium Kunci Kembar Digital Provinsi Guangdong, Sekolah Teknologi Masa Depan, Universitas Teknologi Tiongkok Selatan. Proyek ini didukung oleh Pusat Penelitian Rekayasa Jaringan Informasi, Sekolah Elektronika dan Informasi, serta departemen lain di Universitas Teknologi Tiongkok Selatan Kami juga berterima kasih kepada Rumah Sakit Kesehatan Ibu dan Anak Guangdong, Pusat Medis Wanita dan Anak Pemerintah Kota Guangzhou, Rumah Sakit Afiliasi Ketiga Universitas Sun Yat-sen, Institut Penelitian Kecerdasan Buatan Pusat Sains Nasional Hefei, dan unit kerja sama lainnya.
Pada saat yang sama, kami ingin mengucapkan terima kasih kepada media atau akun publik berikut yang telah melaporkan proyek ini (tanpa urutan tertentu):
Liputan media People's Daily, China.com, Guangming.com, TOM Technology, Future.com, Dazhong.com, China Development Report Network, China Daily Network, Xinhua News Network, China.com, Toutiao, Sohu, Tencent News, NetEase News , Jaringan Informasi Tiongkok, Jaringan Komunikasi Tiongkok, Jaringan Laporan Kota Tiongkok, Jaringan Kota Tiongkok
Akun Publik Konstruksi Laboratorium Guangdong, Suara Cerdas Pemuda Baru, Pembelajaran Mendalam dan NLP, AINLP
@misc { chen2023bianque ,
title = { BianQue: Balancing the Questioning and Suggestion Ability of Health LLMs with Multi-turn Health Conversations Polished by ChatGPT } ,
author = { Yirong Chen and Zhenyu Wang and Xiaofen Xing and huimin zheng and Zhipei Xu and Kai Fang and Junhong Wang and Sihang Li and Jieling Wu and Qi Liu and Xiangmin Xu } ,
year = { 2023 } ,
eprint = { 2310.15896 } ,
archivePrefix = { arXiv } ,
primaryClass = { cs.CL }
}