HumanPrompt adalah kerangka kerja untuk desain, mengelola, berbagi, dan penggunaan yang lebih mudah, dan penggunaan metode cepat dan cepat. Ini dirancang khusus untuk para peneliti. Masih dalam proses?, Kami sangat menyambut kontribusi baru tentang metode dan modul. Lihat proposal kami di sini.
Pertama, klon repo ini, lalu jalankan:
pip install -e . Ini akan menginstal Paket HumanPrompt dan menambahkan Soft Link Hub ke ./humanprompt/artifacts/hub .
Maka Anda perlu mengatur beberapa variabel lingkungan seperti Kunci API OpenAI:
export OPENAI_API_KEY = " YOUR_OPENAI_API_KEY "Kemudian, itu tergantung pada bagaimana Anda akan menggunakan repo ini. Untuk saat ini, misi repo ini adalah untuk membantu para peneliti dalam memverifikasi ide -ide mereka. Karena itu, kami membuatnya sangat fleksibel untuk memperluas dan menggunakan.
Contoh minimal untuk menjalankan metode adalah sebagai berikut:
Penggunaan kami cukup sederhana, hampir serupa jika Anda telah menggunakan transformer huggingface sebelumnya.
Misalnya, gunakan rantai-dipikirkan di 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 )Text2SQL Zero-shot:
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 ) Kami mengadopsi paradigma "satu konfigurasi, satu eksperimen" untuk memfasilitasi penelitian, terutama ketika membandingkan metode pendakian yang berbeda. Dalam setiap file konfigurasi (.yaml) di bawah examples/configs/ , Anda dapat mengonfigurasi dataset, metode yang diminta, dan metrik.
Berikut ini adalah contoh file konfigurasi untuk metode rantai-dipikirkan di 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 Pengguna dapat membuat kelas transform dan extract untuk menyesuaikan proses pembuatan cepat dan menjawab ekstraksi. File prompt dapat diganti atau ditentukan sesuai dengan kebutuhan pengguna.
Untuk menjalankan eksperimen, Anda dapat menentukan nama percobaan dan konfigurasi meta lainnya di baris perintah di bawah examples/ direktori.
Misalnya, jalankan perintah berikut untuk menjalankan rantai-dipikirkan di GSM8K:
python run_experiment.py
--exp_name cot-gsm8k
--num_test_samples 300 Untuk kombinasi baru dari metode dan tugas, Anda cukup menambahkan file konfigurasi baru di bawah examples/configs/ dan menjalankan perintah.
.
├── 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
Repositori ini dirancang untuk para peneliti untuk memberikan penggunaan cepat dan manipulasi mudah dari berbagai metode cepat. Kami menghabiskan banyak waktu untuk membuatnya mudah untuk memperpanjang dan menggunakan, jadi kami harap Anda dapat berkontribusi pada repo ini.
Jika Anda tertarik untuk menyumbangkan metode Anda ke dalam kerangka kerja ini, Anda dapat:
humanprompt/methods sendiri. Untuk melakukan itu, Anda harus mengikuti langkah -langkah berikut:main , bernama metode Anda../humanprompt/methods , dan tambahkan metode Anda ke dalam ./humanprompt/methods/your_method_name folder,./hub/your_method_name ,./examples di ./hub/your_method_name untuk mengonfigurasi penggunaan dasar metode ini,./examples untuk menjalankan dan menguji metode Anda.main .Kami menggunakan pra-komit untuk mengontrol kualitas kode. Sebelum Anda berkomitmen, pastikan untuk menjalankan kode di bawah ini untuk membahas kode Anda dan memperbaiki masalah.
pip install pre-commit
pre-commit install # install all hooks
pre-commit run --all-files # trigger all hooks
Anda dapat menggunakan git commit --no-verify untuk melewatkan dan mengizinkan kami menanganinya nanti.
Jika Anda menemukan repo ini berguna, silakan kutip proyek kami dan manifest:
@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} } ,
}