

Bienvenue dans la tablette Github! L'objectif de ce projet est de réaliser des progrès sur l'apprentissage de l'enseignement pour la prédiction tabulaire. Espérons que nous pourrons créer des modèles qui résolvent les tâches de prédiction tabulaires en utilisant des instructions et quelques exemples étiquetés.
Bien que de nombreux problèmes de prédiction nécessitent l'utilisation de données tabulaires, souvent, la collecte de données de formation suffisantes peut être une tâche de défi, en raison de coûts ou de problèmes de confidentialité. Les modèles de grandes langues (LLM) offrent des connaissances mondiales considérables en raison de leur pré-formation et pourraient aider à améliorer l'efficacité de l'échantillon pour ces problèmes. Pourtant, ces modèles ne sont souvent pas complètement alignés avec de nombreuses tâches de prédiction tabulaires en raison des biais de modèles provenant de la pré-formation et du manque d'informations sur la tâche, nuisant à leurs performances dans les paramètres zéro et peu de tir.
Et si nous pouvions utiliser des instructions de tâche pour aider à combler cet écart? C'est là que la tablette entre en jeu. La tablette est une référence vivante des ensembles de données tabulaires annotés avec des instructions de tâche pour évaluer la façon dont les LLM utilisent les instructions pour améliorer les performances des tâches de prédiction tabulaire.
La tablette est une référence vivante des tâches de prédiction tabulaires annotées avec des instructions. Tablet fournit les outils pour évaluer les modèles sur les tâches actuelles et contribuer de nouvelles tâches. L'objectif est d'aider les chercheurs à développer des techniques qui améliorent l'efficacité de l'échantillon des LLM sur la prédiction tabulaire.
Si la tablette est utile à votre travail, veuillez nous citer.
@article{tabletSlack23,
Author = {Dylan Slack and Sameer Singh},
Title = {TABLET: Learning From Instructions For Tabular Data},
Year = {2023},
journal = {arXiv},
}Pour télécharger les données, clonez le référentiel GitHub.
git clone https://github.com/dylan-slack/Tablet.gitUne fois cela terminé, les données sont stockées dans ce chemin.
Tablet/data/benchmark Veuillez utiliser Python>=3.9 . En raison d'une bizarrerie dans l'un des packages, veuillez ne pas utiliser Python=3.9.7 . Assurez-vous également que vous disposez de pip>=23.0.1 .
conda create -n tablet python=3.9.6
conda activate tablet
pip install --upgrade pipSi vous souhaitez installer le package de tablette à partir de la source, accédez au répertoire du package de tablette et installez-vous.
cd Tablet
python3 -m pip install -e .Sinon, vous pouvez installer à partir de PYPI avec PIP. [Remarque: non encore libéré]
pip install tablet-benchmarkMalheureusement, certaines instructions naturelles proviennent de sources qui ne sont pas autorisées avec permis et ne permettent pas d'héberger ailleurs. Nous fournissons un guide pour collecter ces instructions dans
Tablet/fill_missing_instructions.pyUne fois cela terminé, vous pouvez courir
python fill_missing_instructions.pyet les instructions seront ajoutées aux données de référence.
Le package de tablette offre plusieurs fonctionnalités utiles pour évaluer les performances des instructions LLMS + sur les ensembles de données tabulaires. Tablet fournit du code pour évaluer les modèles arbitraires HuggingFace sur les tâches et fournit également des outils pour simplement obtenir l'ensemble de données HuggingFace pour une tâche particulière afin que vous puissiez effectuer l'évaluation que vous souhaitez.
Tout d'abord, regardons comment les ensembles de données de tâche sont stockés dans la tablette. Toutes les tâches sont stockées dans
Tablet/data/benchmark/performancePar exemple, la tâche adulte est de stockage à
Tablet/data/benchmark/performance/AdultDans ce répertoire, il existe différents répertoires pour chaque annotation d'instructions pour la tâche adulte. Par exemple, regardons l'un des instructions générées par les prototypes. Cette instruction est stockée à
Tablet/data/benchmark/performance/Adult/prototypes-synthetic-performance-0Les instructions recueillies par d'autres sources ont des chemins différents. Les instructions générées par des ensembles de règles ont tous le nom du répertoire
ruleset-synthetic-performance- *Et les instructions naturelles ont
prototypes-naturallanguage-performance- *Remarque, l'utilisation des prototypes ici est juste de conserver la cohérence de la mise en forme avec les autres noms de répertoire.
Dans chaque répertoire, il y a quatre fichiers
../test.csv
../test.json
../train.csv
../train.jsonCe sont les ensembles de formation et de test, stockés à la fois dans leurs formats tabulaires (les .csv) et leurs fichiers de formats de langue naturelle (les .json). Dans les fichiers JSON, il y a chaque composant rapide, comme l'en-tête, la sérialisation des points de données et l'instruction.
Voici comment utiliser le package de tablette pour obtenir un ensemble de données HuggingFace pour une tâche particulière. Disons que nous voulons obtenir l'un des ensembles de données adultes et coqueluchistes à ces endroits
Tablet/data/benchmark/performance/Adult/prototypes-synthetic-performance-0
Tablet/data/benchmark/performance/A37/prototypes-synthetic-performance-0Nous pouvons obtenir les ensembles de données de test comme suit
from Tablet import evaluate
benchmark_path = "./data/benchmark/performance/"
tasks = [ 'A37/prototypes-synthetic-performance-0' ,
'Adult/prototypes-synthetic-performance-0' ]
evaluator = evaluate . Evaluator ( benchmark_path = benchmark_path ,
tasks_to_run = tasks ,
encoding_format = "flan" ,
k_shot = 0 )
whooping_cough , adult = evaluator . get_test_hf_datasets () Nous pouvons spécifier k_shot ici pour contrôler le nombre d'instances K_Shot échantillonnées à partir des données de formation et incluses dans les invites. Ensuite, nous pouvons accéder aux données et aux étiquettes du test adulte en tant que
test_data , ground_truth_labels = adult [ 'text' ], adult [ 'label' ] Nous pouvons également évaluer directement les performances sur les tâches. Par exemple, évaluer les petites performances Flan-T5 à 2 coups sur l'adulte avec des instructions générées par des prototypes avec 3 graines est la suivante
from Tablet import evaluate
benchmark_path = "./data/benchmark/performance/"
tasks = [ 'Adult/prototypes-synthetic-performance-0' ]
evaluator = evaluate . Evaluator ( benchmark_path = benchmark_path ,
tasks_to_run = tasks ,
encoding_format = "flan" ,
results_file = "my_cool_results.txt" ,
k_shot = 2 )
evaluator . run_eval ( how_many = 3 ) Les résultats seront annexés à my_cool_results.txt .
Afin de créer des modèles qui peuvent s'aligner extrêmement bien avec les problèmes de prédiction tabulaires à partir des instructions simples et peut-être quelques exemples, nous avons besoin de nombreuses tâches. Ceux-ci sont utiles pour évaluer la façon dont nous faisons et pourraient être utiles pour une supervision future.
La tablette facilite la création de nouvelles tâches en écrivant des instructions ou en les générant avec GPT-3 pour de nouveaux ensembles de données. Voici comment vous le faites.
Vous devez avoir la formation et les tests pour votre tâche stockée dans les Pandas DF. Ensuite, vous pouvez appeler Tablet.create . Cette fonction s'occupera de créer la tâche pour les instructions naturelles que vous fournissez et générera également des instructions en utilisant GPT-3, si vous le souhaitez.
from Tablet import create
create . create_task ( train_x ,
eval_x ,
train_y ,
eval_y ,
name = my_data_set_name ,
header = "Predict xyz." ,
nl_instruction = "Generally, people papers are grad students." ,
categorical_columns = names_of_categorical_columns ,
num = index_of_task ,
num_gpt3_revisions = 10 ,
openai_key_path = path_to_open_ai_key ,
save_loc = "./data/benchmark" ) Ici, train_x et eval_x sont les divisions de train et de test. De même, train_y et eval_y sont les colonnes d'étiquette. Cette fonction accepte également le nom de la tâche (par exemple, des choses comme Adult ou Wine ), l'en-tête décrivant l'objectif de haut niveau de la tâche et les instructions de Langauge naturelle - c'est l'argument nl_instructions . Vous devez également spécifier les noms des colonnes catégorielles. L'argument num est l'index que la tâche avec cette instruction naturelle sera stockée sous (par exemple, prototypes-naturallanguage-performance-{num} ).
De plus, si vous souhaitez générer des instructions avec GPT-3, vous devrez fournir une clé OpenAI dans un fichier et donner l'emplacement de ce fichier à l'argument openai_key_path et spécifier le nombre d'instructions pour les prototypes et les modèles de sets de règles que vous souhaitez créer avec num_gpt3_revisions .
Pour inclure votre nouvelle tâche impressionnante, veuillez vous assurer que les fichiers de la tâche sont sous
./data/benchmark/performance/my_new_tasket soumettre une demande de traction.
Veuillez également inclure un court Readmd.md dans le dossier décrivant l'objectif de la tâche et la licence que les données et les instructions sont sous. Par exemple, quelque chose comme ça est idéal:
Task: Predict how many sheep someone will need to count before they fall asleep.
Data License: Apache 2.0
Instruction License: MITNous allons l'examiner et l'ajouter à l'indice de référence. Si vous souhaitez que votre nom et votre site Web soient ajoutés aux listes de tâches sur la page d'accueil, veuillez également mentionner cela dans la demande de traction.