Resep -resep dalam repositori ini telah pindah ke ajaib dan dipertahankan di sana. Mereka bahkan akan segera mendapatkan peningkatan dengan munculnya dukungan Spacy-LLM, yang menampilkan petunjuk yang lebih baik dan beberapa penyedia LLM. Itulah sebabnya kami memilih untuk mengarsipkan repo ini, sehingga kami dapat fokus pada pemeliharaan resep ini sebagai bagian dari spacy dan keajaiban secara langsung.
Anda dapat mempelajari lebih lanjut dengan memeriksa bagian model bahasa besar pada dokumen.
Repositori ini berisi kode contoh tentang cara menggabungkan pembelajaran nol- dan beberapa shot dengan upaya anotasi kecil untuk mendapatkan dataset berkualitas tinggi dengan efisiensi maksimum . Secara khusus, kami menggunakan model bahasa besar yang tersedia dari OpenAi untuk memberi kami set prediksi awal, kemudian memutar instance ajaib pada mesin lokal kami untuk menjalani prediksi ini dan mengkuratori mereka. Ini memungkinkan kami untuk mendapatkan dataset standar emas dengan cukup cepat, dan melatih model yang lebih kecil dan diawasi yang sesuai dengan kebutuhan dan kasus penggunaan kami.

Pastikan untuk menginstal keajaiban serta beberapa dependensi python tambahan:
python -m pip install prodigy -f https://[email protected]
python -m pip install -r requirements.txt Dengan XXXX-XXXX-XXXX-XXXX menjadi kunci lisensi ajaib pribadi Anda.
Kemudian, buat kunci API baru dari openai.com atau ambil yang sudah ada. Catat kunci rahasia serta kunci organisasi dan pastikan ini tersedia sebagai variabel lingkungan. Misalnya, atur di file .env di direktori root:
OPENAI_ORG = "org-..."
OPENAI_KEY = "sk-..."
ner.openai.correct : anotasi ner dengan pembelajaran nol atau beberapa-shot Resep ini menandai prediksi entitas yang diperoleh dari model bahasa besar dan memungkinkan Anda menandai mereka sebagai benar, atau untuk mengkuratori secara manual. Ini memungkinkan Anda untuk dengan cepat mengumpulkan dataset standar emas melalui pembelajaran zero-shot atau beberapa-shot. Ini sangat mirip dengan menggunakan resep ner.correct standar di Prodi.gy, tetapi kami menggunakan GPT-3 sebagai model backend untuk membuat prediksi.
python -m prodigy ner.openai.correct dataset filepath labels [--options] -F ./recipes/openai_ner.py| Argumen | Jenis | Keterangan | Bawaan |
|---|---|---|---|
dataset | str | Dataset Prodigy untuk menyimpan anotasi. | |
filepath | Jalur | Jalur ke data .jsonl ke anotasi. Data setidaknya harus berisi bidang "text" . | |
labels | str | Daftar yang dipisahkan koma yang mendefinisikan label NER yang harus diprediksi oleh model. | |
--lang , -l | str | Bahasa data input - akan digunakan untuk mendapatkan tokenizer yang relevan. | "en" |
--segment , -S | bool | Bendera untuk diatur ketika contoh harus dibagi menjadi kalimat. Secara default, artikel input lengkap ditampilkan. | False |
--model , -m | str | Model GPT-3 untuk digunakan untuk prediksi awal. | "text-davinci-003" |
--prompt_path , -p | Jalur | Jalur ke template prompt .jinja2 . | ./templates/ner_prompt.jinja2 |
--examples-path , -e | Jalur | Jalur ke contoh untuk membantu menentukan tugas. File dapat berupa .yml, .yaml atau .json. Jika diatur ke None , pembelajaran zero-shot diterapkan. | None |
--max-examples , -n | int | Jumlah contoh maksimal untuk dimasukkan ke dalam prompt ke openai. Jika diatur ke 0, pembelajaran zero-shot selalu diterapkan, bahkan ketika contoh tersedia. | 2 |
--batch-size , -b | int | Ukuran batch kueri untuk dikirim ke API OpenAI. | 10 |
--verbose , -v | bool | Bendera untuk mencetak informasi tambahan ke terminal. | False |
Katakanlah kami ingin mengenali hidangan, bahan, dan peralatan memasak dari beberapa teks yang kami peroleh dari subreddit memasak. Kami akan mengirimkan teks ke GPT-3, yang diselenggarakan oleh Openai, dan memberikan prompt anotasi untuk menjelaskan kepada model bahasa jenis prediksi yang kami inginkan. Sesuatu seperti:
From the text below, extract the following entities in the following format:
dish: <comma delimited list of strings>
ingredient: <comma delimited list of strings>
equipment: <comma delimited list of strings>
Text:
...
Kami mendefinisikan definisi prompt ini dalam file .jinja2 yang juga menjelaskan cara menambahkan contoh untuk beberapa pembelajaran shot. Anda dapat membuat templat Anda sendiri dan menyediakannya ke resep dengan opsi --prompt-path atau -p . Selain itu, dengan --examples-path atau -e Anda dapat mengatur jalur file file .y (a) ml atau .json yang berisi contoh tambahan:
python -m prodigy ner.openai.correct my_ner_data ./data/reddit_r_cooking_sample.jsonl " dish,ingredient,equipment " -p ./templates/ner_prompt.jinja2 -e ./examples/ner.yaml -n 2 -F ./recipes/openai_ner.pySetelah menerima hasil dari API OpenAI, resep ajaib mengubah prediksi menjadi tugas anotasi yang dapat diberikan dengan keajaiban. Tugas bahkan menunjukkan prompt asli serta jawaban mentah yang kami peroleh dari model bahasa.

Di sini, kita melihat bahwa model dapat dengan benar mengenali hidangan, bahan, dan peralatan memasak sejak awal!
Resep ini juga menawarkan opsi --verbose atau -v yang mencakup prompt dan respons yang tepat di terminal saat lalu lintas diterima. Perhatikan bahwa karena permintaan API dikumpulkan, Anda mungkin harus menggulir kembali sedikit untuk menemukan prompt saat ini.
Pada titik tertentu, Anda mungkin melihat kesalahan dalam prediksi model bahasa Openai. Misalnya, kami melihat kesalahan dalam pengakuan peralatan memasak dalam contoh ini:

Jika Anda melihat kesalahan sistematis semacam ini, Anda dapat mengarahkan prediksi ke arah yang benar dengan memperbaiki contoh dan kemudian memilih ikon "bendera" kecil di kanan atas UI ajaib:

Setelah Anda menekan ACCECT pada antarmuka Prodigy, contoh yang ditandai akan secara otomatis diambil dan ditambahkan ke contoh yang dikirim ke API Openai sebagai bagian dari prompt.
Catatan
Karena Prodigy batchs permintaan ini, prompt akan diperbarui dengan sedikit penundaan, setelah batch prompt berikutnya dikirim ke OpenAi. Anda dapat bereksperimen dengan membuat ukuran batch (--batch-sizeatau-b) lebih kecil agar perubahan mulai berlaku lebih cepat, tetapi ini mungkin berdampak negatif pada kecepatan alur kerja anotasi.
ner.openai.fetch : ambil contoh di muka Resep ner.openai.correct mengambil contoh dari openai saat anotasi, tetapi kami juga menyertakan resep yang dapat mengambil sejumlah besar contoh di muka.
python -m prodigy ner.openai.fetch input_data.jsonl predictions.jsonl " dish,ingredient,equipment " -F ./recipes/ner.py Ini akan membuat file predictions.jsonl yang dapat dimuat dengan resep ner.manual .
Perhatikan bahwa API OpenAI mungkin mengembalikan kesalahan "429 terlalu banyak permintaan" saat meminta terlalu banyak data sekaligus - dalam hal ini yang terbaik adalah memastikan Anda hanya meminta 100 atau lebih contoh sekaligus.
Setelah Anda membuat sekumpulan prediksi, Anda dapat mengekspor hasilnya dengan db-out :
python -m prodigy db-out my_ner_data > ner_data.jsonlFormat anotasi yang diekspor berisi semua data yang Anda butuhkan untuk melatih model yang lebih kecil di hilir. Setiap contoh dalam dataset berisi teks asli, token, anotasi rentang yang menunjukkan entitas, dll.
Anda juga dapat mengekspor data ke format biner Spacy, menggunakan data-to-spacy . Format ini memungkinkan Anda memuat anotasi sebagai objek Doc Spacy, yang dapat nyaman untuk konversi lebih lanjut. Perintah data-to-spacy juga memudahkan untuk melatih model NER dengan spacy. Pertama, Anda mengekspor data, menentukan data kereta api sebagai 20% dari total:
python -m prodigy data-to-spacy ./data/annotations/ --ner my_ner_data -es 0.2Kemudian Anda dapat melatih model dengan spacy atau ajaib:
python -m spacy train ./data/annotations/config.cfg --paths.train ./data/annotations/train.spacy --paths.dev ./data/annotations/dev.spacy -o ner-model Ini akan menyimpan model ke ner-model/ direktori.
Kami juga telah menyertakan skrip eksperimental untuk dimuat dalam format biner .spacy dan melatih model dengan perpustakaan Huggingface transformers . Anda dapat menggunakan data yang sama yang baru saja Anda ekspor dan jalankan skrip seperti ini:
# First you need to install the HuggingFace library and requirements
pip install -r requirements_train.txt
python ./scripts/train_hf_ner.py ./data/annotations/train.spacy ./data/annotations/dev.spacy -o hf-ner-model Model yang dihasilkan akan disimpan ke hf-ner-model/ direktori.
textcat.openai.correct : Anotasi TextCat dengan Pembelajaran Zero- atau beberapa-shotResep ini memungkinkan kami untuk mengklasifikasikan teks lebih cepat dengan bantuan model bahasa besar. Ini juga memberikan "alasan" untuk menjelaskan mengapa label tertentu dipilih.
python -m prodigy textcat.openai.correct dataset filepath labels [--options] -F ./recipes/openai_textcat.py| Argumen | Jenis | Keterangan | Bawaan |
|---|---|---|---|
dataset | str | Dataset Prodigy untuk menyimpan anotasi. | |
filepath | Jalur | Jalur ke data .jsonl ke anotasi. Data setidaknya harus berisi bidang "text" . | |
labels | str | Daftar yang dipisahkan koma yang mendefinisikan label kategorisasi teks yang harus diprediksi oleh model. | |
--lang , -l | str | Bahasa data input - akan digunakan untuk mendapatkan tokenizer yang relevan. | "en" |
--segment , -S | bool | Bendera untuk diatur ketika contoh harus dibagi menjadi kalimat. Secara default, artikel input lengkap ditampilkan. | False |
--model , -m | str | Model GPT-3 untuk digunakan untuk prediksi awal. | "text-davinci-003" |
--prompt-path , -p | Jalur | Jalur ke template prompt .jinja2 . | ./templates/textcat_prompt.jinja2 |
--examples-path , -e | Jalur | Jalur ke contoh untuk membantu menentukan tugas. File dapat berupa .yml, .yaml atau .json. Jika diatur ke None , pembelajaran zero-shot diterapkan. | None |
--max-examples , -n | int | Jumlah contoh maksimal untuk dimasukkan ke dalam prompt ke openai. Jika diatur ke 0, pembelajaran zero-shot selalu diterapkan, bahkan ketika contoh tersedia. | 2 |
--batch-size , -b | int | Ukuran batch kueri untuk dikirim ke API OpenAI. | 10 |
--exclusive-classes , -E | bool | Bendera untuk membuat tugas klasifikasi eksklusif. | False |
--verbose , -v | bool | Bendera untuk mencetak informasi tambahan ke terminal. | False |
Resep textcat dapat digunakan untuk kategorisasi teks biner, multiklas, dan multilabel. Anda dapat mengatur ini dengan melewati jumlah label yang sesuai dalam parameter --labels ; Misalnya, melewati satu label mengubahnya menjadi klasifikasi biner dan sebagainya. Kami akan berbicara tentang masing -masing di bagian persidangan.
Misalkan kita ingin tahu apakah komentar Reddit tertentu berbicara tentang resep makanan. Kami akan mengirimkan teks ke GPT-3 dan memberikan prompt yang menginstruksikan prediksi yang kami inginkan.
From the text below, determine wheter or not it contains a recipe. If it is a
recipe, answer "accept." If it is not a recipe, answer "reject."
Your answer should only be in the following format:
answer: <string>
reason: <string>
Text:
Untuk klasifikasi biner, kami ingin GPT-3 mengembalikan "Terima" jika teks yang diberikan adalah resep makanan dan "menolak" sebaliknya. Saran GPT-3 kemudian ditampilkan secara jelas di UI. Kami dapat menekan tombol ACCECT (CHECK MARK) untuk memasukkan teks sebagai contoh positif atau tekan tombol tolak (Cross Mark) jika itu adalah contoh negatif.
python -m prodigy textcat.openai.correct my_binary_textcat_data data/reddit_r_cooking_sample.jsonl --labels recipe -F recipes/openai_textcat.py
Sekarang, misalkan kita ingin mengklasifikasikan komentar reddit sebagai resep, umpan balik, atau pertanyaan. Kita dapat menulis prompt berikut:
Classify the text below to any of the following labels: recipe, feedback, question.
The task is exclusive, so only choose one label from what I provided.
Your answer should only be in the following format:
answer: <string>
reason: <string>
Text:
Kemudian, kita dapat menggunakan resep ini untuk menangani kasus multilabel dan multiclass dengan meneruskan tiga label ke parameter --labels . Kita juga harus mengatur bendera --exclusive-classes untuk membuat UI pilihan tunggal:
python -m prodigy textcat.openai.correct my_multi_textcat_data data/reddit_r_cooking_sample.jsonl
--labels recipe,feedback,question
--exclusive-classes
-F recipes/openai_textcat.py
Kami menulis prompt ini sebagai template .Jinja2 yang juga dapat mengambil contoh untuk pembelajaran beberapa shot. Anda dapat membuat templat Anda sendiri dan menyediakannya ke resep dengan opsi --prompt-path atau -p . Selain itu, dengan --examples-path atau -e Anda dapat mengatur jalur file file .y (a) ml atau .json yang berisi contoh tambahan. Anda juga dapat menambahkan konteks dalam contoh -contoh ini karena kami mengamatinya untuk meningkatkan output:
python -m prodigy textcat.openai.correct my_binary_textcat_data
./data/reddit_r_cooking_sample.jsonl
--labels recipe
--prompt-path ./templates/textcat_prompt.jinja2
--examples-path ./examples/textcat_binary.yaml -n 2
-F ./recipes/openai_textcat.py Mirip dengan resep NER, resep ini juga mengubah prediksi menjadi tugas anotasi yang dapat diberikan dengan keajaiban. Untuk klasifikasi biner, kami menggunakan antarmuka classification dengan elemen HTML khusus, sedangkan untuk kategorisasi teks multilabel atau multiclass, kami menggunakan antarmuka anotasi choice . Perhatikan bahwa kami menyertakan prompt asli dan respons openai di UI.
Terakhir, Anda dapat menggunakan bendera --verbose atau -v untuk menunjukkan prompt dan respons yang tepat di terminal. Perhatikan bahwa karena permintaan API dikumpulkan, Anda mungkin harus menggulir kembali sedikit untuk menemukan prompt saat ini.
Mirip dengan resep NER, Anda juga dapat mengarahkan prediksi ke arah yang benar dengan mengoreksi contoh dan kemudian memilih ikon "bendera" kecil di kanan atas UI Prodigy:

Setelah Anda menekan tombol ACCECT pada antarmuka Prodigy, contoh yang ditandai akan diambil dan ditambahkan ke beberapa contoh tembakan yang dikirim ke API Openai sebagai bagian dari prompt.
Catatan
Karena Prodigy batchs permintaan ini, prompt akan diperbarui dengan sedikit penundaan, setelah batch prompt berikutnya dikirim ke OpenAi. Anda dapat bereksperimen dengan membuat ukuran batch (--batch-sizeatau-b) lebih kecil agar perubahan mulai berlaku lebih cepat, tetapi ini mungkin berdampak negatif pada kecepatan alur kerja anotasi.
textcat.openai.fetch : Ambil contoh kategorisasi teks di muka Resep textcat.openai.fetch memungkinkan kita untuk mengambil sejumlah besar contoh di muka. Ini sangat membantu ketika Anda dengan data yang sangat tidak seimbang dan hanya tertarik pada contoh-contoh langka.
python -m prodigy textcat.openai.fetch input_data.jsonl predictions.jsonl --labels Recipe -F ./recipes/openai_textcat.py Ini akan membuat file predictions.jsonl yang dapat dimuat dengan resep textcat.manual .
Perhatikan bahwa API OpenAI mungkin mengembalikan kesalahan "429 terlalu banyak permintaan" saat meminta terlalu banyak data sekaligus - dalam hal ini yang terbaik adalah memastikan Anda hanya meminta 100 atau lebih contoh sekaligus dan lihat batas tarif API.
Resep textcat.openai.fetch cocok untuk bekerja dengan set data di mana ada ketidakseimbangan kelas yang parah. Biasanya, Anda ingin menemukan contoh kelas langka daripada anotasi sampel acak. Dari sana, Anda ingin memberi contoh untuk melatih model yang layak dan sebagainya.
Di sinilah model bahasa besar seperti Openai mungkin membantu.
Menggunakan dataset Reddit R/memasak, kami meminta OpenAi untuk mencari komentar yang menyerupai resep makanan. Alih -alih menganotasi 10.000 contoh, kami menjalankan textcat.openai.fetch dan memperoleh 145 kelas positif. Dari 145 contoh itu, 114 ternyata positif (presisi 79%). Kami kemudian memeriksa 1.000 contoh negatif dan menemukan 12 kasus negatif palsu (penarikan 98%).
Idealnya, begitu kami sepenuhnya menganotasi dataset, kami dapat melatih model yang diawasi yang lebih baik untuk digunakan daripada mengandalkan prediksi nol-shot untuk produksi. Biaya berjalan rendah dan lebih mudah dikelola.
Setelah Anda membuat sekumpulan prediksi, Anda dapat mengekspor hasilnya dengan db-out :
python -m prodigy db-out my_textcat_data > textcat_data.jsonlFormat anotasi yang diekspor berisi semua data yang Anda butuhkan untuk melatih model yang lebih kecil di hilir. Setiap contoh dalam dataset berisi teks asli, token, anotasi rentang yang menunjukkan entitas, dll.
Anda juga dapat mengekspor data ke format biner Spacy, menggunakan data-to-spacy . Format ini memungkinkan Anda memuat anotasi sebagai objek Doc Spacy, yang dapat nyaman untuk konversi lebih lanjut. Perintah data-to-spacy juga memudahkan untuk melatih model kategorisasi teks dengan spacy. Pertama, Anda mengekspor data, menentukan data kereta api sebagai 20% dari total:
# For binary textcat
python -m prodigy data-to-spacy ./data/annotations/ --textcat my_textcat_data -es 0.2
# For multilabel textcat
python -m prodigy data-to-spacy ./data/annotations/ --textcat-multilabel my_textcat_data -es 0.2Kemudian Anda dapat melatih model dengan spacy atau ajaib:
python -m spacy train ./data/annotations/config.cfg --paths.train ./data/annotations/train.spacy --paths.dev ./data/annotations/dev.spacy -o textcat-model Ini akan menyimpan model ke textcat-model/ Direktori.
terms.openai.fetch : Ambil frasa dan istilah berdasarkan kueriResep ini menghasilkan istilah dan frasa yang diperoleh dari model bahasa besar. Istilah -istilah ini dapat dikuratori dan diubah menjadi file pola, yang dapat membantu dengan tugas anotasi hilir.
python -m prodigy terms.openai.fetch query filepath [--options] -F ./recipes/openai_terms.py| Argumen | Jenis | Keterangan | Bawaan |
|---|---|---|---|
query | str | Permintaan untuk dikirim ke openai | |
output_path | Jalur | Jalur untuk menyimpan output | |
--seeds , -s | str | Satu atau lebih frasa benih yang dipisahkan koma. | "" |
--n , -n | int | Jumlah item minimum yang akan dihasilkan | 100 |
--model , -m | str | Model GPT-3 untuk digunakan untuk penyelesaian | "text-davinci-003" |
--prompt-path , -p | Jalur | Jalur ke template prompt jinja2 | templates/terms_prompt.jinja2 |
--verbose , -v | bool | Cetak Informasi Ekstra ke Terminal | False |
--resume , -r | bool | Lanjutkan dengan memuat contoh teks dari file output | False |
--progress , -pb | bool | Cetak kemajuan resep. | False |
--temperature , -t | mengambang | Param Suhu OpenAI | 1.0 |
--top-p , --tp | mengambang | OpenAI TOP_P PARAM | 1.0 |
--best-of , -bo | int | Openai Best_of Param " | 10 |
--n-batch , -nb | int | Param ukuran batch openai | 10 |
--max-tokens , -mt | int | Max Token untuk menghasilkan per panggilan | 100 |
Misalkan Anda tertarik untuk mendeteksi trik skateboard dalam teks, maka Anda mungkin ingin memulai dengan daftar trik yang diketahui. Anda mungkin ingin memulai dengan kueri berikut:
# Base behavior, fetch at least 100 terms/phrases
python -m prodigy terms.openai.fetch " skateboard tricks " tricks.jsonl --n 100 --prompt-path templates/terms_prompt.jinja2 -F recipes/openai_terms.pyIni akan menghasilkan prompt untuk openai yang meminta untuk mencoba dan menghasilkan setidaknya 100 contoh "trik skateboard". Ada batas atas untuk jumlah token yang dapat dihasilkan oleh Openai, tetapi resep ini akan mencoba dan terus mengumpulkan persyaratan sampai mencapai jumlah yang ditentukan.
Anda dapat memilih untuk membuat kueri lebih rumit jika Anda ingin mencoba menjadi lebih tepat, tetapi Anda juga dapat memilih untuk menambahkan beberapa istilah benih melalui --seeds . Ini akan bertindak sebagai contoh awal untuk membantu mengarahkan Openai ke arah yang benar.
# Base behavior but with seeds
python -m prodigy terms.openai.fetch " skateboard tricks " tricks.jsonl --n 100 --seeds " kickflip,ollie " --prompt-path templates/terms_prompt.jinja2 -F recipes/openai_terms.py Mengumpulkan banyak contoh dapat memakan waktu, sehingga dapat membantu untuk menunjukkan kemajuan, melalui --progress saat permintaan dikirim.
# Adding progress output as we wait for 500 examples
python -m prodigy terms.openai.fetch " skateboard tricks " tricks.jsonl --n 500 --progress --seeds " kickflip,ollie " --prompt-path templates/terms_prompt.jinja2 -F recipes/openai_terms.pySetelah mengumpulkan beberapa contoh, Anda mungkin ingin menghasilkan lebih banyak. Anda dapat memilih untuk melanjutkan dari file output sebelumnya. Ini secara efektif akan menggunakan kembali contoh-contoh itu sebagai benih untuk prompt ke openai.
# Use the `--resume` flag to re-use previous examples
python -m prodigy terms.openai.fetch " skateboard tricks " tricks.jsonl --n 50 --resume --prompt-path templates/terms_prompt.jinja2 -F recipes/openai_terms.py Ketika resep selesai, Anda akan memiliki file tricks.jsonl yang memiliki konten yang terlihat seperti ini:
{ "text" : " pop shove it " , "meta" :{ "openai_query" : " skateboard tricks " }}
{ "text" : " switch flip " , "meta" :{ "openai_query" : " skateboard tricks " }}
{ "text" : " nose slides " , "meta" :{ "openai_query" : " skateboard tricks " }}
{ "text" : " lazerflip " , "meta" :{ "openai_query" : " skateboard tricks " }}
{ "text" : " lipslide " , "meta" :{ "openai_query" : " skateboard tricks " }}
... Anda sekarang memiliki file tricks.jsonl di disk yang berisi trik skateboard, tetapi Anda tidak dapat berasumsi bahwa semua ini akan akurat. Langkah selanjutnya adalah meninjau istilah dan Anda dapat menggunakan resep textcat.manual yang disertai dengan keajaiban untuk itu.
# The tricks.jsonl was fetched from OpenAI beforehand
python -m prodigy textcat.manual skateboard-tricks-list tricks.jsonl --label skateboard-tricksIni menghasilkan antarmuka yang terlihat seperti ini:

Anda dapat secara manual menerima atau menolak setiap contoh dan ketika Anda selesai anotasi, Anda dapat mengekspor teks yang beranotasi ke dalam file pola melalui resep. terms.to-patterns .
# Generate a `patterns.jsonl` file.
python -m prodigy terms.to-patterns skateboard-tricks-list patterns.jsonl --label skateboard-tricks --spacy-model blank:en Saat resep selesai, Anda akan memiliki file patterns.jsonl yang memiliki konten yang terlihat seperti ini:
{ "label" : " skateboard-tricks " , "pattern" :[{ "lower" : " pop " },{ "lower" : " shove " },{ "lower" : " it " }]}
{ "label" : " skateboard-tricks " , "pattern" :[{ "lower" : " switch " },{ "lower" : " flip " }]}
{ "label" : " skateboard-tricks " , "pattern" :[{ "lower" : " nose " },{ "lower" : " slides " }]}
{ "label" : " skateboard-tricks " , "pattern" :[{ "lower" : " lazerflip " }]}
{ "label" : " skateboard-tricks " , "pattern" :[{ "lower" : " lipslide " }]}
...Openai memiliki batasan keras pada ukuran cepat. Anda tidak dapat memiliki prompt lebih besar dari 4079 token. Sayangnya itu berarti ada batasan untuk ukuran daftar istilah yang dapat Anda hasilkan. Resep ini akan melaporkan kesalahan saat ini terjadi, tetapi baik untuk menyadari keterbatasan ini.
ab.openai.prompts : A/B Evaluasi permintaanTujuan dari resep ini adalah untuk dengan cepat memungkinkan seseorang membandingkan kualitas output dari dua petunjuk dengan cara yang dapat diukur dan buta.
python -m prodigy ab.openai.prompts dataset inputs_path display_template_path prompt1_template_path prompt2_template_path [--options] -F ./recipes/openai_ab.py| Argumen | Jenis | Keterangan | Bawaan |
|---|---|---|---|
dataset | str | Dataset Prodigy untuk menyimpan jawaban | |
inputs_path | Jalur | Jalur ke input jsonl | |
display_template_path | Jalur | Template untuk merangkum argumen | |
prompt1_template_path | Jalur | Jalur ke template prompt jinja2 pertama | |
prompt2_template_path | Jalur | Jalur ke template prompt jinja2 kedua2 | |
--model , -m | str | Model GPT-3 untuk digunakan untuk penyelesaian | "text-davinci-003" |
--batch-size , -b | int | Ukuran batch untuk dikirim ke API Openai | 10 |
--verbose , -v | bool | Cetak Informasi Ekstra ke Terminal | False |
--no-random , -NR | bool | Jangan mengacak anotasi mana yang ditampilkan sebagai benar | False |
--repeat , -r | int | Seberapa sering mengirim prompt yang sama ke openai | 1 |
Sebagai contoh, mari kita coba menghasilkan haikus lucu. Untuk melakukan itu, pertama -tama kita harus membangun dua file Jinja yang mewakili prompt untuk dikirim ke OpenAi.
templates/ab/prompt1.jinja2 Write a haiku about {{topic}}.
templates/ab/prompt2.jinja2 Write an incredibly hilarious haiku about {{topic}}. So funny!
Anda dapat memberikan variabel untuk petunjuk ini dengan membangun file .jsonl dengan parameter yang diperlukan. Dalam hal ini kita perlu memastikan bahwa {{topic}} diperhitungkan.
Berikut adalah contoh file .jsonl yang bisa berfungsi.
data/ab_example.jsonl{ "id" : 0 , "prompt_args" : { "topic" : " star wars " }}
{ "id" : 0 , "prompt_args" : { "topic" : " kittens " }}
{ "id" : 0 , "prompt_args" : { "topic" : " the python programming language " }}
{ "id" : 0 , "prompt_args" : { "topic" : " maths " }}Catatan
Semua argumen di bawah
prompt_argsakan diteruskan untuk membuat templat Jinja.idwajib dan dapat digunakan untuk mengidentifikasi kelompok dalam analisis selanjutnya.
Kami hampir siap untuk dievaluasi, tetapi resep ini membutuhkan satu template Jinja2 terakhir. Yang ini tidak akan digunakan untuk menghasilkan prompt, tetapi akan menghasilkan judul yang berguna yang mengingatkan annotator dari tugas saat ini. Berikut adalah contoh dari templat semacam itu.
templates/ab/input.jinja2 A haiku about {{topic}}.
Ketika Anda menyatukan semua templat ini, Anda dapat mulai beranotasi. Perintah di bawah ini memulai antarmuka anotasi dan juga menggunakan opsi --repeat 4 . Ini akan memastikan bahwa setiap topik akan digunakan untuk menghasilkan prompt setidaknya 4 kali.
python -m prodigy ab.openai.prompts haiku data/ab_example.jsonl templates/ab/input.jinja2 templates/ab/prompt1.jinja2 templates/ab/prompt2.jinja2 --repeat 5 -F recipes/openai_ab.py
Inilah yang terlihat seperti antarmuka anotasi:

Saat Anda melihat antarmuka ini, Anda akan melihat bahwa templat judul diberikan dan Anda dapat memilih dari dua opsi. Kedua opsi tersebut adalah tanggapan dari OpenAI yang dihasilkan oleh dua templat cepat. Anda juga dapat melihat prompt_args yang diberikan di sudut kanan bawah menu Pilihan.
Dari sini Anda dapat memberi anotasi contoh favorit Anda dan mengumpulkan data yang mungkin membantu Anda memutuskan prompt mana yang terbaik.
Setelah selesai beranotasi, Anda akan disajikan dengan ikhtisar hasilnya.
=========================== Evaluation results ===========================
✔ You preferred prompt1.jinja2
prompt1.jinja2 11
prompt2.jinja2 5
Tetapi Anda juga dapat mengambil anotasi mentah dari database untuk analisis lebih lanjut.
python -m prodigy db-out haiku
Ada banyak percobaan tindak lanjut yang menarik untuk ini, dan banyak cara untuk mengadaptasi ide dasar dengan berbagai tugas atau set data. Kami juga tertarik untuk mencoba permintaan yang berbeda. Tidak jelas seberapa besar format anotasi yang diminta dapat mengubah prediksi model, atau apakah ada prompt yang lebih pendek yang mungkin berkinerja baik. Kami juga ingin menjalankan beberapa eksperimen ujung ke ujung.