HumanProrompt est un cadre pour une conception, une gestion, un partage et une utilisation plus faciles de la boucle humaine et des méthodes rapides. Il est spécialement conçu pour les chercheurs. Il est toujours en cours ?, Nous accueillons fortement les nouvelles contributions sur les méthodes et les modules. Consultez notre proposition ici.
Tout d'abord, clonez ce dépôt, puis exécutez:
pip install -e . Cela installera le package HumanPrompt et ajoutera un centre de liaison souple à ./humanprompt/artifacts/hub .
Ensuite, vous devez définir certaines variables environnementales comme la clé API OpenAI:
export OPENAI_API_KEY = " YOUR_OPENAI_API_KEY "Ensuite, cela dépend de la façon dont vous utiliserez ce dépôt. Pour l'instant, la mission de ce repo est d'aider les chercheurs à vérifier leurs idées. Par conséquent, nous le rendons vraiment flexible pour s'étendre et utiliser.
Un exemple minimal pour exécuter une méthode est le suivant:
Notre utilisation est assez simple, elle est presque similaire si vous avez déjà utilisé des transformateurs HuggingFace.
Par exemple, utilisez la chaîne de réflexion sur CommonSenseQA:
from humanprompt . methods . auto . method_auto import AutoMethod
from humanprompt . tasks . dataset_loader import DatasetLoader
# Get one built-in method
method = AutoMethod . from_config ( method_name = "cot" )
# Get one dataset, select one example for demo
data = DatasetLoader . load_dataset ( dataset_name = "commonsense_qa" , dataset_split = "test" )
data_item = data [ 0 ]
# Adapt the raw data to the method's input format, (we will improve this part later)
data_item [ "context" ] = "Answer choices: {}" . format (
" " . join (
[
"({}) {}" . format ( label . lower (), text . lower ())
for label , text in zip (
data_item [ "choices" ][ "label" ], data_item [ "choices" ][ "text" ]
)
]
)
)
# Run the method
result = method . run ( data_item )
print ( result )
print ( data_item )Text-shot zéro2sql:
import os
from humanprompt . methods . auto . method_auto import AutoMethod
from humanprompt . tasks . dataset_loader import DatasetLoader
method = AutoMethod . from_config ( "db_text2sql" )
data = DatasetLoader . load_dataset ( dataset_name = "spider" , dataset_split = "validation" )
data_item = data [ 0 ]
data_item [ "db" ] = os . path . join (
data_item [ "db_path" ], data_item [ "db_id" ], data_item [ "db_id" ] + ".sqlite"
)
result = method . run ( data_item )
print ( result )
print ( data_item ) Nous adoptons le paradigme "une configuration, une expérience" pour faciliter la recherche, en particulier lorsque vous comprenez différentes méthodes d'incitation. Dans le fichier de configuration de chaque expérience (.YAML) sous examples/configs/ , vous pouvez configurer l'ensemble de données, la méthode d'incitation et les métriques.
Voici un exemple de fichier de configuration pour la méthode de la chaîne de pensées sur GSM8K:
---
dataset :
dataset_name : " gsm8k " # dataset name, aligned with huggingface dataset if loaded from it
dataset_split : " test " # dataset split
dataset_subset_name : " main " # dataset subset name, null if not used
dataset_key_map : # mapping original dataset keys to humanprompt task keys to unify the interface
question : " question "
answer : " answer "
method :
method_name : " cot " # method name to initialize the prompting method class
method_config_file_path : null # method config file path, null if not used(will be overriden by method_args).
method_args :
client_name : " openai " # LLM API client name, adopted from github.com/HazyResearch/manifest
transform : " cot.gsm8k.transform_cot_gsm8k.CoTGSM8KTransform " # user-defined transform class to build the prompts
extract : " cot.gsm8k.extract_cot_gsm8k.CoTGSM8KExtract " # user-defined extract class to extract the answers from output
extraction_regex : " .*The answer is (.*). n ? " # user-defined regex to extract the answer from output
prompt_file_path : " cot/gsm8k/prompt.txt " # prompt file path
max_tokens : 512 # max generated tokens
temperature : 0 # temperature for generated tokens
engine : code-davinci-002 # LLM engine
stop_sequence : " nn " # stop sequence for generation
metrics :
- " exact_match " # metrics to evaluate the results Les utilisateurs peuvent créer les classes transform et extract pour personnaliser le processus d'extraction de génération d'invite et de réponse. Le fichier d'invite peut être remplacé ou spécifié en fonction des besoins de l'utilisateur.
Pour exécuter des expériences, vous pouvez spécifier le nom de l'expérience et d'autres configurations de méta dans la ligne de commande sous examples/ répertoire.
Par exemple, exécutez la commande suivante pour exécuter la chaîne de pensées sur GSM8K:
python run_experiment.py
--exp_name cot-gsm8k
--num_test_samples 300 Pour une nouvelle combinaison de méthodes et de tâches, vous pouvez simplement ajouter un nouveau fichier de configuration sous examples/configs/ et exécuter la commande.
.
├── examples
│ ├── configs # config files for experiments
│ ├── main.py # one sample demo script
│ └── run_experiment.py # experiment script
├── hub # hub contains static files for methods and tasks
│ ├── cot # method Chain-of-Thought
│ │ ├── gsm8k # task GSM8K, containing prompt file and transform/extract classes, etc.
│ │ └── ...
│ ├── ama_prompting # method Ask Me Anything
│ ├── binder # method Binder
│ ├── db_text2sql # method text2sql
│ ├── react # method ReAct
│ ├── standard # method standard prompting
│ └── zero_shot_cot # method zero-shot Chain-of-Thought
├── humanprompt # humanprompt package, containing building blocks for the complete prompting pipeline
│ ├── artifacts
│ │ ├── artifact.py
│ │ └── hub
│ ├── components # key components for the prompting pipeline
│ │ ├── aggregate # aggregate classes to aggregate the answers
│ │ ├── extract # extract classes to extract the answers from output
│ │ ├── post_hoc.py # post-hoc processing
│ │ ├── prompt.py # prompt classes to build the prompts
│ │ ├── retrieve # retrieve classes to retrieve in-context examples
│ │ └── transform # transform classes to transform the raw data to the method's input format
│ ├── evaluators # evaluators
│ │ └── evaluator.py # evaluator class to evaluate the dataset results
│ ├── methods # prompting methods, usually one method is related to one paper
│ │ ├── ama_prompting # Ask Me Anything(https://arxiv.org/pdf/2210.02441.pdf)
│ │ ├── binder # Binder(https://arxiv.org/pdf/2210.02875.pdf)
│ │ └── ...
│ ├── tasks # dataset loading and preprocessing
│ │ ├── add_sub.py # AddSub dataset
│ │ ├── wikitq.py # WikiTableQuestions dataset
│ │ └── ...
│ ├── third_party # third party packages
│ └── utils # utils
│ ├── config_utils.py
│ └── integrations.py
└── tests # test scripts
├── conftest.py
├── test_datasetloader.py
└── test_method.py
Ce référentiel est conçu pour que les chercheurs donnent des usages rapides et une manipulation facile de différentes méthodes rapides. Nous avons passé beaucoup de temps à faciliter la prolongation et l'utilisation, nous espérons donc que vous pourrez contribuer à ce repo.
Si vous souhaitez contribuer votre méthode dans ce cadre, vous pouvez:
humanprompt/methods . Pour ce faire, vous devez suivre les étapes suivantes:main , nommée méthodes../humanprompt/methods et ajoutez votre méthode dans le dossier ./humanprompt/methods/your_method_name ,./hub/your_method_name ,./examples dans ./hub/your_method_name pour configurer l'utilisation de base cette méthode,./examples pour l'exécution et le test de votre méthode.main .Nous utilisons le pré-engagement pour contrôler la qualité du code. Avant de vous engager, assurez-vous d'exécuter le code ci-dessous pour passer en revue votre code et résoudre les problèmes.
pip install pre-commit
pre-commit install # install all hooks
pre-commit run --all-files # trigger all hooks
Vous pouvez utiliser git commit --no-verify pour sauter et nous permettre de gérer cela plus tard.
Si vous trouvez ce dépôt utile, veuillez citer notre projet et manifester:
@software { humanprompt ,
author = { Tianbao Xie and
Zhoujun Cheng and
Yiheng Xu and
Peng Shi and
Tao Yu } ,
title = { A framework for human-readable prompt-based method with large language models } ,
howpublished = { url{https://github.com/hkunlp/humanprompt} } ,
year = 2022 ,
month = October
} @misc { orr2022manifest ,
author = { Orr, Laurel } ,
title = { Manifest } ,
year = { 2022 } ,
publisher = { GitHub } ,
howpublished = { url{https://github.com/HazyResearch/manifest} } ,
}