최근 지원금을 조금이라도 따내 보고자 사업계획서를 몇 번 쓰면서 간단한 로직 설명에서도 내가 짠 로직의 구멍이 너무 크게 느껴졌다. 게다가 플루칙 감정 바퀴를 훑으며 로직에 접목/보완하면 좋을 부분이 보이는데 무시하기도 어려웠고. 후에 NLP를 도입하더라도 로직이 탄탄하게 기준선이 되어주면 AI 모델의 감정 분석 결과를 검증하거나 보정하기 더 좋을 것 같았다. MVP 완성하는 동안에는 좀 묻어두고 모르는 척하려고 했으나, 로직이 허술하니 단어 수집도 중구난방인 것 같고… 결국 큰맘 먹고 감정 인식 로직을 개선하기로 한다. 이번엔 진짜 이대로 MVP까지 사양 잠그고 쳐다보지 말 것.

단어 단순 매칭에도 로직의 한계가 느껴졌는데 기껏 타임라인 형식으로 그때그때 기록을 남길 수 있게 해두었으면서 매칭된 감정을 두 가지만으로 고정하는 것도 컨셉이랑 안 맞게 느껴졌다. 그리고 단어 matchtype을 contains로만 처리하는 것의 한계가 짧은 키워드일수록 위험하게 다가왔다. matchtype의 옵션을 contains를 포함하여 phrase, exact, srartswith 등으로 늘리고 그 옵션에 우선순위를 부여하기로 했다.

그리고 테스트로 일기를 작성하다 보니 내 카테고리엔 없지만 뚜렷하게 나타나는 감정이 있었다. ‘실망’. 너무 일상적이고 자주 드는 감정인데, 다른 감정에 종속시키려고 보니 아쉬운 점이 많아 카테고리를 하나 새로 개설하고 단어 수집을 추가로 했다.

부정 표현 필터도 추가했다. ‘불안하지 않았다’는 불안이 아니지만 현재는 부정이 잡히지 않아 불안한 감정으로 읽히고 있었고, 사실 해결을 미루고 있던 부분이었다. 최대한 최초의 아이디어로 빠르게 구현하여 MVP까지 완성하는 게 목표여서 그랬지만 지원금까지 생각해 본 마당에 지금 해결하지 않을 이유가 없었다. 그래서 앞뒤 2~3어절 내에 부정어가 있는지 체크하여 있으면 해당 매칭을 무효화하거나 반대 감정으로 전환하는 규칙을 만들었다.

결정적으로 감정의 강도 가중치를 도입했다. 단순 빈도가 아니라 감정 단어별로 강도 점수를 부여하는데 예를 들어, 짜증은 2점, 분노는 4점, 격분은 5점 등으로 두고 총점 기반으로 감정 상위 카테고리를 선별하면 더 정확한 감정 인식이 가능해질 것 같았다. 다 설명하진 않겠지만, 걱정/염려에 비해 불안이 더 강한 강도의 감정으로 설정하는 정도로 감정 카테고리별 강도도 따로 매겼다.

“오늘 발표가 있었다. 아침부터 너무 긴장 돼서 손이 다 떨렸다. 하지만 걱정했던 것보다 잘 된 것 같아서 다행이다. 다만 몇 면접관의 반응이 기대와 달라서 조금 실망스럽긴 했다. 그래도 끝이 났으니 자축하며 맛있는 것 먹으니 기분이 좋아지긴 했다.”
하는 문장 안에서

매칭된 키워드카테고리강도
너무 긴장돼서긴장강도 4 (‘너무’가 강도 증폭)
걱정했던걱정/염려강도 3 이나 부정처리로 무효
다행이다안도강도 3
실망스럽긴 했다실망강도 3
기분이 좋아지긴 했다기쁨강도 2

로 점수를 합산하고 같은 감정 축인 카테고리끼리 묶어서 한 번 더 보면,

불안 축 카테고리 총 6점
실망 총 3점
안도 총 3점
기쁨 총 2점

으로 오늘은 전반적으로 불안함이 지배적이었다는 것을 확인하고 나타낼 수 있게 되는 것이다.

여전히 고민인 부분도 있다. 어쨌든 감정을 읽고 시각화하는 것을 목표로 하는 타임라인 형식 일기인데, 하루 중 아무 감정 키워드가 잡히지 않은 경우엔 컬러를 비워둘지 기분을 고를 수 있게 사용자에게 열어줘야 하는지에 대한 것이나 ‘미치겠다’같은 그 외 수많은 욕설의 긍정적 사용 같은 것…