팀프로젝트에서 사용할 자연어 처리 기술

엘리스 AI 트랙의 마지막 관문인 인공지능 서비스 팀 프로젝트를 수행하게 되었다.

이번 글에서는 팀 프로젝트에서 사용할 자연어 처리 기술을 소개하며, 앞으로 내가 팀장으로써 어떻게 팀을 운영해나가야 할 지로 글을 마무리 짓도록 하겠다.

우리 팀의 프로젝트는 유튜브 채널의 사용자들이 작성한 댓글을 영상별로 분석해주는 서비스를 주요 주제로 기획하였다.

<현재 진행중인 웹 서비스 홈페이지 사진> Imgur

자연어 처리 기술 관점에서 프로젝트의 주 기능은 다음과 같다.

0. 사용자가 자신이 업로드한 영상을 선택하면, 그 영상에 달린 모든 댓글을 수집해서, 피드백과 요구로 분류해준다.

1. 피드백의 경우 긍정적인 피드백 (영상 정보 굿!!, 유튜버 재밌어요 등), 부정적인 피드백 (영상 노잼, 화질이 안 좋아요 등)으로 다시 분류되고, 그 댓글들을 군집화하여 공통된 문장으로 나타내준다. 즉 (화질이 안 좋아요, 화질구지, 잘 안 보여요) 등의 댓글이 있다면 군집화 과정을 통해 (화질이 안 좋아요)의 댓글 그룹으로 묶여지게 된다. 이후 이 댓글 그룹에 달린 총 좋아요 수, 댓글 수를 막대그래프로 나타내어 다른 그룹의 댓글과 비교할 수 있게 한다.

2. 요구의 경우 사용자가 원하는 컨텐츠(먹방 해주세요, 과학 정보 보여주세요 등)를 말한다. 이러한 댓글들을 1번과 같이 하나의 군집으로 묶어주고, 그 군집마다의 좋아요 수와 댓글 수를 파악하여 사용자가 제일 원하는 컨텐츠가 무엇인지를 그래프로 나타내준다.

<상기 기술한 기능에 관해 시각화한 대시보드 사진> Imgur

<기능별로 사용할 모델을 팀원들과 논의 후 결정하여 그린 사진>
Imgur

즉 크게 자연어 분류, 군집화 모델을 사용하게 된다.

분류 모델은 KoBERT 를 사용하려 한다.

한국어를 분류할 때 성능을 향상시킨, SKT에서 만든 BERT 모델이다.
해당 링크에서 관련 모델 정보를 확인할 수 있다. 하지만 현재는 blob 저장소가 차단되어 기본 KoBERT 모델은 사용이 힘들고, 현재 대체제로는 Huggingface 기반으로 사용할 수 있으니 이 링크를 참고바란다.

군집화를 할 때는 SBERT 통해서 문자열을 벡터화시키고, DBSCAN을 이용하여 군집화 할 예정이다.

SBERT 모델의 방식처럼 자연어 처리 분야에서 사람이 쓰는 자연어를 기계가 이해할 수 있는 숫자형태인 vector로 바꾸는 과정을 임베딩(Embedding)이라고 한다.

군집화 모델은 대표적으로 K-means, DBSCAN, BIRCH 등 다양하다.

따라서 군집화 모델을 선택하는데 고민이 많았다.

각 군집화 모델별 특성을 파악하고, 우리 프로젝트에서 가장 효율적인 모델이 무엇인가 고민해야 했기 때문이다.

결과적으로는 다음과 같은 이유로 DBSCAN 알고리즘을 활용해보기로 했다.

1. n_cluster를 직접 사용자가 설정해줘야 하는 K-means와는 달리, DBSCAN은 알고리즘 자체에 n_cluster를 정해주는 과정까지 정해준다.

2. K-means의 시간복잡도가 O의 n승인데 비해, DBSCAN은 n log n으로 실행시간이 훨씬 더 빠르다.

3. K-means의 특성 상 이상치가 있어도 한 그룹의 일원으로 껴주는 데 반해, DBSCAN은 이상치가 있으면 이를 아예 제외시킬 수 있다. 즉 일정 수치 이하의 동떨어진 댓글들은 군집화를 허용하지 않는다.

이후 그 댓글 군집들의 대표 키워드를 추출할 때는 tf-idf 기술을 이용하는 것 밖에 효율적인 방법이 없다고 판단했다.


이 프로젝트의 이전 글

코로나 전/후 배달 기록 분석 2

이 프로젝트의 다음 글

유튜브 댓글 분석 2