도비LOG(跳飛錄)

도비의 AI 엔지니어 도전기

NLP

Boostcamp AI Tech 4기 최종 프로젝트 후기 (일기 감성 분석 및 코멘트 생성)

나쁜도비 2023. 2. 19. 23:43

목차

  • 프로젝트 기획 의도
  • 데이터셋
  • 코멘트 생성 모델링
  • Human-evaluation
  • 생성 예시
  • 결론 및 회고

프로젝트 기획 의도

'너하궁' 서비스 화면

  '너하궁(너의 하루가 궁금해)'은 사용자가 일기를 입력하면, 해당 일기에서 주로 나타나는 감성을 분석해주고, 일기에 대해 공감해주는 코멘트를 생성하는 서비스이다. 누구나 공감과 위로를 받고 싶은 순간이 있다. 어렸을 때 내가 일기를 쓰면 따뜻한 말 한마디를  적어 주시던 선생님처럼, 누군가 내 하루의 이야기를 들어주고, 나의 감정에 공감해준다면 어떨까 하는 마음으로 프로젝트를 기획하였다.

  이번 글에서는 내가 담당하였던 '코멘트 생성 모델링'에 대해 주로 다뤄보도록 하겠다.

 

 

데이터셋

  일기 코멘트 생성 모델은 일기를 입력으로 받아서, 적절한 공감 코멘트를 출력해야 한다. 이를 위해 필요한 데이터는 '일기'와 '코멘트'이다. 일기 데이터는 모두의 말뭉치 '비출판물 말뭉치'에서 구할 수 있었다. 비출판물 말뭉치는 시, 일기, 편지 등의 개인적 글쓰기 자료로 이루어져 있으며, 초등학생부터 80대 성인의 글까지 총 5,937명의 글이 수록된 말뭉치이다. 이 중에서 대분류가 '일기'에 해당하는 4,236개의 데이터만 코멘트 생성 모델링용 데이터셋으로 선정하였다.

  한편, '코멘트' 데이터는 별도로 존재하지 않았다. 이에 다음과 같은 방법으로 코멘트 레이블을 구축하였다. 첫째, AIHUB의 감성대화 말뭉치를 활용하였다. 감성대화 말뭉치는 사용자와 챗봇이 감성적인 상황에서 대화하는 데이터셋으로, 최대 3턴의 대화로 이루어져 있으며 총 58,268개의 데이터로 구성되어 있다. 이때 여러 턴의 사용자 발화를 이어서 '일기'로 간주하고, 여러 턴의 챗봇 발화를 이어서 '코멘트'로 간주하는 방법을 사용하였다. 실제 일기보다 짧은 텍스트가 되지만, 챗봇의 발화가 사용자의 감정에 공감해주는 코멘트이기 때문에 데이터셋으로 사용하기 적절하다고 판단하였다. 그런데 감성대화 말뭉치를 사용하더라도, 비출판물 말뭉치의 일기 데이터에 대한 코멘트를 레이블링할 필요가 있었다. 5명의 인원이 3주라는 기간 동안 4천 개가 넘는 일기에 대해 일일이 코멘트를 다는 것은 무리이므로, Pseudo labeling 기법을 활용하였다.

 

Pseudo labeling

출처: https://datawhatnow.com/pseudo-labeling-semi-supervised-learning/

  Pseudo labeling이란, 레이블링된 데이터로 훈련시킨 모델을 사용하여, 레이블링 되지 않은 데이터에 레이블을 부여하는 방법론이다. 우리는 GPT-3 기반의 text-davinci-003 모델에 "이 일기에 코멘트를 달아줘. {일기 텍스트}"와 같은 형식으로 입력을 넣고, text-davinci-003 모델이 출력한 값을 레이블로 사용하였다. 감성대화 말뭉치를 활용하고, Pseudo-labeling 기법을 활용하여 총 768,020 어절의 코멘트를 만들어낼 수 있었다.

 

데이터셋 정제

  우선 길이가 너무 짧은 일기(3문장 이하)는 제외하였다. 그리고 카테고리가 '일기'라고 되어있지만, 내용상 '일기'로 판단하기 어려운 데이터('꿈 이야기', '하루 일과표'  등)를 정성적으로 판단하여 제거하였다. 또한, KoBART 토크나이저로 토큰화했을 때 500 토큰 이상이 되는 일기는 분리하여 여러 개의 일기로 취급하였다. 이외에 text-davinci-003 모델의 코멘트를 정제해주는 작업을 거쳤다.

 

 

코멘트 생성 모델링

  

코멘트 생성 모델 아키텍처

  모델의 아키텍처는 위 그림과 같다. 먼저 일기 데이터의 맞춤법을 교정하는 전처리 과정을 거치고, 모델이 코멘트를 생성한다. 코멘트를 생성하고 나면, "힘냈으면 좋겠어요.", "힘내세요." 등과 같이 비슷한 단어로 이루어진 문장이 자주 나오면 코멘트가 영혼이 없어 보이거나 지루해질 수 있으므로, TF-IDF를 이용해 유사 단어로 이루어진 문장을 제거하는 후처리 과정을 거친다.

  코멘트 생성 모델 Fine-tuning을 위한 PLM으로는 KoBART, KE-T5-large-ko, KoGPT2를 실험하였다. 그 결과는 아래와 같다.

 

PLM ROUGE-1 ROUGE-L BLEU-1 RDASS
KE-T5-large-ko 28.87 19.41 23.51 0.46
KoGPT2 33.56 22.34 27.25 0.56
KoBART 35.66 23.26 29.79 0.64

  실험 결과, KoBART가 ROUGE, BLEU, RDASS 모두 높은 점수를 기록하여 최종 PLM으로 선정하였다. 각 PLM으로 fine-tuning한 모델들의 생성 예시는 아래의 표와 같다.

 

입력 일기 오늘은 언니랑 싸웠다. 그런데 엄마는 언니 편만 들어주었다. 둘 다 잘못했는데 엄마가 언니 편만 들어주니깐 더욱 서러웠다. 맨날 나만 혼나서 억울하다.
KE-T5-large-ko 어머니께 마음이 안 좋으시군요. 부모님과의 대화로 기분이 풀렸으면 좋겠어요. 잘 해결되었으면 좋겠네요. 좋은 일이 잘 되길 바라요.
KoGPT2 오늘 언니와 싸우셔서 속상하셨겠어요. 엄마 편을 들어주지 않아 억울하시군요. 억울함을 풀기 위해 어떻게 하는 것이 좋을까요?
KoBART 엄마가 언니 편만 들어주니 서러우셨겠어요. 맨날 나만 혼나서 억울한 마음이 들었겠네요. 다음번에는 언니랑 다투지 않기를 바래요.

 

  KoBART의 Fine-tuning에서는 EOS token을 정답 코멘트 뒤에 반드시 붙여줘야 한다는 점이 중요했다. 만약 EOS token을 붙이지 않으면, 모델이 생성을 멈춰야 할 타이밍을 제대로 잡지 못하고, max length까지 억지로 생성을 이어가는 모습을 보였다. 따라서 정답 코멘트에 EOS token을 부착하여 학습을 수행하였다.

 

RDASS

  생성 모델의 평가 지표로 많이 사용되는 BLEU, ROUGE는 생성 코멘트와 정답 코멘트 간의 형태적인 유사도를 측정하기 때문에, 의미적으로는 유사하더라도 형태적으로 다를 경우 스코어가 낮게 측정된다는 문제가 있다. 따라서 의미적 유사도를 평가할 수 있는 RDASS도 추가적으로 활용하였다. 

  

생성 옵션 설정

  코멘트의 생성 옵션으로는 Sampling 기법과 Beam-search를 동시에 활용했다. Top-k, Top-p Sampling은 틀에 박히지 않은 다양한 표현을 생성하게 해주고, Beam-search는 안정적인 시퀀스를 생성하게 해준다. 이 방식들을 모두 활용함으로써, 생성의 다양성을 보장하면서도 안정적인 생성이 가능하도록 하였다.

 

Human evaluation

  BLEU, ROUGE, RDASS는 모두 생성 문장과 정답 문장이 얼마나 유사한지를 평가한다. 하지만, 정답 문장과 유사하다고 해서 사용자가 반드시 해당 코멘트에 만족한다고 볼 수는 없다. 따라서 사용자의 입장에서 코멘트 생성 품질을 평가할 필요가 있다. 이를 위해 Human evaluation 평가 지표인 SSSA(Sensibleness and Specificity and Sympathy Average)를 제안하였다. Sensibleness와 Specificity는 Google에서 발표한 챗봇 Meena(Adiwardana et al., 2020) 평가에 사용된 지표를 참고하였고, 코멘트가 공감적인지의 여부를 판단하기 위해 Sympathy라는 지표를 추가하였다. 팀원 5명이 가이드라인을 읽고, 100개의 동일한 생성 결과에 대해 해당 코멘트가 각 특성을 만족하는가의 여부를 1, 0으로 평가한 뒤, 평균을 계산하였다. 코멘트 생성 품질의 Human-evaluation 결과는 아래의 표와 같다.

  Sensibleness Specificity Sympathy SSSA
정답 코멘트 0.80 0.85 0.75 0.80
생성 코멘트 0.65 0.86 0.67 0.73

  생성 코멘트의 Sensibleness, Sympathy는 정답 코멘트보다 점수가 낮았지만, Specificity는 정답 코멘트보다 향상된 점수를 달성하였다. 다만 생성 코멘트의 Sensibleness가 다소 낮게 나타났고, 생성 결과에서 비문법적인 표현이나, 일기의 내용과 상반되는 내용을 지어내는 이슈가 있었다. 따라서 학습 데이터 보강 등의 방법을 통해 Sensibleness를 향상시킬 필요가 있어 보인다.

 

생성 예시

  몇 가지의 생성 예시를 살펴보자. 우선 생성이 잘 된 예시를 살펴보면 다음과 같다. 문법적, 논리적으로 이상이 없으며(Sensibleness), 일기의 내용을 구체적으로 잘 언급해주고(Specificity), 일기에서 드러나는 감정에 공감해주거나 위로해주고 있다(Sympathy). 

생성이 잘 된 예시

 

   다음은 생성 품질이 만족스럽지 않은 예시이다.

입력 길이가 짧을 때 코멘트의 품질이 좋지 않음.

  먼저, 입력 길이가 짧을 때 코멘트의 품질이 좋지 않았다. 예를 들어, '짬뽕'을 '짜장라면'이라고 잘못 이해하거나, '놀아봐요'를 '놀어봐요'와 같이 잘못 생성하는 등의 오류가 있었다. 이러한 이슈가 있어, 실제 서비스에서는 입력 글자 수를 길게 쓰도록 유도하는 방안이 필요해 보인다.

 

일기 텍스트의 일부분을 그대로 인용하는 경향으로부터 발생하는 이슈

  모델이 일기 텍스트의 일부분을 코멘트에 그대로 인용하는 경향이 있었다. 이러한 경향으로부터 발생하는 이슈가 있었는데, 왼쪽 예시를 보면 “젊었을 때는 쇠파이프도 씹어먹는다.”라는 인용구, ‘나이 드신 부모님’, ‘피자나 햄버거’라는 일부 표현들을 잘 인용해왔지만, 이것들을 조합하면서 일기에서 드러나는 사실과 다른 언급을 하는 문장을 생성하고 있다. 오른쪽 예시를 보면 “국어 시간에는”, 내 뇌를 한탄하고”, “글쓰기로 내 실력을 뽐내야지”라는 표현들을 잘 인용해왔지만, 이것들을 조합하면서 일기의 내용과는 전혀 다른 언급을 하는 문장을 생성하고 있다. 

 

 

결론 및 회고

  이번 프로젝트에서는 일기에 대한 공감 코멘트를 생성하는 모델을 개발하는 역할을 담당하였다. 생성의 품질을 높이기 위해 모델의 생성 옵션을 추가적으로 조절하여 코멘트의 안정성과 다양성을 높이고자 하였고, BLEU와 ROUGE의 한계를 극복하기 위해 RDASS라는 지표를 추가적으로 활용하였다. 또한, 사용자의 입장에서 만족스러운 코멘트를 생성해내는지를 파악하기 위해 SSSA라는 Human evaluation 지표를 제안하였고, 그에 따른 가이드라인도 작성하였다.

  한계점도 있었다. 일기 데이터를 정제했을 때, 너무 짧은 일기에 대해서는 제대로 된 코멘트도 달기 어려울 것이라고 판단하여, ‘3문장 이하의 일기는 학습 데이터에서 제외한다.’라는 기준을 세우고, 이 기준에 따라 총 245개의 일기를 삭제하였다. 그러나, ‘문장 단위로 길이 기준을 선정하는 것은 충분히 길이가 긴 데이터를 제외할 수 있으므로 다소 위험할 수 있다.’라는 멘토 피드백을 받고 난 뒤에 이러한 기준에 따라 삭제된 데이터들을 다시 살펴보니 3문장이어도, 개별 문장의 길이가 길면 내용적으로 ‘일기’라고 보기에 충분한 데이터들이 꽤 있었다. 향후에는 길이 단위로 데이터를 정제할 때 '글자(char) 수'를 기준으로 해야겠다.

  SSSA Human evaluation 가이드라인을 모두가 최대한 비슷하게 이해할 수 있도록 작성했어야 했다. Sensibleness, Specificity, Sympathy라는 지표가 어느 정도 주관적일 수밖에 없는 부분이 있지만, 그럼에도 동일한 예시인데도 팀원들끼리도 서로 다른 판단을 하는 경우가 많았다. 작업자 간 일치도를 Fleiss’ Kappa로 구해보면 Sensibleness가 0.47, Specificity가 0.36, Empathy가 0.56이 나온다. 특히 Specificity에 대한 일치도가 낮기 때문에, 가이드라인을 좀 더 명료하게 개선할 필요가 있어 보인다. 가이드라인을 이해하기 쉽도록 명료하게 작성을 해야, 해당 가이드라인을 읽은 작업자들이 동일한 예시에 대해서 비슷하게 판단을 내릴 수 있을 것이다. 또한, 작업 도중에 지속적으로 작업자들과 소통을 한다면 더 좋을 것이다.

 


Reference

  • Adiwardana , D., Luong, M. T., So, D. R., Hall, J., Fiedel , N., Thoppilan , R., ... & Le, Q. V. (2020). Towards a human like open domain chatbot. arXiv preprint arXiv:2001.09977
  • Lee, D., Shin, M., Whang, T., Cho, S., Ko, B., Lee, D., ... & Jo, J. (2020). Reference and document aware semantic evaluation me thods for Korean language summarization. arXiv preprint arXiv:2005.03510.

 

728x90