
[NeurIPS 2025] Un codice sorgente ufficiale per il paper "GuardReasoner-VL: Safeguarding VLMs via Reinforced Reasoning".
Yue Liu, Shengfang Zhai, Mingzhe Du
Yulin Chen, Tri Cao, Hongcheng Gao, Cheng Wang
Xinfeng Li, Kun Wang, Junfeng Fang, Jiaheng Zhang, Bryan Hooi
1Università Nazionale di Singapore, 2Università Tecnologica di Nanyang
Per migliorare la sicurezza dei VLM, questo articolo introduce un nuovo modello di guardia per VLM basato sul ragionamento, chiamato GuardReasoner-VL. L'idea centrale è incentivare il modello di guardia a ragionare deliberatamente prima di prendere decisioni di moderazione tramite RL online. Innanzitutto, costruiamo GuardReasoner-VLTrain, un corpus di ragionamento con 123K campioni e 631K passaggi di ragionamento, che copre input testuali, immagini e testo-immagine. Quindi, basandoci su di esso, avviamo a freddo la capacità di ragionamento del nostro modello tramite SFT. Inoltre, potenziamo ulteriormente il ragionamento relativo alla moderazione attraverso RL online. Nello specifico, per aumentare la diversità e la difficoltà dei campioni, eseguiamo un rejection sampling seguito da data augmentation tramite la proposta concatenazione di dati sensibile alla sicurezza. Inoltre, utilizziamo un parametro di clipping dinamico per incoraggiare l'esplorazione nelle fasi iniziali e lo sfruttamento nelle fasi successive. Per bilanciare prestazioni ed efficienza dei token, progettiamo una ricompensa di sicurezza sensibile alla lunghezza che integra accuratezza, formato e costo dei token. Estesi esperimenti dimostrano la superiorità del nostro modello. Notevolmente, supera il secondo classificato del 19.27% di F1 score in media.
Figura 1: Panoramica di GuardReasoner-VL.
Per valutare GuardReasoner-VL, esegui il seguente codice.
python ./evaluate.py
I risultati vengono salvati nel file result.csv.
Performance of GuardReasoner-VL (GuardReasoner-VL-7B):
ToxicChat ,HarmBenchPrompt ,OpenAIModeration ,AegisSafetyTest ,SimpleSafetyTests ,WildGuardTest ,Average (Text) ,HarmImageTest ,SPA-VL-Eval ,Average (All)
76.51 ,98.30 ,70.98 ,90.13 ,98.99 ,88.35 ,79.88 ,70.84 ,85.60 ,79.07
HarmBenchResponse ,SafeRLHF ,BeaverTails ,XSTestReponseHarmful,WildGuardTest ,Average (Text) ,SPA-VL-Eval ,Average (All)
87.22 ,66.37 ,84.76 ,92.72 ,79.04 ,79.42 ,73.22 ,77.58
Performance of GuardReasoner-VL (GuardReasoner-VL-Eco-7B):
ToxicChat ,HarmBenchPrompt ,OpenAIModeration ,AegisSafetyTest ,SimpleSafetyTests ,WildGuardTest ,Average (Text) ,HarmImageTest ,SPA-VL-Eval ,Average (All)
76.26 ,98.73 ,70.82 ,90.34 ,99.50 ,88.54 ,79.82 ,64.84 ,85.26 ,77.49
HarmBenchResponse ,SafeRLHF ,BeaverTails ,XSTestReponseHarmful,WildGuardTest ,Average (Text) ,SPA-VL-Eval ,Average (All)
86.22 ,66.15 ,85.51 ,93.33 ,78.60 ,79.51 ,70.81 ,76.94
Performance of GuardReasoner-VL (GuardReasoner-VL-3B):
ToxicChat ,HarmBenchPrompt ,OpenAIModeration ,AegisSafetyTest ,SimpleSafetyTests ,WildGuardTest ,Average (Text) ,HarmImageTest ,SPA-VL-Eval ,Average (All)
74.45 ,89.10 ,70.83 ,88.79 ,99.50 ,88.92 ,78.77 ,70.93 ,86.47 ,78.73
HarmBenchResponse ,SafeRLHF ,BeaverTails ,XSTestReponseHarmful,WildGuardTest ,Average (Text) ,SPA-VL-Eval ,Average (All)
85.76 ,66.37 ,85.16 ,93.08 ,76.07 ,78.83 ,71.19 ,76.56
Performance of GuardReasoner-VL (GuardReasoner-VL-Eco-3B):
ToxicChat ,HarmBenchPrompt ,OpenAIModeration ,AegisSafetyTest ,SimpleSafetyTests ,WildGuardTest ,Average (Text) ,HarmImageTest ,SPA-VL-Eval ,Average (All)
73.47 ,88.58 ,70.87 ,89.04 ,99.50 ,89.16 ,78.43 ,66.79 ,85.82 ,77.39
HarmBenchResponse ,SafeRLHF ,BeaverTails ,XSTestReponseHarmful,WildGuardTest ,Average (Text) ,SPA-VL-Eval ,Average (All)
84.72 ,66.96 ,85.39 ,93.59 ,77.39 ,79.31 ,72.01 ,77.14
Figura 2: Prestazioni medie di GuardReasoner-VL sui benchmark multi-modali di guardrail.
Tabella 1: Prestazioni del compito di rilevamento della dannosità dei prompt.
Tabella 2: Prestazioni del compito di rilevamento della dannosità delle risposte.
Per riprodurre il processo di generazione di GuardReasoner-VL, esegui il seguente codice.
bash test.sh
Per utilizzare GuardReasoner-VL, esegui il seguente codice.
CUDA_VISIBLE_DEVICES=0 python deploy.py