🚀 DISC-MedLLM
DISC-MedLLMは、会話型の医療シナリオ向けに設計された医療分野特化の大規模言語モデルです。高品質な医療支援サービスを提供します。
🚀 クイックスタート
このリポジトリには、Baichuan-13b-baseをベースモデルとするDISC-MedLLMが含まれています。
プロジェクトが開発中であるため、このリポジトリ内のモデルウェイトは、現在デプロイされているデモのものと異なる場合があります。
詳細情報はDISC-MedLLMを確認してください。
デモ | 技術レポート
これは、Fudan-DISCラボによって会話型の医療シナリオ向けに設計された医療分野特化の大規模言語モデルであるDISC-MedLLMのリポジトリです。
以下のリソースが公開されています。
- DISC-Med-SFTデータセット(行動嗜好データセットを含まない)
- DISC-MedLLMのモデルウェイト
このリンクをクリックして、オンラインデモを試すことができます。
✨ 主な機能
DISC-MedLLMは、会話型の医療シナリオ向けに設計された大規模な分野特化モデルです。医療相談や治療問い合わせなど、さまざまなニーズに対応し、高品質な健康支援サービスを提供します。
実験結果から、DISC-MedLLMは一般的な言語モデルと実世界の医療相談のギャップを効果的に埋めることができます。
実世界の医師と患者の対話や知識グラフに基づいて、LLMと人間をループ内に統合するフレームワークと、目標指向の戦略により、DISC-MedLLMにはいくつかの特徴があります。
- 知識集約的で信頼性が高い
- 多ターンの問い合わせに対応
- 人間の嗜好とのアライメント
📦 インストール
現在のDISC-MedLLMのバージョンは、Baichuan-13B-Baseから派生しています。HuggingFaceのリポジトリから直接モデルウェイトをダウンロードするか、デモコードを通じて自動的に取得することができます。
Hugging Face Transformersを使用する場合
>>> import torch
>>> from transformers import AutoModelForCausalLM, AutoTokenizer
>>> from transformers.generation.utils import GenerationConfig
>>> tokenizer = AutoTokenizer.from_pretrained("Flmc/DISC-MedLLM", use_fast=False, trust_remote_code=True)
>>> model = AutoModelForCausalLM.from_pretrained("Flmc/DISC-MedLLM", device_map="auto", torch_dtype=torch.float16, trust_remote_code=True)
>>> model.generation_config = GenerationConfig.from_pretrained("Flmc/DISC-MedLLM")
>>> messages = []
>>> messages.append({"role": "user", "content": "我感觉自己颈椎非常不舒服,每天睡醒都会头痛"})
>>> response = model.chat(tokenizer, messages)
>>> print(response)
また、現在のバージョンはBaichuanをベースモデルとして使用しているため、int8、int4量子化推論でのデプロイについては、そのリポジトリを参照できます。ただし、量子化デプロイを使用すると、パフォーマンスが低下します。
💻 使用例
基本的な使用法
>>> import torch
>>> from transformers import AutoModelForCausalLM, AutoTokenizer
>>> from transformers.generation.utils import GenerationConfig
>>> tokenizer = AutoTokenizer.from_pretrained("Flmc/DISC-MedLLM", use_fast=False, trust_remote_code=True)
>>> model = AutoModelForCausalLM.from_pretrained("Flmc/DISC-MedLLM", device_map="auto", torch_dtype=torch.float16, trust_remote_code=True)
>>> model.generation_config = GenerationConfig.from_pretrained("Flmc/DISC-MedLLM")
>>> messages = []
>>> messages.append({"role": "user", "content": "我感觉自己颈椎非常不舒服,每天睡醒都会头痛"})
>>> response = model.chat(tokenizer, messages)
>>> print(response)
高度な使用法
現在のバージョンはBaichuanをベースモデルとして使用しているため、int8、int4量子化推論でのデプロイについては、そのリポジトリを参照できます。ただし、量子化デプロイを使用すると、パフォーマンスが低下します。
📚 ドキュメント
データセット
DISC-MedLLMを訓練するために、既存の医療データセットから派生した47万以上の異なる例から構成される、DISC-Med-SFTという高品質のデータセットを構築しました。いくつかの選択的に選ばれたソースを使用してデータセットを再構築することで、目標指向の戦略を採用しています。これらのデータソースは、LLMが医療分野の知識を獲得し、行動パターンを人間の嗜好と一致させ、実世界のオンライン医療対話の分布を捉えるのに役立ちます。
データセット |
元のソース |
サイズ |
再構築されたAI医師-患者対話 |
MedDialog |
400k |
再構築されたAI医師-患者対話 |
cMedQA2 |
20k |
知識グラフQAペア |
CMeKG |
50k |
行動嗜好データセット |
手動選択 |
2k |
その他 |
MedMCQA |
8k |
その他 |
MOSS-SFT |
33k |
その他 |
Alpaca-GPT4-zh |
1k |
トレーニング
同じデータスキーマのデータを使用して、モデルを微調整することができます。
トレーニングコードは、Fireflyから派生しており、データスキーマと対話形式が異なります。全パラメータ微調整のコードのみを提供しています。
deepspeed --num_gpus={num_gpus} ./train/train.py --train_args_file ./train/train_args/sft.json
トレーニングを開始する前に、sft.json
の設定を確認してください。
他のトレーニングコードでモデルを微調整する場合は、以下の対話形式を使用してください。
<\b><$user_token>content<$assistant_token>content<\s><$user_token>content ...
使用しているuser_token
とassistant_token
は、それぞれ195
と196
です。これはBaichuan-13b-Chatと同じです。
宣言
言語モデルには固有の制限があるため、このモデルが生成する情報の正確性や信頼性を保証することはできません。このモデルは、個人や学術グループによる研究とテストのみを目的として設計されています。ユーザーには、モデルの出力を通じて得られる情報や医療アドバイスを批判的に評価することを強くお勧めします。このような情報を盲目的に信頼したり、従ったりすることは強く推奨されません。モデルの使用によって生じる問題、リスク、または悪影響について、責任を負いません。
📄 ライセンス
このリポジトリ内のソースコードの使用は、Apache 2.0ライセンスに準拠しています。
引用
@misc{bao2023discmedllm,
title={DISC-MedLLM: Bridging General Large Language Models and Real-World Medical Consultation},
author={Zhijie Bao and Wei Chen and Shengze Xiao and Kuang Ren and Jiaao Wu and Cheng Zhong and Jiajie Peng and Xuanjing Huang and Zhongyu Wei},
year={2023},
eprint={2308.14346},
archivePrefix={arXiv},
primaryClass={cs.CL}
}