Skip to content

few-shot 예제와 프롬프트 개선에 대한 이슈 #43

@o-heat

Description

@o-heat

#32 의 3번, 4번 개발에 대해 진행을 해봤습니다.

3번. Few-shot 예제 확장 실험
현 문제점: 기존에는 예시 .po 파일에서 2개의 예시를 랜덤으로 뽑아 사용했습니다.
이 방식은 실행할 때마다 결과가 다르고, 번역에 도움이 되지 않는 예시가 뽑힐 수 있는 문제가 있었습니다.

시도한 방법들

  1. 모범 예시 문서를 통째로 전달
    현재 스크립트는 msgid 하나마다 AI를 새로 호출합니다.
    이때마다 예시 파일 전체를 전달할 경우, AI가 처리하는 텍스트가 너무 많아져 속도가 매우 느려집니다.

  2. AI에게 처음에만 모범 예시 전체 학습
    현재 사용하는 ollama에서 AI는 이전 대화를 기억하지 못합니다.
    이 방식을 쓰려면 첫 호출 후 연결을 끊지 않은 상태로 수십~수백 개의 번역을 순차적으로 시켜야 합니다.
    Feature/Translate 개발 방향 #32 의 2번과 같은 내용 같습니다.
    또한 현재까지의 구조를 완전히 고쳐야 할지, AI 기억 용량에 맞을지 등과 같은 고민이 생기고,
    만약 POT 전체 번역 구조 개편 제안 (related to #32 - 2.) #42 의 batch 방식을 채택하게 된다면 이 방식은 사용하지 못하지 않을까 싶습니다.

  3. AI가 예시 파일을 요약해서 저장 후 사용
    llama3:2b, llama3:8b 같은 모델에게 예시 파일 전체를 주고, 문맥/어투/규칙을 요약해서 프롬프트를 만들어달라고 여러 번 지시해봤습니다.
    AI가 이 작업을 제대로 이해하지 못하고, 지금까지 만든 프롬프트 같은 규칙이 아닌, 두루뭉술한 감상평이나 분석만 생성해 품질 향상에 도움이 되는 결과를 받지 못했습니다.
    예시 .po 파일 자체가 하나의 통일된 스토리가 아니라, 각기 다른 시점의 오류 수정이나 패치가 모인 것이기 때문에, AI가 이걸 하나의 문맥으로 이해하고 요약/분석하기 어려웠던 것으로 보입니다.

  4. 랜덤 선택을 고정 선택으로 변경
    앞선 방식들의 한계와 어려움에 따라, 우선은 .po에서 랜덤으로 선택하는 것을 고정해서 선택하는 것으로 바꾸어 보았습니다.
    이 경우, 50여 개 언어의 모범 예시를 누가, 어떤 기준으로 고를 것인가? 라고 하는 문제가 생길 수 있습니다.

    한국어를 포함한 핵심 언어들의 모범 예시는 직접 선정하고, 이외 언어들은 기존 예시 .po 파일의 상위 2~5개를 가져오도록 하거나, 언어별 특화 프롬프트와 같이 오픈소스 형식으로 유저가 기여할 수 있게 하도록 해야 할 필요성이 있습니다.

4번. 프롬프트 테스트
기존 프롬프트를 기준으로 수정을 하며 가장 좋은 품질을 보여줬던 것을 선택했습니다.

  • 다른 프로젝트에서 사용했던 AI 프롬프트에서 착안하여, 프롬프트를 구조화했습니다.

    규칙들을 종류에 따라 명확히 그룹화하여 AI가 지시를 더 잘 이해하도록 했습니다.

  • 번역할 때마다 GLOSSARY의 단어 모두 탐색하며 일치하는 단어를 찾던 구조를 수정했습니다.

    번역할 때마다 전체 GLOSSARY를 전달하도록 수정했습니다.

  • 이외 발생하는 오류(외국어 등장, 같은 말 반복, 번역하면 안되는 변수나 태그를 번역)를 잡기 위한 규칙을 추가했습니다.

    그럼에도, 여전히 외국어 등의 오류는 등장하긴 합니다.

최종적으로, 기존 결과와, 위의 고정 선택/개선 프롬프트를 적용한 결과의 비교입니다. (i18n-docs-source-locale.pot)

Pairs=274 | Avg=0.7853 | Med=0.8591 | ≥0.8 = 64.60% (기존 프롬프트, 랜덤 entry 2개) 1024초 소요
Pairs=274 | Avg=0.8264 | Med=0.8780 | ≥0.8 = 71.17% (개선 프롬프트, 고정 entry 2개) 767초 소요

예시의 개수를 늘리거나 추후 batch 방식과 합친다면 조금 더 향상될 수도 있을 것 같습니다.

개선할 점이나 다른 의견이 있으시다면 알려주세요!

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Type

No fields configured for Task.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions