ChatGPT también ha demostrado sus capacidades como un traductor robusto, capaz de manejar no solo idiomas comunes, sino también formas no convencionales de escritura como emojis y lucha de palabras. Sin embargo, no siempre puede producir una salida determinista y adherirse a la correlación de línea a línea, lo que puede interrumpir el momento de los subtítulos, incluso cuando se les indica que siga instrucciones precisas y configurar el parámetro temperature del modelo en 0 .
Esta utilidad utiliza la API de OpenAI CHATGPT para traducir el texto, con un enfoque específico en la traducción basada en línea, especialmente para los subtítulos SRT. El traductor optimiza el uso del token eliminando la sobrecarga de SRT, agrupando el texto en lotes, lo que resulta en traducciones de longitud arbitraria sin un consumo de token excesivo al tiempo que garantiza una coincidencia individual entre la entrada de línea y la salida.
--experimental-structured-mode .--experimental-use-full-context (solo CLI).Referencia: https://github.com/openai/openai-quickstart-node#setup
>= 16.13.0 requerido. Este readme asume un entorno de shell bashgit clone https://github.com/Cerlancism/chatgpt-subtitle-translator && cd chatgpt-subtitle-translatornpm installchmod +x cli/translator.mjs.example.env a .env cp .env.example .env.env recién creado. cli/translator.mjs --help
Usage: translator [options]
Translation tool based on ChatGPT API
Opciones:
--from <language>
Idioma de origen (predeterminado: "")
--to <language>
Idioma de destino (predeterminado: "Inglés")
-i, --input <file>
El texto de la fuente de entrada con el contenido de este archivo, en el formato .srt o texto sin formato
-o, --output <file>
Nombre del archivo de salida, los valores predeterminados se basan en el nombre del archivo de entrada
-p, --plain-text <text>
Texto de origen de entrada con este argumento de texto sin formato
-s, --system-instruction <instruction>
Anular la plantilla de instrucción del sistema de inmediato Translate ${from} to ${to} con este texto sin formato, ignorando las opciones --from y --to
--initial-prompts <prompts>
Indicaciones iniciales para la traducción en JSON (predeterminado: "[]" )
--no-use-moderator
No use el punto final de moderación de la API de OpenAI
--moderation-model
(predeterminado: "omni-moderation-latest" ) https://platform.openai.com/docs/models/moderation
--no-prefix-number
No prefije líneas con índices numéricos
--no-line-matching
No aplique la coincidencia de salida de la cantidad de cantidad de una línea de una línea
-l, --history-prompt-length <length>
Longitud del historial de aviso para retener para el próximo lote de solicitud (predeterminado: 10)
-b, --batch-sizes <sizes> tamaños de lotes de orden creciente para las cortes de traducción en la matriz JSON (predeterminado: "[10,100]" )
El número de líneas a incluir en cada mensaje de traducción, siempre que se estima dentro del límite del token. En el caso de las cantidades de línea de salida no coincidentes, este número disminuirá paso a paso de acuerdo con los valores en la matriz, llegando a uno.
Los tamaños de lotes más grandes generalmente conducen a una utilización de token más eficiente y una traducción contextual potencialmente mejor. Sin embargo, las cantidades de línea de salida no coincidentes o que exceden el límite del token causarán desperdicio de token, lo que requiere un reenvío del lote con un tamaño de lote más pequeño.
--experimental-structured-mode [mode]
Habilitar respuesta estructurada. (predeterminado: array , array de opciones, object )
--experimental-structured-mode array estructuras la entrada y la salida en un formato de matriz simple. Esta opción es más concisa en comparación con el modo base, aunque utiliza un poco más de tokens por lote.--experimental-structured-mode object tanto la entrada como la salida en un esquema de objeto generado dinámicamente en función de los valores de entrada. Esta opción es aún más concisa y usa menos tokens, pero requiere tamaños de lotes más pequeños y puede ser lento y poco confiable. Debido a su falta de fiabilidad, puede conducir a más reintentos de reenvío, potencialmente desperdiciando más tokens en el proceso. --experimental-use-full-context
Incluya el contexto completo de los datos traducidos para funcionar bien con el almacenamiento en caché rápido.
Las líneas traducidas por usuario y los pares de mensajes de asistente se cortan según lo definido por --history-prompt-length (de forma predeterminada --history-prompt-length 10 ), se recomienda establecer esto en el tamaño de lote más grande (por defecto --batch-sizes "[10,100]" ): --history-prompt-length 100 .
Habilitar esto puede correr el riesgo de llegar al límite de la ventana de contexto del modelo, generalmente 128K , pero debería ser suficiente para la mayoría de los casos.
--log-level <level>
Nivel de registro (predeterminado: debug , opciones: trace , debug , info , warn , error , silent )
--silent
Igual que --log-level silent
--quiet
Igual que --log-level silent
Opciones adicionales para GPT:
-m, --model <model>"gpt-4o-mini" ) https://platform.openai.com/docs/api-reference/chat/create--stream-t, --temperature <temperature>0.3 para ser más determinista para la traducción (predeterminado: 1 ) https://platform.openai.com/docs/api-reference/chat/create#chat-create-temperatura--top_p <top_p>--presence_penalty <presence_penalty>--frequency_penalty <frequency_penalty--logit_bias <logit_bias>cli/translator.mjs --plain-text "你好"Salida estándar
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'.
Salida estándar
????♂️??????????????️??️❗️??????=???????????????????=??.
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; "Salida estándar
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; "Salida estándar
Chuck Norris can walk with the animals, talk with the animals;
cli/translator.mjs --stream --temperature 0 --input test/data/test_cn.txtArchivo de entrada: test/data/test_cn.txt
你好。
拜拜!
Salida estándar
Hello.
Goodbye!
cli/translator.mjs --stream --temperature 0 --input test/data/test_ja_small.srtArchivo 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
はい、とてもいい天気です。Archivo de salida: 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. Instrucción del sistema
Tokens: 5
Translate Japanese to English
| Aporte | Inmediato | Transformar | Producción |
|---|---|---|---|
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 : más análisis
5 líneas SRT:
test/data/test_ja_small.srt
299362276 30 líneas SRT:
Test/Data/test_ja.srt
16256719[5, 10] , incluyendo hasta 10 contexto indicador histórico:1036