본문 바로가기
NLP

다중 감성(multi-class sentiment) 분류 모델 개발일지 - 2

by 방구석 몽상가 2019. 3. 17.
2019-03-17-multi-sent-2

지난 주에 자모에 대해 Fasttext를 이용하여 Embedding 하는것을 고려했었다. 그러나 Labeling에 대한 문제 해결이 우선이었기 때문에 이 방법에 대한 고려는 뒤로 미루기로 했다.

데이터 라벨링

일단 데이터는 Tweet 데이터를 사용하기로 결정했었다. 찬찬히 tweet들을 살펴본 결과 하나의 아이디어가 생각났다. 저번에 tweet에 어떠한 이모티콘이 있으면 그 감정으로 Labeling하는 논문이 있었는데 한국 tweet은 이모티콘을 많이 쓰지 않아 적용하기 어려울 것이라 생각했었다. 그러나 이모티콘으로 검색이 된다면 해당 이모티콘을 사용한 tweet을 많이 뽑아낼 수 있다는 생각을 했다. 어떻게 보면 당연한 이야긴데 깊게 생각하지 못 했던 것 같다.

 

데이터 수집

Twitter API로도 데이터를 모을 수 있지만 제한이 있기 때문에 twitterscraper 라는 오픈소스를 활용하기로 했다.

결과를 대략 보면 아래와 같다.

일단 앞의 태그를 먼저 삭제한 다음 .csv 파일로 저장했다.

이렇게 하면 아래와 같이 어느정도 태그가 분리된다.


 

Tweet 전처리

먼저 3글자 이하의 짧은 tweets를 삭제할까 했지만

위와 같이 세 글자 이하의 문장임에도 불구하고 화남의 감정이 드러나있어 삭제하지 않기로 했다.

그 다음 Null인 tweet을 삭제하기로 했다. Null인 tweet이 존재하는 이유는 이모티콘만 쓴 경우다. 따라서 의미없는 데이터이므로 삭제하는 편이 좋다.

다음으로 "허~~~ RT @gaddongyi:~"와 같은 RT 메시지를 삭제해주고 정규표현식으로 숫자와 영어 그리고 링크를 삭제해주었다.

 

추후 계획

이제 token을 만드는 방법이 두 가지가 있는데 첫 번째는 자모 분리, 두 번째는 단어로 분리하는 것이다. 일단 첫 번째는 감이 안 와서 패스하고 두 번째 방식으로 모델을 만들어보기로 했다. 하지만 띄어쓰기가 잘 안 되어있고 오타가 많아 일반적인 Tokenizer를 사용할 순 없었다. 오타가 많은 경우 자모 분리로 하는 것이 유리하지만 그 경우는 모델 개선에서 생각하고 soynlpMaxScoreTokenizer를 사용해서 단어 분리를 진행하기로 했다. MaxScoreTokenizer는 단어 점수를 이용해서 띄어쓰기가 제대로 지켜지지 않은 데이터를 tokenize 할 수 있게 한다. 그러므로 띄어쓰기가 많이 되어있지 않은 tweet 데이터에도 사용할 수 있을 것이다.

 

 


댓글