Chatgpt a également démontré ses capacités en tant que traducteur robuste, capable de gérer non seulement les langues communes, mais aussi des formes d'écriture non conventionnelles comme les emojis et les mots. Cependant, il peut ne pas toujours produire une sortie déterministe et adhérer à la corrélation liné à ligne, perturbant potentiellement le moment des sous-titres, même lorsqu'il a été invité à suivre des instructions précises et à régler le paramètre temperature du modèle à 0 .
Cet utilitaire utilise l'API Openai Chatgpt pour traduire le texte, avec une mise au point spécifique sur la traduction basée sur les lignes, en particulier pour les sous-titres SRT. Le traducteur optimise l'utilisation de jetons en supprimant les frais généraux SRT, regroupant le texte en lots, entraînant des traductions de longueur arbitraires sans consommation de jetons excessive tout en garantissant une correspondance un à un entre l'entrée de la ligne et la sortie.
--experimental-structured-mode .--experimental-use-full-context (CLI uniquement).Référence: https://github.com/openai/openai-quickstart-node#setup
>= 16.13.0 requis. Cette lecture assume un environnement de coquille bashgit clone https://github.com/Cerlancism/chatgpt-subtitle-translator && cd chatgpt-subtitle-translatornpm installchmod +x cli/translator.mjs.example.env à .env cp .env.example .env.env nouvellement créé cli/translator.mjs --help
Usage: translator [options]
Translation tool based on ChatGPT API
Options:
--from <language>
Langue source (par défaut: "")
--to <language>
Langue cible (par défaut: "anglais")
-i, --input <file>
Entrez le texte source avec le contenu de ce fichier, au format .srt ou texte brut
-o, --output <file>
Nom du fichier de sortie, par défaut pour être basé sur le nom du fichier d'entrée
-p, --plain-text <text>
Texte source d'entrée avec cet argument de texte brut
-s, --system-instruction <instruction>
Remplacez le modèle d'instructions du système invite Translate ${from} to ${to} avec ce texte brut, ignorant --from et --to options
--initial-prompts <prompts>
Invites initiales pour la traduction dans JSON (par défaut: "[]" )
--no-use-moderator
N'utilisez pas le point de terminaison de la modération de l'API OpenAI
--moderation-model
(par défaut: "omni-moderation-latest" ) https://platform.openai.com/docs/models/moderation
--no-prefix-number
Ne préfixez pas les lignes avec des indices numériques
--no-line-matching
N'appliquez pas la correspondance de sortie d'entrée de quantité d'une à une ligne
-l, --history-prompt-length <length>
Longueur de l'historique rapide pour conserver le lot de demande suivante (par défaut: 10)
-b, --batch-sizes <sizes> Tailles de lots de l'ordre croissant pour les tranches d'invite de traduction dans le tableau JSON (par défaut: "[10,100]" )
Le nombre de lignes à inclure dans chaque invite de traduction, à condition qu'ils soient estimés dans la limite de jeton. En cas de quantités de ligne de sortie incompatibles, ce nombre sera diminué étape par étape en fonction des valeurs du tableau, en atteignant finalement une.
Des tailles de lots plus importantes conduisent généralement à une utilisation de jetons plus efficace et à une traduction contextuelle potentiellement meilleure. Cependant, les quantités de ligne de sortie incompatibles ou dépassant la limite de jeton entraîneront un gaspillage de jeton, nécessitant une soumission du lot avec une taille de lot plus petite.
--experimental-structured-mode [mode]
Activer la réponse structurée. (par défaut: array , array de choix, object )
--experimental-structured-mode array structure l'entrée et la sortie dans un format de tableau simple. Cette option est plus concise par rapport au mode de base, bien qu'elle utilise un peu plus de jetons par lot.--experimental-structured-mode object structure à la fois l'entrée et la sortie dans un schéma d'objet généré dynamiquement basé sur les valeurs d'entrée. Cette option est encore plus concise et utilise moins de jetons, mais nécessite des tailles de lots plus petites et peut être lente et peu fiable. En raison de son manque de fiabilité, il peut conduire à davantage de tentatives de soumission, potentiellement gaspiller plus de jetons dans le processus. --experimental-use-full-context
Incluez le contexte complet des données traduites pour bien fonctionner avec la mise en cache rapide.
Les lignes traduites par utilisateur et les paires de messages assistantes sont tranchées telles que définies par --history-prompt-length (par défaut --history-prompt-length 10 ), il est recommandé de le définir sur la plus grande taille de lot (par défaut --batch-sizes "[10,100]" ): --history-prompt-length 100 .
Permettre à cela peut risquer de courir dans la limite de fenêtre de contexte du modèle, généralement 128K , mais devrait être suffisant pour la plupart des cas.
--log-level <level>
Niveau de journal (par défaut: debug , choix: trace , debug , info , warn , error , silent )
--silent
Identique à --log-level silent
--quiet
Identique à --log-level silent
Options supplémentaires pour GPT:
-m, --model <model>"gpt-4o-mini" ) https://platform.openai.com/docs/api-reference/chat/create--stream-t, --temperature <temperature>0.3 pour être plus déterministe pour la traduction (par défaut: 1 ) https://platform.openai.com/docs/api-reference/chat/create#chat-create-temperature--top_p <top_p>--presence_penalty <presence_penalty>--frequency_penalty <frequency_penalty--logit_bias <logit_bias>cli/translator.mjs --plain-text "你好"Sortie standard
Hello.
cli/translator.mjs --stream --to " Emojis " --temperature 0 --plain-text " $( curl ' https://api.chucknorris.io/jokes/0ECUwLDTTYSaeFCq6YMa5A ' | jq .value ) "Argument d'entrée
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'.
Sortie standard
????♂️??????????????️??️❗️??????=???????????????????=??.
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; "Sortie standard
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; "Sortie standard
Chuck Norris can walk with the animals, talk with the animals;
cli/translator.mjs --stream --temperature 0 --input test/data/test_cn.txtFichier d'entrée: test / data / test_cn.txt
你好。
拜拜!
Sortie standard
Hello.
Goodbye!
cli/translator.mjs --stream --temperature 0 --input test/data/test_ja_small.srtFichier d'entrée: 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
はい、とてもいい天気です。Fichier de sortie: 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. Instruction du système
Tokens: 5
Translate Japanese to English
| Saisir | Rapide | Transformer | Sortir |
|---|---|---|---|
Tokens: | Tokens: | Tokens: | Tokens: |
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 : plus d'analyse
5 lignes SRT:
test / data / test_ja_small.srt
299362276 30 lignes SRT:
test / data / test_ja.srt
16256719[5, 10] , y compris jusqu'à 10 contexte invite historique:1036