본문 바로가기
  • 머킹이의 머신로그
프로젝트/개인 프로젝트

[자연어 개인 프로젝트] 제주도 사투리를 번역하자 (2)

by 머킹 2023. 9. 19.
728x90

안녕하세요 머킹입니다.

지난번 포스팅에 이어 개인 프로젝트를 적어보고자 합니다.

사실 저는 그동안 개발을 하면서 아직까지 환경설정을 제대로 해본 적이 없습니다.

그래서 그랬을까요... 정말 너무 힘들었습니다...

 

일단 환경설정을 하게 된 계기부터 말씀드리겠습니다.

자연어 처리를 위해서 저는 한국어 형태소 분석기를 사용하고자 했습니다.

형태소 분석 이란 형태소를 비롯하여, 어근, 접두사/접미사, 품사(POS, part-of-speech) 등

다양한 언어적 속성의 구조를 파악하는 것입니다.

 

한국어는 토큰화(Tokenization)가 매우 어렵습니다.

한국어는 '조사', '어미' 등이 있고 띄어쓰기도 매우 복잡합니다.

'콜라'에 조사가 붙으면 '콜라가', '콜라를', '콜라는' 등처럼 붙게 되지만 모두 '콜라'를 지칭하고 있습니다.

하지만 단순이 띄어쓰기 기준으로 모두 다른 단어로 취급하게 됩니다.

 

띄어쓰기 기준으로 토큰화를 한다면 띄어쓰기가 잘 되어있지 않은 문장에 대해 토큰화를 수행할 수 없습니다.

따라서 한국어는 형태소 분석을 진행하는 것이 일반적입니다.

 

사용하는 형태소 분석기들 중 대표적으로 사용하는 라이브러리는 'KoNLPy'입니다.

카카오의 Khaiii도 있으나 지금은 KoNLPy를 사용하고 추후에 실험을 해보겠습니다.

 

'KoNLPy'에는 4개의 태그 패키징이 있습니다.

 

Hannanum : KAIST에서 개발한 형태소 분석기

Kkma : SNU에서 개발한 형태소 분석기

Komoran : Shineware에서 개발한 형태소 분석기

Mecab : Kyoto Univ에서 개발한 일본어용 형태소 분석기를 한국어에 적용

Okt(구 Twitter) : 오픈소스 형태소 분석기

 

어떤 차이가 있는지 문장으로 대체하겠습니다.

  1. "아버지가방에들어가신다”
  2. 이 예시를 통해 띄어쓰기 알고리즘의 성능을 확인해 볼 수 있습니다.
Hannanum Kkma Komoran Mecab Okt(Twitter)
아버지가방에들어가 / N 아버지 / NNG 아버지가방에들어가신다 / NNP 아버지 / NNG 아버지 / Noun
이 / J 가방 / NNG   가 / JKS 가방 / Noun
시ㄴ다 / E 에 / JKM   방 / NNG 에 / Josa
  들어가 / VV   에 / JKB 들어가신 / Verb
  시 / EPH   들어가 / VV 다 / Eomi
  ㄴ다 / EFN   신다 / EP+EC  

https://github.com/konlpy/konlpy/blob/master/docs/morph.py

이 주석을 이용하면 직접 실행하면서 내가 쓰고 싶은 모델과 언어의 특성으로 선택할 수 있습니다.

 


KoNLPy는 자바환경에서 작동해서 JDK와 JPype를 설치해야 합니다..

그냥 pip install로는 사용할 수 없습니다. (파이썬에서)

 

https://ebbnflow.tistory.com/143

 

[KoNLPy] 자연어 처리1 - KoNLPy로 데이터 전처리

● KoNLPy란 KoNLPy는 한국어 정보처리를 위한 파이썬 패키지 입니다. 자연어처리(NLP)에서 형태소를 분리(형태소 단위 토크나이징)하는 데이터 전처리가 필요한데 이때 한국어 데이터 전처리를 할

ebbnflow.tistory.com

 

이 블로그에 상세하게 나와있는 것처럼 저도 설치를 진행했습니다.

python 버전을 다운그레이드해서 설치하고

Java 파일에 환경변수를 등록하고...

 

결과는 대 실패!

왜인지 모르겠지만.. 정말 모르겠습니다.

자꾸 설치가 안 돼서 VS를 껐다가 켰다가

컴퓨터를 껐다가 켰다가 다시 깔았다가 지웠다가.. 아무튼 많은 시도를 했습니다.

 

그리고 저는 코랩으로 돌아갔습니다.

 


모델을 만들기 위해서 토큰화를 진행하고, 모델을 생성해야 했습니다.

모델의 순서와 필요한 것들에 대한 질문들은 이렇습니다.


1단계: 데이터 수집
>1.1. 자료출처: 자료출처에 대해 더 자세히 알려주실 수 있나요? 방언 사용자들 간의 이러한 대화를 어디서 모았습니까?
>1.2. 데이터 크기: 얼마나 많은 데이터를 가지고 있습니까? 데이터가 많을수록 모델을 더 잘 훈련시킬 수 있습니다.

2단계: 데이터 전처리
>2.1. 텍스트 클리닝: 텍스트 데이터를 클리닝 해야 하나요, 특수 문자, HTML 태그 또는 관련 없는 정보를 제거해야 하나요?
>2.2. 토큰화: 텍스트를 어떻게 토큰화하시겠습니까? 일반적인 방법으로는 단어 수준 또는 하위 단어 수준 토큰화(바이트 쌍 인코딩 또는 SentencePiece와 같은 도구 사용)가 있습니다.
>2.3. 데이터 분할: 교육, 검증, 테스트 세트로 데이터를 나누었습니까? 각 세트별로 고려하고 있는 비율은 얼마입니까?
>2.4. 불균형 데이터 처리: 데이터의 계층 불균형에 대해 우려가 있습니까? 그렇다면 어떻게 해결하시겠습니까?

3단계: 모델 선택
>3.1. 기계번역 접근법: 이 작업에 트랜스포머 기반 모델과 같은 시퀀스 투 시퀀스 모델을 사용할 계획입니까, 아니면 다른 접근 방법을 염두에 두고 계십니까?
>3.2. 사전학습된 모델: BERT나 GPT-3와 같은 사전학습된 언어 모델을 출발점으로 사용하여 작업에 맞게 미세 조정할 계획이 있습니까?

4단계: 모델 교육
>4.1. Training Parameters: 모델 트레이닝을 위해 사용 가능한 하드웨어 및 소프트웨어 자원은 무엇입니까? 어떤 배치 크기, 학습률 및 에폭 수를 고려하고 있습니까?
>4.2. 손실함수: 교차 엔트로피 손실 또는 맞춤 손실함수와 같이 번역 작업에 적합한 손실함수를 결정했습니까?
>4.3. 정규화: 훈련 중에 탈락이나 체중감소 등의 정규화 기법을 사용할 계획이 있습니까?

5단계: 모델 평가
>5.1. 평가 지표: 모델의 성능을 평가하기 위해 어떤 지표를 사용할 것입니까? 일반적인 지표로는 BLEU 점수, METEO 또는 맞춤형 평가 지표가 있습니다.
>5.2. 검증 및 하이퍼파라미터 튜닝: 모델 검증을 어떻게 할 것이며, 모델을 최적화하기 위해 하이퍼파라미터 튜닝을 할 계획입니까?

6단계: 배포
>6.1. API 또는 Application: 모델을 어떻게 배치할 것인가? 웹 애플리케이션에 통합할 것인가, 모바일 앱에 통합할 것인가, API를 통해 접근할 것인가?
>6.2. 확장성: 특히 번역 요청이 많은 경우 확장성 요구 사항을 고려했습니까?

7단계: 유지보수 및 개선
>7.1. 지속적인 학습: 시간이 지남에 따라 모델을 어떻게 업데이트하고 개선할 계획입니까? 이를 위해 사용자 피드백을 수집할 것입니까?
>7.2. 모니터링: 모델의 성능을 모니터링하고 배치 후 발생할 수 있는 문제를 해결할 계획이 있습니까?


이런 순서대로 저는 모델을 작성했지만

결론은 아직 실행되지 않았습니다.

토큰화가 정말 잘 되는 것이 관건이라서

 

토큰화에 좀 더 심혈을 기울여서 해보자 합니다!