JEJUMA-001
LLM으로 사라져가는 우리 방언 지키기 프로젝트1: 제주도 방언
왜 시작하게 되었나요?
빠르게 사라져가는 지역방언: 제주도
- 여러 지역 방언, 특히 제주도의 방언이 빠르게 사라지고 있습니다.
- 유네스코는 제주어(제주방언)을 아주 심각하게 위기에 처한 언어 로 분류했습니다.
- 제주도민 중 제주어를 아는 사람의 비율은 36.1% 에 그치고 있습니다.
- 특히, 타지역과의 교류가 활발해지면서 젊은 층에선 제주어보단 표준어를 선호하는 현상이 나타납니다.
지역방언에 약한 언어모델
- 온라인 소스는 표준어로 구성되어 있기에, 자료가 적은 지역방언을 잘 모릅니다.
- 특히 제주어는 표준어와 차이가 크기 때문에, 유명한 단어나 문장 외에는 모델이 이해할 수 없습니다.
어떻게 이를 해결했나요?
- 언어모델을 통해 어려운 제주어를 표준어로 변경하여 제주어가 잊혀지지 않도록 합니다.
- 언어모델을 통해 표준어의 제주어 버전을 생성하여 확인할 수 있도록 합니다.
- 언어모델을 사용한 이유는 기존에 학습된 다양한 내용을 그대로 이어갈 수 있도록 하기 위함입니다.
개발한 언어모델에 대한 설명
- 제주도 방언 데이터를 바탕으로 Llama3.1을 다양한 테스크가 가능하도록 파인튜닝하여, 제주도 방언과 관련된 여러 테스크를 수행하도록 합니다.
JEJUMA-001은 현재 방언과 표준어간 변경, 방언 탐지 등의 역할을 수행할 수 있습니다.
JEJUMA-001을 모델을 훈련하기 위해 약 105만개의 제주방언-서울말 페어 데이터를 수집하고, 그 중 제주어가 잘 들어난 데이터 17만개를 선별하였습니다.
- 이를 바탕으로 총 4가지의 테스크를 수행하도록 훈련 데이터를 생성하였으며, 이는 총 약 34만개의 데이터입니다.
- LlamaFactory를 통해 LoRA 방식으로 훈련하였으며, 모든 데이터에 대해 1에폭 학습하였습니다.
- 어려운 제주도 말에 대해서, gpt4o와 국산 모델인 업스테이지 Solar, 네이버 HCX 높은 번역 정확도를 보입니다.
제주어 -> 표준어
| 입력 문장 | 자이 폴에 독솔 막 난 거 보난 언 생이우다 |
|---|
| 정답 | 재 팔에 닭살이 막 난 거 보니, 추운 모양이다. |
| Upstage Solar 출력 | 그 바위에 뱀이 나타나는 걸 보니까 정말 놀랐다. |
| Naver HCX 출력 | 재의 풀에 독초가 마구 난 것을 보니 어린 소나무입니다. |
| GPT-4o 출력 | 저기 바위에 독사가 막 나타난 걸 보니까 정말 놀랐다. |
| JEJUMA-001 출력 | |
표준어 -> 제주어
| 입력 문장 | 귤나무에 그냥 가서 너네 아버지좀 찾아와라. |
|---|
| 정답 | 미깡낭 경 가심 너네 아방 좀 데령 |
| Upstage Solar 출력 | 귤 나무에 가서 네 아버지를 좀 찾아와. |
| Naver HCX 출력 | 귤낭에 강 느네 아방 좀 데령오라. |
| GPT-4o 출력 | 귤나무에 걍 가서 햄신 아방 좀 찾아와라. |
| JEJUMA-001 출력 | 미깡낭에 그냥 강 너네 아방좀 촞아오라 |
어떻게 사용하나요?
- 정의된 탬플릿에서
dialect_to_standard, standard_to_dialect, detect_dialect, detect_dialect_and_convert 중 하나를 사용할 수 있습니다.
dialect_to_standard: 제주어를 표준어로 변경
standard_to_dialect: 표준어를 제주어로 변경
detect_dialect: 제주어/표준어 감지
detect_dialect_and_convert: 자동으로 제주어/표준어를 감지하여 표준어/제주어로 변경
import transformers
import torch
model_id = "JEJUMA/JEJUMA-001"
pipeline = transformers.pipeline(
"text-generation",
model=model_id,
model_kwargs={"torch_dtype": torch.bfloat16},
device_map="auto",
)
terminators = [
pipeline.tokenizer.eos_token_id,
pipeline.tokenizer.convert_tokens_to_ids("<|eot_id|>")
]
class JejuPromptTemplate:
@staticmethod
def dialect_to_standard(text):
return [{"role":"user", "content":"Convert the following sentence or word which is Jeju island dialect to standard Korean: " + text},]
@staticmethod
def standard_to_dialect(text):
return [{"role":"user", "content":"Convert the following sentence or word which is standard Korean to Jeju island dialect: " + text},]
@staticmethod
def detect_dialect(text):
return [{"role":"user", "content":"Detect the following sentence or word is Jeju island dialect or standard Korean: " + text},]
@staticmethod
def detect_dialect_and_convert(text):
return [{"role":"user", "content":"Detect the following sentence or word is Jeju island dialect or standard Korean and convert the following sentence or word to Jeju island dialect or standard Korean: " + text},]
outputs = pipeline(
JejuPromptTemplate.standard_to_dialect("자이 폴에 독솔 막 난 거 보난 언 생이우다"),
max_new_tokens=512,
eos_token_id=terminators,
do_sample=True,
temperature=0.1,
top_p=0.9,
)
print(outputs[0]["generated_text"][-1])
추후 계획
- JEJUMA-002는 국내의 모든 방언 데이터를 바탕으로 훈련을 진행하여 동일한 테스크를 수행할 수 있도록 할 계획입니다.
- JEJUMA-003는 국내의 모든 방언 데이터와 이를 설명하는 테스크를 바탕으로 데이터에 없는 방언(연변방언, 북한어, 제3의 언어)를 일부 번역할 수 있도록 할 계획입니다.
- JEJUMA-003이 본 연구에 최종 단계이며, 이를 위해 번역모델이나 더 작은 모델이 아니라 8B 크기의 언어모델을 사용하고 있습니다.