--- license: mit language: - ko pipeline_tag: text-generation tags: - Language - Dialect --- # JEJUMA-002 * LLM으로 사라져가는 우리 방언 지키기 프로젝트2: 전국방언 ## 왜 시작하게 되었나요? ### 빠르게 사라져가는 지역방언 * 여러 지역 방언들이 사라지고 있습니다. * 지역에 사는 젊은이들도 지역 방언보다는 표준어를 사용하는 경향이 강해지고 있습니다. * 특히, 타지역과의 교류가 활발해지면서 젊은 층에선 방언보단 표준어를 선호하는 현상이 나타납니다. ### 지역방언에 약한 언어모델 * 온라인 소스는 표준어로 구성되어 있기에, 자료가 적은 지역방언을 잘 모릅니다. * 특히 제주어는 표준어와 차이가 크기 때문에, 유명한 단어나 문장 외에는 모델이 이해할 수 없습니다. * 그 외에 다른 방언들도 점차 억양만 남고 단어들이 소실되고 있습니다. ## 어떻게 이를 해결했나요? * 언어모델을 통해 어려운 방언을 표준어로 변경하여 방언이 잊혀지지 않도록 합니다. * 언어모델을 통해 표준어의 방언 버전을 생성하여 확인할 수 있도록 합니다. * 방언을 입력하면 어느 지역 방언인지 유추할 수 있도록 합니다. * 언어모델을 사용한 이유는 기존에 학습된 다양한 내용을 그대로 이어갈 수 있도록 하기 위함입니다. ## 개발한 언어모델에 대한 설명 * 각 지역 방언 데이터를 바탕으로 Llama3.1을 다양한 테스크가 가능하도록 파인튜닝하여, 여러 지역 방언과 관련된 여러 테스크를 수행하도록 합니다. * `JEJUMA-002`는 현재 방언과 표준어간 변경, 방언 탐지 등의 역할을 수행할 수 있습니다. * `JEJUMA-002`를 모델을 훈련하기 위해 약 500만개의 지역방언-서울말 페어 데이터를 수집하고, 그 중 지역방언 잘 들어난 데이터를 평균 15만개씩 총 75만개 선별하였습니다. * 이를 바탕으로 총 4가지의 테스크를 수행하도록 훈련 데이터를 확장하였으며, 이는 총 약 200만개의 데이터입니다. * 각 방언별 데이터 비율과 형식을 맞추기 위해, 직접 수집하는 대신 오픈 데이터를 가공하였습니다. * 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`: 자동으로 방언종류를 감지하여 표준어로 변경 ```python import transformers import torch model_id = "JEJUMA/JEJUMA-002" 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 DialectPromptTemplate: @staticmethod def dialect_to_standard(text, region): return [{"role":"user", "content":f"Convert the following sentence or word which is {region}'s dialect to standard Korean: " + text},] @staticmethod def standard_to_dialect(text, region): return [{"role":"user", "content":f"Convert the following sentence or word which is standard Korean to {region}'s dialect: " + text},] @staticmethod def detect_dialect(text): return [{"role":"user", "content":"Detect the following sentence or word is standard, jeju, chungcheong, gangwon, gyeongsang, or jeonla's dialect: " + text},] @staticmethod def detect_dialect_and_convert(text): return [{"role":"user", "content":"Detect the following sentence or word is which dialect and convert the following sentence or word to standard Korean:" + text},] outputs = pipeline( DialectPromptTemplate.dialect_to_standard("자이 폴에 독솔 막 난 거 보난 언 생이우다", "jeju"), 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-003는 국내의 모든 방언 데이터와 이를 설명하는 테스크를 바탕으로 데이터에 없는 방언(연변방언, 북한어, 제3의 언어)를 일부 번역할 수 있도록 할 계획입니다. * JEJUMA-003이 본 연구에 최종 단계이며, 이를 위해 번역모델이나 더 작은 모델이 아니라 8B 크기의 언어모델을 사용하고 있습니다. * JEJUMA-002를 훈련하기 위한 데이터를 원하시면, [이메일](mailto: acute.02-durable@icloud.com)로 간단한 소속과 사용 목적을 말씀해주시면 내부 상의후 전달드리겠습니다.