Ce repo contient le code, les données et les modèles pour le papier TMLR 2024 "Tigerscore: vers la construction de métriques explicables pour toutes les tâches de génération de texte"
| Autres ressources |
|---|
| ? Collections Tigerscore |
| ? Démo en câlins |
Pour utiliser directement le pipeline TigersCore, vous devez d'abord l'installer en tant que package Python.
pip install git+https://github.com/TIGER-AI-Lab/TIGERScore.git Veuillez vérifier si votre torch.cuda.is_available() est True pour votre machine locale.
En outre, pour utiliser TigersCore avec VllM détaillé ici, vous devez installer manuellement VLLM suivant le document VLLM.
pip install vllm
pip3 install -U xformers --index-url https://download.pytorch.org/whl/cu121 # Replace `cp39` with your Python version (e.g., `cp38`, `cp39`, `cp311`).
pip install https://github.com/vllm-project/vllm/releases/download/v0.2.2/vllm-0.2.2+cu118-cp39-cp39-manylinux1_x86_64.whl
pip3 install -U xformers --index-url https://download.pytorch.org/whl/cu118Si vous souhaitez utiliser les scripts de formation, installez les dépendances en exécutant la commande suivante:
pip install -r requirements.txt Après l'installation, vous êtes prêt à noter les générations de texte avec le code Python ExMaple suivant (voir dans tigerscore_example_usage.ipynb pour plus de cas d'utilisation):
# gpu device setup
import os
os . environ [ "CUDA_VISIBLE_DEVICES" ] = "0"
# example
instruction = "Write an apology letter."
input_context = "Reason: You canceled a plan at the last minute due to illness."
hypo_output = "Hey [Recipient], n n I'm really sorry for ditching our plan. I suddenly got an opportunity for a vacation so I took it. I know this might have messed up your plans and I regret that. n n Despite being under the weather, I would rather go for an adventure. I hope you can understand my perspective and I hope this incident doesn't change anything between us. n n We can reschedule our plan for another time. Sorry again for the trouble. n n Peace out, n [Your Name] n n ---"
# Load and evaluate examples in all options in 3 lines of code
from tigerscore import TIGERScorer
scorer = TIGERScorer ( model_name = "TIGER-Lab/TIGERScore-7B" ) # on GPU
# scorer = TIGERScorer(model_name="TIGER-Lab/TIGERScore-7B", quantized=True) # 4 bit quantization on GPU
# scorer = TIGERScorer(model_name="TIGER-Lab/TIGERScore-7B", use_vllm=True) # VLLM on GPU
# scorer = TIGERScorer(model_name="TIGER-Lab/TIGERScore-7B-GGUF", use_llamacpp=True) # 4 bit quantization on CPU
results = scorer . score ([ instruction ], [ hypo_output ], [ input_context ])
# print the results, which is a list of json output containging the automatically parsed results!
print ( results )Les résultats sont une liste de dicts consistant en une analyse d'erreur structurée.
[
{
"num_errors" : 3 ,
"score" : -12.0 ,
"errors" : {
"error_0" : {
"location" : " " I'm really glad for ditching our plan. " " ,
"aspect" : " Inappropriate language or tone " ,
"explanation" : " The phrase " ditching our plan " is informal and disrespectful. It should be replaced with a more respectful and apologetic phrase like " cancelling our plan " . " ,
"severity" : " Major " ,
"score_reduction" : " 4.0 "
},
"error_1" : {
"location" : " " I suddenly got an opportunity for a vacation so I took it. " " ,
"aspect" : " Lack of apology or remorse " ,
"explanation" : " This sentence shows no remorse for cancelling the plan at the last minute. It should be replaced with a sentence that expresses regret for the inconvenience caused. " ,
"severity" : " Major " ,
"score_reduction" : " 4.0 "
},
"error_2" : {
"location" : " " I would rather go for an adventure. " " ,
"aspect" : " Incorrect reason for cancellation " ,
"explanation" : " This sentence implies that the reason for cancelling the plan was to go on an adventure, which is incorrect. The correct reason was illness. This sentence should be replaced with a sentence that correctly states the reason for cancellation. " ,
"severity" : " Major " ,
"score_reduction" : " 4.0 "
}
},
"raw_output" : " ... "
}
] scorer = TIGERScorer ( model_name = "TIGER-Lab/TIGERScore-7B" , use_vllm = True ) # VLLM on GPUTigerscore prend en charge l'inférence rapide VLLM. Sur un seul GPU A6000 (48 Go), il ne faut que 0,2 s - 0,3 s pour Tigerscore-13B pour marquer chaque instance.
scorer = TIGERScorer ( model_name = "TIGER-Lab/TIGERScore-7B" , quantized = True ) # 4 bit quantization on GPU En définissant le paramètre d'initialisation quanitzed=True , le modèle est défini pour être chargé en version 4 bits avec un visage étreint load_in_4bit=True Option.
Veuillez noter que bien que l'utilisation de la quantification diminuerait l'exigence de mémoire d'une grande marge. Vous pouvez exécuter TigersCore sur un GPU de mémoire de 20 + GB. Cependant, la vitesse d'inférence peut être plus lente que l'utilisation de la version BFLOAT16 d'origine. Cela dépend de vous de faire un compromis.
scorer = TIGERScorer ( model_name = "TIGER-Lab/TIGERScore-7B-GGUF" , use_llamacpp = True )Nous fournissons également la version Llamacpp de Tigerscore-7b / 13b. En utilisant la version GGUF que nous avons fournie, vous pouvez exécuter TigersCore sur des appareils CPU purs. Il faut généralement 20 s pour Tigerscore-13b pour marquer chaque instance.
Des scripts de prétraitement de données et des résultats intermédiaires peuvent être trouvés ici
Le dossier xgptscore contient tous les modèles que nous avons utilisés pour interroger ChatGPT ou GPT-4 pour obtenir les erreurs identifiées dans la sortie de l'hypothèse pour différentes tâches que Tigerscore impliquait. Nous appelons ces méthodes de requête API comme XGPTSCore pour la méthode de notation AE X planifiable en interrogeant les modèles GPT .
Le pipeline global de XGPTSCore est:
./constants.py ) Consultez xgptscore/README.md pour plus de détails. Et comment utiliser notre modèle de requête avec une seule fonction xgptscore()
La mesure de métricin se compose de données de 2 canaux d'échantillonnage, de canal réel et de canal synthétique .
generate_distill_data.sh .generate_synthesis_distill_data.sh . L'objectif général de la collecte de données à 2 canaux est de s'assurer que nous couvrons jusqu'à des types d'erreur dans les données de formation afin que notre modèle généralise mieux.Après avoir obtenu ces données, nous faisons une heuristique série pour filtrer nos mauvaises données et augmenter les données:
check_data.sh )generate_inst_synthetic_data.sh comme complément du canal synthétique.Vous pouvez charger nos données prétraitées utilisées pour Finetune Tigerscore-V1 de l'étreinte Face? directement:
from datasets import load_dataset
dataset = load_dataset ( "TIGER-Lab/MetricInstruct" ) Nous fournissons nos scripts de formation et de test dans le dossier finetune , où nous utilisons?
finetune_llama.sh à finetine le modèle.format_distill_data.sh pour transformer les données en format pour la finetuning, c'est-à-dire une instruction SINLGE et un contexte d'entrée avec une sortie.test_llama_vllm.sh pour tester et calculer la corrélation en tant que performance de notre modèle financé. Veuillez vérifier ces scripts pour savoir plus de détails sur notre processus de formation et de test../tigerscore/common/README.md pour installer l'env. Veuillez citer notre article si vous affinez nos données, notre modèle ou notre code utiles.
@article{Jiang2023TIGERScoreTB,
title={TIGERScore: Towards Building Explainable Metric for All Text Generation Tasks},
author={Dongfu Jiang and Yishan Li and Ge Zhang and Wenhao Huang and Bill Yuchen Lin and Wenhu Chen},
journal={ArXiv},
year={2023},
volume={abs/2310.00752},
url={https://api.semanticscholar.org/CorpusID:263334281}
}