Este repositorio contiene el código, los datos y los modelos para el documento TMLR 2024 "Tigerscore: hacia la construcción de la métrica explicable para todas las tareas de generación de texto"
| Otros recursos |
|---|
| ? Colecciones tigerscore |
| ? Demostración de la cara de abrazos |
Para usar directamente la tubería Tigerscore, primero debe instalarla como un paquete Python.
pip install git+https://github.com/TIGER-AI-Lab/TIGERScore.git Verifique si su torch.cuda.is_available() es True para su máquina local.
Además, para usar Tigerscore con VLLM detallado aquí, debe instalar mannualmente el documento VLLM después de 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 desea usar los scripts de capacitación, instale las dependencias ejecutando el siguiente comando:
pip install -r requirements.txt Después de la instalación, es bueno calificar las generaciones de texto con el siguiente código Exmaple Python (ver en tigerscore_example_usage.ipynb para más casos de uso):
# 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 )Los resultados son una lista de dicts que consisten en análisis de errores estructurados.
[
{
"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 admite VLLM Inferencia rápida. En una sola GPU A6000 (48 GB), solo requiere 0.2s - 0.3s para Tigerscore -13B para anotar cada instancia.
scorer = TIGERScorer ( model_name = "TIGER-Lab/TIGERScore-7B" , quantized = True ) # 4 bit quantization on GPU Al establecer el parámetro de inicialización quanitzed=True , el modelo se establece para cargarse en la versión de 4 bits con la opción de carga de cara load_in_4bit=True .
Tenga en cuenta que aunque el uso de cuantización disminuiría el requisito de memoria en un gran margen. Puede ejecutar Tigerscore en una GPU de memoria de más de 20 GB. Sin embargo, la velocidad de inferencia puede ser más lenta que el uso de la versión BFLOAT16 original. Depende de ti hacer una compensación.
scorer = TIGERScorer ( model_name = "TIGER-Lab/TIGERScore-7B-GGUF" , use_llamacpp = True )También proporcionamos la versión Llamacpp de Tigerscore-7b/13b. Al usar la versión GGUF que proporcionamos, puede ejecutar Tigerscore en dispositivos CPU puros. Generalmente se necesitan 20s para Tigerscore-13b para anotar cada instancia.
Los scripts de preprocesamiento del conjunto de datos y los resultados intermedios se pueden encontrar aquí
La carpeta xgptscore contiene todas las plantillas que usamos para consultar ChatGPT o GPT-4 para obtener los errores identificados en la salida de hipótesis para diferentes tareas que Tigerscore involucró. Llamamos a estos métodos de consulta API como XGPTScore para el método de puntuación AE X PlanAinable mediante la consulta de modelos GPT .
La tubería general de XGPTScore es:
./constants.py ) Consulte xgptscore/README.md para obtener más detalles. Y cómo usar nuestra plantilla de consulta con una sola función xgptscore()
MetricInstruct consiste en datos de 2 canales de muestreo, canal del mundo real y canal sintético .
generate_distill_data.sh .generate_synthesis_distill_data.sh . El propósito general de la recopilación de datos de 2 canales es asegurarnos de cubrir tantos tipos de error en los datos de capacitación para que nuestro modelo se generalice mejor.Después de obtener estos datos, hacemos una heurística en serie para filtrar nuestros datos malos y aumentar los datos:
check_data.sh )generate_inst_synthetic_data.sh como un suplemento para el canal sintético.¿Puede cargar nuestros datos preprocesados utilizados para Finetune Tigerscore-V1 de abrazar la cara? directamente:
from datasets import load_dataset
dataset = load_dataset ( "TIGER-Lab/MetricInstruct" ) Proporcionamos nuestros scripts de capacitación y prueba en la carpeta finetune , ¿dónde usamos?
finetune_llama.sh para finetinar el modelo.format_distill_data.sh para transformar los datos en el formato para Finetuning, es decir, una instrucción sinlge y un contexto de entrada con una salida.test_llama_vllm.sh para probar y calcular la correlación como el rendimiento de nuestro modelo Finetuned. Consulte estos scripts para conocer más detalles de nuestro proceso de capacitación y prueba../tigerscore/common/README.md para instalar el env. Por favor, cite nuestro documento si está bien útiles, modelo o código útil.
@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}
}