Chatgpt는 또한 공통 언어뿐만 아니라 이모티콘 및 단어 스크램블링과 같은 비 전통적인 형태의 글을 처리 할 수있는 강력한 번역기로서의 기능을 보여 주었다. 그러나 항상 결정 론적 출력을 생성하고 라인-라인 상관 관계를 준수하지는 않으며, 정확한 지침을 따르고 모델 temperature 매개 변수를 0 으로 설정하도록 지시하더라도 자막의 타이밍을 잠재적으로 방해 할 수 있습니다.
이 유틸리티는 OpenAi ChatGpt API를 사용하여 텍스트를 번역하고, 특히 SRT 자막의 경우 라인 기반 번역에 중점을 둡니다. 번역기는 SRT 오버 헤드를 제거하고 텍스트를 배치로 그룹화하여 토큰 사용량을 최적화하여 과도한 토큰 소비없이 임의의 길이 변환을 초래하면서 라인 입력과 출력 사이의 일대일 일치를 보장합니다.
--experimental-structured-mode 사용하여 CLI에서 사용할 수 있습니다.--experimental-use-full-context (CLI 만 해당).참조 : https://github.com/openai/openai-quickstart-node#setup
>= 16.13.0 필요합니다. 이 readme는 bash 쉘 환경을 가정합니다git 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 파일에 API 키 추가 cli/translator.mjs --help
Usage: translator [options]
Translation tool based on ChatGPT API
옵션 :
--from <language>
소스 언어 (기본값 : "")
--to <language>
대상 언어 (기본값 : "영어")
-i, --input <file>
이 파일의 내용으로 .srt 형식 또는 일반 텍스트의 입력 소스 텍스트
-o, --output <file>
출력 파일 이름, 입력 파일 이름을 기반으로하는 기본값
-p, --plain-text <text>
이 일반 텍스트 인수가있는 소스 텍스트를 입력하십시오
-s, --system-instruction <instruction>
프롬프트 시스템 명령 템플릿을 재정의하는 것은이 일반 텍스트를 사용하여 Translate ${from} to ${to} --to --from
--initial-prompts <prompts>
JSON의 번역에 대한 초기 프롬프트 (기본값 : "[]" )
--no-use-moderator
OpenAI API 중재 끝점을 사용하지 마십시오
--moderation-model
(기본값 : "omni-moderation-latest" ) https://platform.openai.com/docs/models/moderation
--no-prefix-number
수치 지수로 선을 접두하지 마십시오
--no-line-matching
하나에서 일대일 수량 입력 출력 일치를 시행하지 마십시오.
-l, --history-prompt-length <length>
다음 요청 배치에 대한 보유 할 신속한 기록 길이 (기본값 : 10)
-b, --batch-sizes <sizes> JSON 배열에서 번역 프롬프트 슬라이스 증가 순서의 배치 크기 (기본값 : "[10,100]" )
토큰 제한 내에서 추정되는 경우 각 번역 프롬프트에 포함 할 라인 수. 일치하지 않는 출력 라인 수량의 경우이 숫자는 배열의 값에 따라 단계별로 줄어들어 궁극적으로 도달합니다.
더 큰 배치 크기는 일반적으로보다 효율적인 토큰 사용률과 잠재적으로 더 나은 상황 번역으로 이어집니다. 그러나 일치하지 않는 출력 라인 수량 또는 토큰 한계를 초과하면 토큰 낭비가 발생하여 배치 크기가 더 작은 배치를 다시 제출해야합니다.
--experimental-structured-mode [mode]
구조화 된 응답을 활성화합니다. (기본값 : array , 선택 array , object )
--experimental-structured-mode array 입력 및 출력을 일반 배열 형식으로 구조화합니다. 이 옵션은 기본 모드에 비해 더 간결하지만 배치 당 약간 더 많은 토큰을 사용합니다.--experimental-structured-mode object 입력 값을 기반으로 동적으로 생성 된 객체 스키마로의 입력 및 출력을 모두 구조화합니다. 이 옵션은 더 간결하고 더 적은 토큰을 사용하지만 배치 크기가 작고 느리고 신뢰할 수 없을 수 있습니다. 신뢰할 수 없기 때문에 더 많은 재 포장 재정을 이끌어 낼 수 있으며, 그 과정에서 더 많은 토큰을 낭비 할 수 있습니다. --experimental-use-full-context
프롬프트 캐싱과 잘 어울리는 번역 된 데이터의 전체 컨텍스트를 포함시킵니다.
사용자 당 번역 된 라인 및 보조 메시지 쌍은 --history-prompt-length (기본적으로 --history-prompt-length 10 )에 의해 정의 된대로 슬라이스되며, 이것을 가장 큰 배치 크기 (기본적으로 --batch-sizes "[10,100]" )로 --history-prompt-length 100 좋습니다.
이를 활성화하면 모델의 컨텍스트 창 제한 (일반적으로 128K 에 걸릴 위험이 있지만 대부분의 경우 충분해야합니다.
--log-level <level>
로그 레벨 (기본값 : debug , 선택 : trace , debug , info , warn , error , silent )
--silent
--log-level silent 와 동일합니다
--quiet
--log-level silent 와 동일합니다
GPT를위한 추가 옵션 :
-m, --model <model>"gpt-4o-mini" ) https://platform.openai.com/docs/api-reference/chat/create--stream-t, --temperature <temperature>0.3 미만의 낮은 값을 번역에보다 결정적이어야합니다 (기본값 : 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 "你好"표준 출력
Hello.
cli/translator.mjs --stream --to " Emojis " --temperature 0 --plain-text " $( curl ' https://api.chucknorris.io/jokes/0ECUwLDTTYSaeFCq6YMa5A ' | jq .value ) "입력 인수
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'.
표준 출력
????♂️??????????????️??️❗️??????=???????????????????=??.
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; "표준 출력
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; "표준 출력
Chuck Norris can walk with the animals, talk with the animals;
cli/translator.mjs --stream --temperature 0 --input test/data/test_cn.txt입력 파일 : 테스트/데이터/test_cn.txt
你好。
拜拜!
표준 출력
Hello.
Goodbye!
cli/translator.mjs --stream --temperature 0 --input test/data/test_ja_small.srt입력 파일 : 테스트/데이터/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
はい、とてもいい天気です。출력 파일 : 테스트/데이터/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. 시스템 교육
토큰 : 5
Translate Japanese to English
| 입력 | 즉각적인 | 변환 | 산출 |
|---|---|---|---|
토큰 : | 토큰 : | 토큰 : | 토큰 : |
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 : 더 많은 분석
5 SRT 라인 :
테스트/데이터/test_ja_small.srt
299362276 30 개의 SRT 라인 :
테스트/데이터/test_ja.srt
16256719[5, 10] 의 SRT 스트리핑 및 라인 배치 :1036