앞서 토크나이저 비교 포스팅에서 카카오의 Khaiii를 활용하여 Aspect Extraction task를 위한 데이터셋 라벨링 작업을 해보기로 결정했다. 여기엔 어떤 단계를 밟아가면서 이 작업을 수행할지 계획을 메모해두려고 한다.
여기서는 대략적인 틀에 대해서 소개하고, 진행하고 있는 내용을 짧게짧게 다음 시리즈로 공유할 생각이다.
리뷰는 정말 자유분방하다. 띄어쓰기가 일관되게 지켜지거나 안 지켜지는 것도 아니고, 오타도 많다. 심지어 아무 내용이 없이 이모티콘만 남겨져 있는 경우도 있다.
스크래퍼로 리뷰를 긁어오는 과정에선 '한달사용기', '재구매'를 안내하는 문구만 지웠다. 리뷰 데이터를 탐색한 결과 추가로 처리해줘야할 내용들이 있어서 적용해본다.
카카오의 Khaiii 토크나이저를 활용해 아래처럼 형태소 단위로 자른다. 그리고 하나의 상품군 내에서 형태소의 빈도를 표현하는 counter를 만들고, word-level에서의 유사 TF-IDF score를 커스터마이징하여 스코어를 뽑아낸다. 그리고 이 둘을 함께 활용해서 aspect 단어가 될 만한 후보군들을 추출해본다.
이 부분은 AI 모델이 해야 하지만, 학습을 위한 데이터셋을 구축할 때에는 수작업이 들어가야한다. 한국어로 라벨링된 데이터셋이 없고, aspect라는 게 어떤 객관적인 기준이 있는 게 아니라 단지 상품을 잘 표현해줄 수 있는 단어들이기 때문에 어떤 룰(Rule) 만으로 완전하게 판단할 수 없다.
여기서는 앞서 선정한 aspect 후보군을 seed로 삼고, 상품군A에 대한 모든 리뷰들을 대상으로 Word2Vec(skipgram) 방식으로 embedding 벡터들을 학습하여, 유사한 단어들을 추려낸다.
Pre-defined된 카테고리와 그에 해당하는 문장 내 주요 단어(aspect word) 관계처럼 seed와 관계된 단어들을 일단 다 뽑아보는 것이다. 그리고 파일로 뽑아내어 직접 부적절한 단어들은 걸러낸다..(걸러냈다)
AE나 AOPE(Aspect-Opinion Pair Extraction)을 위한 데이터셋은 흔치 않다.
I’ve asked a cart attendant for a lotus leaf wrapped rice and she replied back rice and just walked away. → {SERVICE#GENERAL, “cart attendant”, negative, from="12" to="26"}
sentence: Easy to start up and does not overheat as much as other laptops.
aspect: Easy\O to\O start\B up\I and\O does\O not\O overheat\O as\O much\O as\O other\O laptops\O .\O
opinion: Easy\B to\O start\O up\O and\O does\O not\O overheat\O as\O much\O as\O other\O laptops\O .\O
여기서는 한글 리뷰로 아래 TOWE 형태의 데이터셋을 구축해보려고 한다. 이후 Token level classification으로 접근해야 하기 때문이다.