O ChatGPT também demonstrou seus recursos como um tradutor robusto, capaz de lidar com não apenas idiomas comuns, mas também formas não convencionais de escrita como emojis e scrambling de palavras. No entanto, nem sempre pode produzir uma saída determinística e aderir à correlação de linha a linha, potencialmente interrompendo o tempo das legendas, mesmo quando instruído a seguir instruções precisas e definir o parâmetro temperature do modelo como 0 .
Este utilitário usa a API do OpenAI-ChatGPT para traduzir o texto, com um foco específico na tradução baseada em linha, especialmente para legendas SRT. O tradutor otimiza o uso de token removendo a sobrecarga da SRT, agrupando o texto em lotes, resultando em traduções de comprimento arbitrário sem consumo excessivo de token, garantindo uma correspondência individual entre a entrada e a saída da linha.
--experimental-structured-mode .--experimental-use-full-context (somente CLI).Referência: https://github.com/openai/openai-quickstart-node#setup
>= 16.13.0 Necessário. Este ReadMe assume o ambiente bash Shellgit clone https://github.com/Cerlancism/chatgpt-subtitle-translator && cd chatgpt-subtitle-translatornpm installchmod +x cli/translator.mjs.example.env para .env cp .env.example .env.env recém -criado cli/translator.mjs --help
Usage: translator [options]
Translation tool based on ChatGPT API
Opções:
--from <language>
Linguagem de origem (padrão: "")
--to <language>
Linguagem de destino (padrão: "inglês")
-i, --input <file>
Texto de origem de entrada com o conteúdo deste arquivo, em formato .srt ou texto simples
-o, --output <file>
Nome do arquivo de saída, padrões a serem baseados no nome do arquivo de entrada
-p, --plain-text <text>
Texto de origem de entrada com este argumento de texto sem formatação
-s, --system-instruction <instruction>
Substitua o modelo de instrução do sistema imediato Translate ${from} to ${to} com este texto simples, ignorando --from e --to opções
--initial-prompts <prompts>
Prompts iniciais para a tradução em JSON (padrão: "[]" )
--no-use-moderator
Não use o terminal de moderação da API Openai
--moderation-model
(Padrão: "omni-moderation-latest" ) https://platform.openai.com/docs/models/modeation
--no-prefix-number
Não prefiga linhas com índices numéricos
--no-line-matching
Não aplique uma saída de entrada de quantidade de uma a uma linha correspondente
-l, --history-prompt-length <length>
Duração do histórico imediato para manter o próximo lote de solicitação (Padrão: 10)
-b, --batch-sizes <sizes> Tamanhos em lote de ordem crescente para fatias de prompt de tradução em JSON Array (padrão: "[10,100]" )
O número de linhas a serem incluídas em cada prompt de tradução, desde que sejam estimadas dentro do limite do token. No caso de quantidades de linha de saída incompatíveis, esse número diminuirá passo a passo de acordo com os valores da matriz, alcançando um.
Tamanhos maiores de lote geralmente levam a utilização de token mais eficiente e tradução contextual potencialmente melhor. No entanto, quantidades de linha de saída incompatíveis ou excedendo o limite do token causará desperdício de token, exigindo reenvio do lote com um tamanho menor em lote.
--experimental-structured-mode [mode]
Ativar resposta estruturada. (Padrão: array , array de opções, object )
--experimental-structured-mode array A entrada e saída em um formato de matriz simples. Esta opção é mais concisa em comparação com o modo base, embora use um pouco mais de tokens por lote.--experimental-structured-mode object tanto a entrada quanto a saída em um esquema de objeto gerado dinamicamente com base nos valores de entrada. Essa opção é ainda mais concisa e usa menos tokens, mas requer tamanhos de lote menor e pode ser lento e não confiável. Devido à sua falta de confiabilidade, isso pode levar a mais tentativas de renderização, potencialmente desperdiçando mais tokens no processo. --experimental-use-full-context
Inclua o contexto completo dos dados traduzidos para funcionar bem com o cache imediato.
As linhas traduzidas por usuário e pares de mensagens assistentes são cortadas conforme definido por --history-prompt-length (por padrão --history-prompt-length 10 ), recomenda-se definir isso no maior tamanho de lote (por padrão --batch-sizes "[10,100]" ): --history-prompt-length 100 .
Habilitar isso pode correr o risco de chegar ao limite da janela de contexto do modelo, normalmente 128K , mas deve ser suficiente para a maioria dos casos.
--log-level <level>
Nível de log (Padrão: debug , Opções: trace , debug , info , warn , error , silent )
--silent
O mesmo que --log-level silent
--quiet
O mesmo que --log-level silent
Opções adicionais para GPT:
-m, --model <model>"gpt-4o-mini" ) https://platform.openai.com/docs/api-reference/chat/create--stream-t, --temperature <temperature>0.3 como mais determinístico para a tradução (padrão: 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 "你好"Saída padrão
Hello.
cli/translator.mjs --stream --to " Emojis " --temperature 0 --plain-text " $( curl ' https://api.chucknorris.io/jokes/0ECUwLDTTYSaeFCq6YMa5A ' | jq .value ) "Argumento de entrada
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'.
Saída padrão
????♂️??????????????️??️❗️??????=???????????????????=??.
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; "Saída padrão
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; "Saída padrão
Chuck Norris can walk with the animals, talk with the animals;
cli/translator.mjs --stream --temperature 0 --input test/data/test_cn.txtArquivo de entrada: test/data/test_cn.txt
你好。
拜拜!
Saída padrão
Hello.
Goodbye!
cli/translator.mjs --stream --temperature 0 --input test/data/test_ja_small.srtArquivo de entrada: 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
はい、とてもいい天気です。Arquivo de saída: 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. Instrução do sistema
Tokens: 5
Translate Japanese to English
| Entrada | Incitar | Transformar | Saída |
|---|---|---|---|
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 : mais análise
5 linhas SRT:
teste/data/test_ja_small.srt
299362276 30 linhas SRT:
teste/data/test_ja.srt
16256719[5, 10] , incluindo até 10 contexto de imediato histórico:1036