ChatGPT juga telah menunjukkan kemampuannya sebagai penerjemah yang kuat, mampu menangani tidak hanya bahasa umum, tetapi juga bentuk penulisan yang tidak konvensional seperti emoji dan perebutan kata. Namun, itu mungkin tidak selalu menghasilkan output deterministik dan mematuhi korelasi garis-ke-garis, berpotensi mengganggu waktu subtitle, bahkan ketika diinstruksikan untuk mengikuti instruksi yang tepat dan mengatur parameter temperature model ke 0 .
Utilitas ini menggunakan Openai ChatGPT API untuk menerjemahkan teks, dengan fokus khusus pada terjemahan berbasis garis, terutama untuk subtitle SRT. Penerjemah mengoptimalkan penggunaan token dengan menghapus overhead SRT, mengelompokkan teks menjadi batch, menghasilkan terjemahan panjang sewenang-wenang tanpa konsumsi token yang berlebihan sambil memastikan kecocokan satu-ke-satu antara input dan output garis.
--experimental-structured-mode .--experimental-use-full-context (hanya CLI).Referensi: https://github.com/openai/openai-quickstart-node#setup
>= 16.13.0 Diperlukan. Readme ini mengasumsikan lingkungan shell bashgit clone https://github.com/Cerlancism/chatgpt-subtitle-translator && cd chatgpt-subtitle-translatornpm installchmod +x cli/translator.mjs.example.env ke .env cp .env.example .env.env yang baru dibuat cli/translator.mjs --help
Usage: translator [options]
Translation tool based on ChatGPT API
Opsi:
--from <language>
Bahasa sumber (default: "")
--to <language>
Bahasa target (default: "bahasa Inggris")
-i, --input <file>
Input Sumber Teks dengan konten file ini, dalam format .srt atau teks biasa
-o, --output <file>
Nama file output, default untuk didasarkan pada nama file input
-p, --plain-text <text>
Input Sumber Teks dengan argumen teks biasa ini
-s, --system-instruction <instruction>
Ganti Template Instruksi Sistem Prompt Translate ${from} to ${to} dengan teks biasa ini, mengabaikan --from dan --to opsi
--initial-prompts <prompts>
Permintaan awal untuk terjemahan di JSON (default: "[]" )
--no-use-moderator
Jangan gunakan titik akhir moderasi API openai
--moderation-model
(default: "omni-moderation-latest" ) https://platform.openai.com/docs/models/moderation
--no-prefix-number
Jangan awalan baris dengan indeks numerik
--no-line-matching
Jangan menegakkan satu hingga satu baris pencocokan output input kuantitas
-l, --history-prompt-length <length>
Panjang riwayat prompt untuk dipertahankan untuk batch permintaan berikutnya (default: 10)
-b, --batch-sizes <sizes> Ukuran batch peningkatan pesanan untuk irisan prompt terjemahan dalam array JSON (default: "[10,100]" )
Jumlah baris yang akan dimasukkan dalam setiap prompt terjemahan, asalkan mereka diperkirakan dalam batas token. Dalam kasus jumlah garis output yang tidak cocok, angka ini akan menurun langkah demi langkah sesuai dengan nilai-nilai dalam array, yang pada akhirnya mencapai satu.
Ukuran batch yang lebih besar umumnya mengarah pada pemanfaatan token yang lebih efisien dan terjemahan kontekstual yang berpotensi lebih baik. Namun, jumlah garis output yang tidak cocok atau melebihi batas token akan menyebabkan pemborosan token, yang membutuhkan pengiriman ulang batch dengan ukuran batch yang lebih kecil.
--experimental-structured-mode [mode]
Aktifkan respons terstruktur. (default: array , array pilihan, object )
--experimental-structured-mode array Struktur input dan output ke dalam format array biasa. Opsi ini lebih ringkas dibandingkan dengan mode dasar, meskipun menggunakan sedikit lebih banyak token per batch.--experimental-structured-mode object Baik input dan output ke dalam skema objek yang dihasilkan secara dinamis berdasarkan nilai input. Opsi ini bahkan lebih ringkas dan menggunakan token yang lebih sedikit, tetapi membutuhkan ukuran batch yang lebih kecil dan bisa lambat dan tidak dapat diandalkan. Karena tidak dapat diandalkan, hal itu dapat menyebabkan lebih banyak pengiriman ulang, berpotensi membuang -buang lebih banyak token dalam proses tersebut. --experimental-use-full-context
Sertakan konteks lengkap data yang diterjemahkan agar bekerja dengan baik dengan caching yang cepat.
Baris yang diterjemahkan per pengguna dan pasangan pesan asisten diiris sebagaimana didefinisikan oleh --history-prompt-length (secara default --history-prompt-length 10 ), disarankan untuk mengatur ini ke ukuran batch terbesar (secara default --batch-sizes "[10,100]" ): --history-prompt-length 100 .
Mengaktifkan ini dapat berisiko berlari ke batas jendela konteks model, biasanya 128K , tetapi harus cukup untuk sebagian besar kasus.
--log-level <level>
Level log (default: debug , pilihan: trace , debug , info , warn , error , silent )
--silent
Sama seperti- --log-level silent
--quiet
Sama seperti- --log-level silent
Opsi tambahan untuk GPT:
-m, --model <model>"gpt-4o-mini" ) https://platform.openai.com/docs/api-reference/chat/create--stream-t, --temperature <temperature>0.3 agar lebih deterministik untuk terjemahan (default: 1 ) https://platform.openai.com/docs/api-reference/chat/create#chat-create-temperatureatureureure--top_p <top_p>--presence_penalty <presence_penalty>--frequency_penalty <frequency_penalty--logit_bias <logit_bias>cli/translator.mjs --plain-text "你好"Output standar
Hello.
cli/translator.mjs --stream --to " Emojis " --temperature 0 --plain-text " $( curl ' https://api.chucknorris.io/jokes/0ECUwLDTTYSaeFCq6YMa5A ' | jq .value ) "Argumen masukan
Chuck Norris can walk with the animals, talk with the animals; grunt and squeak and squawk with the animals... and the animals, without fail, always say 'yessir Mr. Norris'.
Output standar
????♂️??????????????️??️❗️??????=???????????????????=??.
cli/translator.mjs --stream --system-instruction " Scramble characters of words while only keeping the start and end letter " --no-prefix-number --no-line-matching --temperature 0 --plain-text " Chuck Norris can walk with the animals, talk with the animals; "Output standar
Cuhck Nroris can wakl wtih the aiamnls, talk wtih the aiamnls;
cli/translator.mjs --stream --system-instruction " Unscramble characters back to English " --no-prefix-number --no-line-matching --temperature 0 --plain-text " Cuhck Nroris can wakl wtih the aiamnls, talk wtih the aiamnls; "Output standar
Chuck Norris can walk with the animals, talk with the animals;
cli/translator.mjs --stream --temperature 0 --input test/data/test_cn.txtFile Input: Test/Data/test_cn.txt
你好。
拜拜!
Output standar
Hello.
Goodbye!
cli/translator.mjs --stream --temperature 0 --input test/data/test_ja_small.srtFile Input: Test/Data/test_ja_small.srt
1
00 : 00 : 00 , 000 --> 00 : 00 : 02 , 000
おはようございます。
2
00 : 00 : 02 , 000 --> 00 : 00 : 05 , 000
お元気ですか?
3
00 : 00 : 05 , 000 --> 00 : 00 : 07 , 000
はい、元気です。
4
00 : 00 : 08 , 000 --> 00 : 00 : 12 , 000
今日は天気がいいですね。
5
00 : 00 : 12 , 000 --> 00 : 00 : 16 , 000
はい、とてもいい天気です。File Output: Test/Data/test_ja_small.srt.out_english.srt
1
00 : 00 : 00 , 000 --> 00 : 00 : 02 , 000
Good morning.
2
00 : 00 : 02 , 000 --> 00 : 00 : 05 , 000
How are you?
3
00 : 00 : 05 , 000 --> 00 : 00 : 07 , 000
Yes, I'm doing well.
4
00 : 00 : 08 , 000 --> 00 : 00 : 12 , 000
The weather is nice today, isn' t it?
5
00 : 00 : 12 , 000 --> 00 : 00 : 16 , 000
Yes, it's very nice weather. Instruksi Sistem
Token: 5
Translate Japanese to English
| Masukan | Mengingatkan | Mengubah | Keluaran |
|---|---|---|---|
Token: | Token: | Token: | Token: |
1
00 : 00 : 00 , 000 --> 00 : 00 : 02 , 000
おはようございます。
2
00 : 00 : 02 , 000 --> 00 : 00 : 05 , 000
お元気ですか?
3
00 : 00 : 05 , 000 --> 00 : 00 : 07 , 000
はい、元気です。
4
00 : 00 : 08 , 000 --> 00 : 00 : 12 , 000
今日は天気がいいですね。
5
00 : 00 : 12 , 000 --> 00 : 00 : 16 , 000
はい、とてもいい天気です。 | | | 1
00 : 00 : 00 , 000 --> 00 : 00 : 02 , 000
Good morning.
2
00 : 00 : 02 , 000 --> 00 : 00 : 05 , 000
How are you?
3
00 : 00 : 05 , 000 --> 00 : 00 : 07 , 000
Yes, I'm doing well.
4
00 : 00 : 08 , 000 --> 00 : 00 : 12 , 000
The weather is nice today, isn' t it?
5
00 : 00 : 12 , 000 --> 00 : 00 : 16 , 000
Yes, it's very nice weather. |
TODO : Analisis Lebih
5 SRT Lines:
tes/data/test_ja_small.srt
299362276 30 SRT Lines:
tes/data/test_ja.srt
16256719[5, 10] , termasuk hingga 10 konteks prompt historis:1036