프로젝트 주제는 이전 글에서도 말했듯 정말 단순하다.
스마트워치에서 연락이 왔을 때 제안되는 답장 리스트의 말투를 연락온 상대방에게 사용자가 평소에 하는 말투로 변환해서 제안하는 것.
그럼 가장 중요한건 뭘까??
당연하게도 사용자의 말투로 변환하는 말투 변환기의 개발이 가장 중요했다.
처음에는 chatgpt api로 사용자의 말투로 변환할까 했으나,
그렇게하면 이건 내 프로젝트인가? chatgpt의 프로젝트인가?
api 요금을 감당할 수 있나?
무엇보다 이걸 개발이라고 할 수 있나? (쪽팔리게 라고 할뻔~)
암튼 나는 구글에서 발표한 T5 모델을 활용해서 말투 변환기를 개발하기로 결정했다.
T5 모델은 Seq2Seq 모델의 일종으로
간단히 말해서 input 텍스트에 대한 output 텍스트를 1:1 매칭하여 학습함으로써 두 텍스트간의 관계를 파악하고,
새로운 input 텍스트가 들어왔을 때 해당 텍스트에 대한 output 텍스트를 기존에 학습한 관계성을 기반으로 생성하는 모델이다.
즉 동일한 텍스트에 대해서 상냥한 말투로 적힌 텍스트를 input으로, 정중한 말투로 적힌 텍스트를 output으로 매칭하여 학습시키면?
상냥한 말투의 다른 텍스트를 넣었을 때도 정중한 말투로 바뀌어서 나온다는것!
말그대로 말투 변환기에 딱맞는 모델이다.
Seq2Seq 학습 및 추론 관계
그럼 사용자의 말투로 변환하는 변환기를 개발하기 위해서는 뭐가 필요할까?
동일한 텍스트에 대해 사용자의 말투로 적힌 텍스트와 다른 말투로 적힌 텍스트 pair가 필요하다.
이에 대한 해결책은 단 하나였다.
1. 사용자의 카톡 대화 내역으로 사용자 말투로 작성된 텍스트를 획득하고,
2. 해당 말투를 다른 말투로 변환하여 pair 텍스트를 만들고,
3. 해당 pair 텍스트로 T5 모델을 학습한다.
여기서 가장 문제는 사용자의 카톡 대화 내역을 다른 말투 (상냥체, 정중체)로 변환하는 것이었다.
우선
1. 시중에 나와있는 말투 변환기로는 택도 없는 성능이었고,
2. AI Hub에 있는 데이터셋으로 직접 만든 말투 변환기가 그나마 괜찮았지만, 서비스용으로는 불가능할 성능이었다.
AI Hub 데이터셋으로 직접 개발한 상냥체 말투 변환기
그렇게 어쩔 수 없이 chatgpt를 써야하나 하던 순간...
그때 당시 알음알음 소문나고있던 카카오톡 말투변환기가 떠올랐다.
카카오톡 실험실에서 제공하는 기능이었는데, 텍스트를 입력하고 바꾸고 싶은 말투를 선택하면 해당 어체로 변환시켜주는 기능이었다.
대화체를 번역하기 위한 목적으로 설계되어서 그런지 말투 변환 성능도 빵빵했다.
그래서 내가 생각한 결론
카카오톡 말투 변환기를 카피하자!
위에서 말했듯 T5 모델은 input 텍스트과 output 텍스트의 관계성을 파악하는 모델.
그렇다면 카카오톡 말투 변환기를 사용해서 원본 문장 <-> 카카오톡 말투 변환기로 변환한 문장 pair를 만들고,
이 pair를 T5에 역으로 학습시키면?
카카오톡 말투 변환기와 비슷한 성능을 내는 말투 변환기가 만들어진다!
그럼 이제 뭘 해야할까?
카카오톡 말투 변환기를 활용해서 T5를 학습할 pair 데이터셋을 만들어야한다.
하지만, 카카오톡 말투 변환기는 api는 제공하지 않고있었기에...
나는 카카오톡 카톡창에 텍스트를 입력하고, 변환 버튼을 누르고, 변환된 텍스트를 메모장에 적는 과정을 무한 반복하는 매크로를 설계하여 pair 데이터셋을 생성했다. (매크로 깃허브 링크) (시연 영상을 찍어놨었는데 사라짐...)
이렇게 생성한 텍스트의 총 길이가 AI Hub에 있는 일상 대화 데이터셋해서 총 6만문장정도였던 것 같다.
예를 들면 이런식.
매크로로 생성한 원본 <-> 말투 변환 pair 데이터 셋
이후엔 이 데이터셋을 활용하여 대화체에 robust한 상냥체, 정중체 모델을 각각 훈련시키기 위해 input을 상냥체, 원본 텍스트, output을 정중체로 설정하여 각각 훈련을 진행했다.
상냥체, 정중체 말투 변환 데이터셋 예시
결과는.....
.
.
.
.
.
.
직접 학습시킨 상냥체 말투 변환기 추론 결과
거의 카카오톡 말투 변환기랑 맞먹을 정도...?
추가로 허깅페이스에 배포했으니 직접 확인해봐도 좋다ㅎㅎ
상냥체 말투 변환기 : https://huggingface.co/9unu/formal_speech_translation
9unu/formal_speech_translation · Hugging Face
formal_speech_translation 카카오톡 AI 말투 변환기의 역공학 엔지니어링을 통해 개발한 대화체에 견고한 상냥체 변환기입니다. t5모델을 한국어 전용 데이터로 학습한 pko-t5-base 모델을 활용하여 학습
huggingface.co
정중체 말투 변환기 : https://huggingface.co/9unu/gentle_speech_translation
9unu/gentle_speech_translation · Hugging Face
gentle_speech_translation 카카오톡 AI 말투 변환기의 역공학 엔지니어링을 통해 개발한 대화체에 견고한 정중체 변환기입니다. t5모델을 한국어 전용 데이터로 학습한 pko-t5-base 모델을 활용하여 학습
huggingface.co
이때 배포했을 당시엔 꽤 인기 많았음...
배포 당시 다운로드 수 (약 600 회)
다음 글에서는
1. 사용자로부터 카카오톡 대화 내역 txt파일을 업로드 받고,
2. 위의 두 모델을 활용하여 사용자 말투 변환기 학습용 데이터셋을 만들고,
3. 사용자 말투 변환기를 학습시켜서
4. 지정된 답변 리스트를 사용자 말투로 변환시켜서 DB에 저장하기 위한
장고 웹서버 개발에 대한 회고록을 작성할 예정이다.
이전에 말했듯 기술 스택, 명령어를 공유하기 보다는 내가 만든 장고 웹서버의 프로세스가 어떻게 이루어지는지를 중점적으로 얘기할 것이지만, 아마 url 기반 view 동작 관련한 구현 파트에서는 다른 분들도 얻어갈 부분이 많을 듯 하다.
아님 말고~