본 포스팅은 2022년 05월 26일을 기준으로 작성되었습니다.
NLP: 자연어 처리는
인공지능의 주요 분야 중 하나로,
주로 머신러닝을 사용하여 컴퓨터가 자연어를 이해하거나
생성할 수 있도록 하는 학문 중 하나입니다.
NLP에는 다양한 모델이 존재합니다.
그중에 한글 감성 분석 모델(matthewburke/korean_sentiment)과
영문 감성 분석 모델(distilbert-base-uncased-finetuned-sst-2-english)를
비교 하여 분석해 봅니다.
분석에 사용될 데이터는 "구글 플레이 스토어"에서 앱 리뷰를 크롤링하여 Elasticsearch에 인덱싱 하였습니다.
특정 앱의 리뷰내용, 날짜, 별점 등을 가져오고, 리뷰내용을 다시 구글 번역기에 돌려 영문 리뷰를 같이 가져오는 방식입니다.
Elasticsearch에서 NLP를 적용하기 위해서는 총 4개의 스텝으로 진행하시면 됩니다.
Trained Model (학습된 모델) 고르기
Trained Model (학습된 모델)과 vocabulary 업로드
Elasticsearch에서 모델 활성화 하기
Index에 적용 시키기
https://www.elastic.co/guide/en/machine-learning/current/ml-nlp-deploy-models.html
위에 4단계만 천천히 따로오시면 NLP를 손 쉽게 적용 하실 수 있습니다.
두번째 단계: Trained Model (학습된 모델) Import
본 예제는 Jupyter Notebook에서 Eland(엘란트) Python Client를 설치하여 import하였습니다.
자세한 내용은 링크를 클릭하여 따라 하시면 됩니다.
(https://github.com/elastic/eland#nlp-with-pytorch)
Eland(엘란트) Client의 버전차이를 잠깐 설명드리겠습니다.
Eland v8.1의 경우, config.json 파일이 생성되어, 파라미터 수정을 할 경우 config.json 파일을 열어 수정을 하셔야 합니다.
Eland v8.2부터는 config 내용이 객체로 생성되기 때문에, Import 명령어 입력 시, 객체의 매개변수를 바로 수정할 수 있습니다.
세번째 단계: 실행 시키기
두번째 단계에서 Import 시킨 엘라스틱의 Kibana를 열어 줍니다.
메뉴에서 Machine Leaning > Trained Models 페이지로 이동하여 Import한 모델이 제대로 들어왔는지 확인합니다.
그리고 해당 모델에 마우스를 올리면 오른쪽에 Play버튼이 나타나고, Play버튼을 클리하고 잠시만 기다리시면 모델이 적용됐다는 알림을 보실 수 있습니다.
네번째 단계: Index에 적용하기
Pipeline을 생성해 Index에 적용시켜 줍니다.
Pipeline은 Dev Tools에서 직접 코드를 입력해줄 수도 있지만, Kibana GUI를 이용하면 좀 더 편리하게 만들 수 있습니다.
Kibana 메뉴에서 Stack Management > Ingest Pipelies > Create Pipeline로 접속하시면 좀 더 편리하게 Pipeline을 만들 수 있습니다.
NER (Named Entity recognition)
주어진 텍스트를 분석해서 사람, 장소, 날짜 등에
대한 정보를 추출해주는 모델입니다.
Text classification
주어진 텍스트를 분석해서 분류를 나눠주는 모델입니다.
(위의 예제에서는 "LABEL_0"이 부정을, "LABEL_1"이 긍적을 뜻합니다.
해당 텍스트를 분석하여 긍정문인지 부정문인지를 분류해주는 모델입니다.)
"한글 감성 분석 모델 vs 영문 감성 분석 모델 중 어느 모델이 정확도가 높은가?"라고 하였을 땐, 둘 다 각각 언어에 대한 분석 결과는 상당히 높다(약 80% 이상)라고 판단했습니다. 단지, 어떤식으로 해석하느냐에 차이가 있다고 생각됩니다.
위의 예제는 한글은 "긍정", 영문은 "부정"이라고 판단한 예문입니다.
한글 모델은 "~하면 좋겠습니다." 라는 문구를 긍정으로 판단했고, 영문 모델은 "better ~"이라는 문구를 부정으로 판단했음을 알 수 있습니다.
(개인적인 의견으로 부정으로 판단하는게 맞다고 생각함..)
결국, 가장 의미있는 내용은 별 5개에 영문 "부정"으로 판단한 내용들입니다.
별점은 앱에 대한 전체 평가를 했다면, 영문 "부정"으로 판단된 내용은 전체적으로는 굉장히 유용하고 좋은 앱이지만 개선되야하는 점을 적어준 내용이라고 생각합니다. 리뷰를 보면 앞에는 "잘 사용하고 있습니다." 등의 문구로 시작해서, 그런데 "이런 점이 조금 불편해요" 또는 "이런 점이 개선되면 더 좋을 것 같아요" 라는 멘트를 사용합니다.
즉, ★★★★★ + 영문"부정" 은 이 앱의 해비유저가 사용하면서 느낀 불편한 내용을 기술했다고 볼 수 있습니다. 앱 개발자들이 이 내용만 추려서 업그레이드해도 고객의 불만이 많이 해소될 것으로 예상됩니다.
@younabiya, @황한결