Este repositório contém o código, dados e modelos do papel TMLR 2024 "Tigerscore: Rumo a construir métricas explicáveis para todas as tarefas de geração de texto"
| Outros recursos |
|---|
| ? Coleções de Tigerscore |
| ? Demo de Huggingface |
Para usar diretamente o TigersCore Pipeline, você primeiro precisa instalá -lo como um pacote Python.
pip install git+https://github.com/TIGER-AI-Lab/TIGERScore.git Verifique se a sua torch.cuda.is_available() é True para sua máquina local.
Além disso, para usar o TigersCore com o VLLM detalhado aqui, você precisa instalar o VLLM do VLLM seguinte ao documento 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/cu118Se você deseja usar os scripts de treinamento, instale as dependências executando o seguinte comando:
pip install -r requirements.txt Após a instalação, você está pronto para pontuar as gerações de texto com o seguinte código Python Exmaple (consulte em tigerscore_example_usage.ipynb para obter mais 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 )Os resultados são uma lista de ditos que consistem em análise de erros estruturados.
[
{
"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 GPUO Tigerscore suporta a inferência VLLM rápida. Em uma única GPU A6000 (48 GB), é preciso apenas 0,2s - 0,3s para o Tigerscore -13b para obter cada instância.
scorer = TIGERScorer ( model_name = "TIGER-Lab/TIGERScore-7B" , quantized = True ) # 4 bit quantization on GPU Ao definir o parâmetro de inicialização quanitzed=True , o modelo está definido como carregado na versão de 4 bits com a opção Hugging Face load_in_4bit=True .
Observe que, embora o uso da quantização diminua o requisito de memória por uma grande margem. Você pode executar o Tigerscore em cerca de uma GPU de memória de 20+GB. No entanto, a velocidade de inferência pode ser mais lenta do que usar a versão original do BFLOAT16. Depende de você fazer uma troca.
scorer = TIGERScorer ( model_name = "TIGER-Lab/TIGERScore-7B-GGUF" , use_llamacpp = True )Também fornecemos a versão Llamacpp do Tigerscore-7b/13b. Usando a versão GGUF que fornecemos, você pode executar o TigersCore em dispositivos Pure CPU. Geralmente, são necessários 20s para o Tigerscore-13b para obter cada instância.
Os scripts de pré -processamento do conjunto de dados e resultados intermediários podem ser encontrados aqui
A pasta xgptscore contém todos os modelos que usamos para consultar ChatGPT ou GPT-4 para obter os erros identificados na saída de hipótese para diferentes tarefas que o Tigerscore envolveu. Chamamos esses métodos de consulta de API como XGPTSCORE para o método de pontuação em planas AE X , consultando modelos GPT .
O pipeline geral do XGPTSCore é:
./constants.py ) Verifique xgptscore/README.md para obter mais detalhes. E como usar nosso modelo de consulta com uma única função xgptscore()
A MetricInstruct consiste em dados de 2 canais de amostragem, canal do mundo real e canal sintético .
generate_distill_data.sh .generate_synthesis_distill_data.sh . O objetivo geral da coleta de dados de 2 canais é garantir que cubramos tantos tipos de erro nos dados de treinamento, para que nosso modelo generalize melhor.Depois de obter esses dados, fazemos uma série de heurísticas para filtrar nossos dados ruins e aumentar dados:
check_data.sh )generate_inst_synthetic_data.sh como um suplemento ao canal sintético.Você pode carregar nossos dados pré-processados usados para finalizar o TigersCore-V1 de abraçar o rosto? diretamente:
from datasets import load_dataset
dataset = load_dataset ( "TIGER-Lab/MetricInstruct" ) Fornecemos nossos scripts de treinamento e teste na pasta finetune , onde usamos?
finetune_llama.sh para finalizar o modelo.format_distill_data.sh para transformar os dados no formato para finetuning, ou seja, uma instrução sinlge e contexto de entrada com uma saída.test_llama_vllm.sh para testar e calcular a correlação como o desempenho do nosso modelo FinetUned. Verifique esses scripts para saber mais detalhes do nosso processo de treinamento e teste../tigerscore/common/README.md para instalar o Env. Cite nosso artigo se você multar nossos dados, modelo ou 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}
}