Denna artikel kommer att fördjupa sig i projektet OLAPH: Förbättra factualiteten i biomedicinsk frågesvar av långformat. Vi kommer att undersöka allt från installation och snabb användning till datasets, träning, inferens och iterativ lärande, med en mänsklig och insiktsfull ton.
OLAPH, ett projekt av Minbyul Jeong, Hyeon Hwang, Chanwoong Yoon, Taewhoo Lee och Jaewoo Kang, syftar till att förbättra factualiteten i biomedicinsk frågesvar av långformat. Genom att minska hallucinationer och inkludera väsentliga påståenden strävar OLAPH efter att leverera mer tillförlitliga och korrekta svar. Detta möjliggörs genom automatisk utvärdering för att välja den bästa responsen under samplingprediktioner och genom att designa för att svara på frågor på ett föredraget sätt.
För att börja med OLAPH-projektet måste en Conda-miljö skapas. Det är viktigt att notera att två olika miljöer används för träning och inferens. För att säkerställa korrekt reproducerbarhet används PyTorch version 2.1.2. Beroende på ens miljöinställningar ska en kompatibel version av PyTorch väljas.
Följande kommando används för att skapa en ny miljö:
conda create -n olaph python=3.10
Därefter navigerar man till mappen alignment-handbook och installerar nödvändiga paket:
cd ./alignment-handbook/
python -m pip install .
För våra experimentella inställningar används CUDA version 11.8, och därmed rekommenderas följande kommando för att säkerställa kompatibilitet:
conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia
Vidare krävs installation av Flash Attention 2:
python -m pip install flash-attn==2.5.6 --no-build-isolation
För att stärka inferenshastigheten behövs vllm och ytterligare krav för automatisk utvärdering:
pip install -r requirements.txt --no-build-isolation
pip install git+https://github.com/lucadiliello/bleurt-pytorch.git
Slutligen behövs Huggingface-konto token i WRITE status och Git LFS för att ladda upp modeller:
huggingface-cli login
sudo apt-get install git-lfs
För snabb användning kan man ladda ner 7B modeller tränade med OLAPH-ramverket från HuggingFace-hubben. Här är en stegvis guide:
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
model_name = "dmis-lab/self-biorag-7b-olaph"
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype=torch.float16).to(device)
tokenizer = AutoTokenizer.from_pretrained(model_name, padding_side="left")
query = "Kan ett rött öga vara allvarligt?"
input_ids = tokenizer.encode(query, return_tensors="pt").to(device)
output = model.generate(input_ids, max_length=512, no_repeat_ngram_size=2, do_sample=False, top_p=1.0).to(device)
response = tokenizer.decode(output[0], skip_special_tokens=True).strip()
print("Model prediction:", response)
Den givna modellen fastslår att ett rött öga kan vara en indikation på en allvarlig åkomma eller en komplikation av en underliggande sjukdom eller skada. Vid ihållande eller svår rodnad rekommenderas att söka medicinsk hjälp.
MedLFQA är en rekonstruerad version av långformat frågesvar (LFQA) benchmark datasets inom det biomedicinska området, vilket underlättar automatisk utvärdering. MedLFQA innefattar fyra komponenter: frågan (Q), långformat svar (A), måste-ha uttalanden (MH), och bra-att-ha uttalanden (NH).
De fyra biomedicinska LFQA benchmark datasets som utgör MedLFQA är:
LiveQA
MedicationQA
HealthSearchQA
K-QA
Samplingprediktioner är en grundläggande aspekt av OLAPH-projektet. För att generera den första samplingprediktionen används följande kommando:
export DATA_NAME=live_qa
export HUGGINGFACE_MODEL_DIR=dmis-lab/selfbiorag_7b
CUDA_VISIBLE_DEVICES=0 python pdata_collection.py --model_name_or_path ${HUGGINGFACE_MODEL_DIR} --eval_data ${DATA_NAME}
För samplingprediktion under iterativ lärande används detta kommando:
export DATA_NAME=live_qa
export HUGGINGFACE_MODEL_DIR=your_trained_model
CUDA_VISIBLE_DEVICES=0 python pdata_collection.py --model_name_or_path ${HUGGINGFACE_MODEL_DIR} --eval_data ${DATA_NAME}
För att finslipa OLAPH används Supervised Fine-Tuning (SFT), vilket innebär att modellen tränas att känna igen frågesvar-uppgifter. Istället för att vidareutbilda på mänskligt annoterade svar eller pseudooptimala svar genererade av GPT-4, används ett självgenererat svar som ett märkt svar. Detta minskar beroendet av anotationsresurser i dataset.
För att genomföra denna process, används detta konfigurationsrecept:
cd alignment-handbook
CUDA_VISIBLE_DEVICES=0,1,2,3 ACCELERATE_LOG_LEVEL=info accelerate launch --config_file recipes/accelerate_configs/deepspeed_zero3.yaml --num_processes 4 scripts/run_sft.py recipes/selfbiorag_7b/sft/config_full.yaml
För att skapa ett syntetiskt preferensset baserat på samplingprediktioner:
export HUGGINGFACE_MODEL_DIR=your_trained_model
export DATA_NAME=live_qa
export WODATA_NAME=kqa_golden
python pred_to_preference.py --model_name ${HUGGINGFACE_MODEL_DIR} --wodata_name ${WODATA_NAME} --data_names live_qa+medication_qa+healthsearch_qa+kqa_golden+kqa_silver_wogold --alpha 1.0 --beta 1.0 --gamma 1.0 --threshold 200
För att genomföra DPO-processen används detta recept:
cd alignment-handbook
CUDA_VISIBLE_DEVICES=0,1,2,3 ACCELERATE_LOG_LEVEL=info accelerate launch --config_file recipes/accelerate_configs/deepspeed_zero3.yaml --num_processes 4 scripts/run_dpo.py recipes/selfbiorag_7b/sft/config_full.yaml
Iterativt lärande inom OLAPH omfattar flera cykler av träning och generering av samplingprediktioner. Målet är att förfina modellens prestanda genom iterativa steg som include samplingprediktioner, SFT, och preferensoptimering.
Dessa steg genomförs så här:
Samplingprediktioner (pdata_collection.py)
Göra SFT set (pred_to_sft.py)
SFT
Samplingprediktioner (pdata_collection.py)
Göra preferensset (pred_to_preference.py)
DPO
Samplingprediktioner (pdata_collection.py)
Göra preferensset (pred_to_preference.py)
DPO
Samplingprediktioner (pdata_collection.py)
Göra preferensset (pred_to_preference.py)
DPO
Information om FactScore kommer snart att tillhandahållas.
Ytterligare frågor och svar kommer snart att tillhandahållas.
Citering för OLAPH-projektet enligt följande:
@misc{jeong2024olaph, title={OLAPH: Improving Factuality in Biomedical Long-form Question Answering}, author={Minbyul Jeong and Hyeon Hwang and Chanwoong Yoon and Taewhoo Lee and Jaewoo Kang}, year={2024}, eprint={2405.12701}, archivePrefix={arXiv}, primaryClass={cs.CL}}
För hjälp eller problem med att använda MedLFQA och OLAPH, skicka in en GitHub-fråga. För kommunikation relaterad till OLAPH, vänligen kontakta Minbyul Jeong (minbyuljeong (at) korea.ac.kr) eller Hyeon Hwang (hyeon-hwang (at) korea.ac.kr)
För ytterligare resurser och information, besök OLAPH:s GitHub-förvar.
OLAPH (Optimizing Language Accuracy for Practical Healthcare) erbjuder flera fördelar inom biomedicinsk frågesvar:
Användningsområden för OLAPH inkluderar:
Genom att kombinera avancerad språkmodellering med biomedicinsk expertis, strävar OLAPH efter att revolutionera hur vi får tillgång till och använder medicinsk information, vilket potentiellt kan förbättra patientvård och medicinsk forskning.
```