일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 자연어 모델
- 옵티마이저
- 붕괴 스타레일
- Roberta
- 문맥을 반영한 토픽모델링
- 개체명 인식
- 구글 스토어 리뷰
- NLP
- 코사인 유사도
- SBERT
- 블루 아카이브
- 피파온라인 API
- 트위치
- 다항분포
- 조축회
- 원신
- 데벨챌
- 데이터리안
- CTM
- Optimizer
- Tableu
- 데이터넥스트레벨챌린지
- 블루아카이브 토픽모델링
- geocoding
- 클래스 분류
- 토픽 모델링
- BERTopic
- KeyBert
- 포아송분포
- LDA
- Today
- Total
분석하고싶은코코
모바일 4가지 게임 리뷰 토픽 모델링 분석(6) 본문
지난 포스팅
1) 데이터 수집, 전처리 - https://coco0414.tistory.com/82
2) LDA 토픽 모델링 - https://coco0414.tistory.com/83
3) CTM 토픽 모델링 - https://coco0414.tistory.com/84
4) KeyBert 토픽 모델링 - https://coco0414.tistory.com/85
5) BERTopic 토픽 모델링 - https://coco0414.tistory.com/86
데이터 수집부터 모델링 관련 코드는 Github에 업로드해두었습니다.
드디어 모든 토픽 모델링이 끝났습니다. 이번 포스팅에서는 4가지 모델링에 대한 각 게임에 대한 내용을 정리하며 프로젝트 마무리해보겠습니다.
+ BERTopic시각화 사용법 대해서 궁금해 하신분들이 있어서 블루아카이브의 BERTopic 시각화 일부를 밑에 공유하였습니다.
4) 결론
이번 토픽 모델링의 결과는 CTM과 BERTopic을 통한 토픽 모델링 성능이 LDA, KeyBert보다 우수하다고 할 수 있었습니다. 그런 이유에 대해서 생각해보면 KeyBert의 경우에는 리뷰들에 대한 토픽 모델링 보다는 문서에 대한 토픽 모델링, 문서 축약에 더 적합한 알고리즘으로 작동하기 때문이라고 생각됩니다. 보다 정확한 모델링을 위해서는 CTM 공식 문서에서 언급한바 있지만 사용할 데이터의 전처리를 목적에 맞게 깔끔하게 할 필요가 있습니다. 이번 프로젝트에서는 4가지 게임을 공통적으로 모델에 적용했기 때문에 세세한 전처리 과정을 거치치 않았지만 한글 형태소 분석기에 사전을 추가하여 단어 분리를 좀더 정확하게 할 수 있게 한다면 아마 더 좋은 결과가 나왔을 것으로 예상됩니다. 가능하다면 애플스토어와 구글 스토어 유저 세그먼트를 분리하여 진행해보는것도 흥미로운 결과가 나왔을 것 같다 생각이 들었습니다. 그럼 이제 4가지 게임에 대한 토픽 모델링 결과에 대해서 이야기해보겠습니다.
블루 아카이브
블루 아카이브의 경우 탄탄한 고객층이 존재하는 게임으로 보입니다. 특히 디렉터를 좋아하는 게이머들이 상당히 많은 것과 스토리나 더빙에 대한 칭찬이 많이 보이는 결과들을 확인할 수 있었습니다. 또, 토픽 모델링을 통해 확인할 수 있었던 부분은 실제 블루 아카이브를 플레이하는 유저들은 게임관리위원회의 검열과 관련된 이슈에 대해서 게임사 편을 들고 있다는 점을 알 수 있었습니다. 아쉬운 부분이나 부정적인 부분에 대해서는 모바일 게임에 없을수 없는 가챠(뽑기)와 관련 문제도 있었고 마지막 버토픽에서 핵과 관련된 이슈가 부정적 리뷰를 작성하게 만드는 원인 중 하나로 확인 할 수 있었습니다.
긍정 : 김용하 디렉터, 검열, 스토리
부정 : 핵, 방치, 가챠(뽑기), 발열
니케
니케는 4가지 게임중에 스타레일 다음으로 최근에 출시도니 게임으로 서비스 기간이 1년 미만인 게임이라 서비스 초기 단계에 있을 수 있는 불만 사항들이 많이 보였습니다. 게스트 계정에 대한 문제가 보이기도 하였고 발열이나 최적화 같은 키워드나 토픽들이 등장하는 모습을 확인할 수 있었습니다. 또한, 블루 아카이브와 똑같이 가챠(뽑기)에 대한 토픽도 확인할 수 있었는데 의외로 긍정적인 리뷰에서 이 부분에 대해서 수용이라는 키워드가 포함된 토픽들이 존재해 가챠 시스템을 감수할만한 매력을 가진 게임이라고 볼 수 있습니다. 긍정적인 토픽들로는 전투방식에 대한 손맛을 언급하는 토픽이 존재하였고 특정 캐릭터들에 대한 언급이 잦은것으로 보아 성능이 압도적으로 좋은 캐릭터나 외적인 매력이 확실한 존재하는 캐릭터가 있는 것으로 유추해볼 수 있었습니다.
긍정 : 전투방식, 스토리, 가챠(뽑기)의 수용, 성우, 더빙
부정 : 쿠폰 선착순, 가챠(뽑기), 발열, 최적화
원신
원신은 모든 모델링에서 지속적으로 등장하던 이슈들이 있었고 BERTopic을 통해서 세부적인 토픽과 키워드들을 확인할 수 있었습니다. 아무래도 가장 많은 리뷰를 보유하고 있었기 때문에 보다 정확한 토픽 모델링이 이뤄지지 않았나 생각됩니다. 부정적 키워드로 볼 수 있었던 젤다 표절과 관련된 키워드는 오히려 긍정에서는 힐링, 자유도라는 키워드로 만족하는 유저들이 있는 것을 확인할 수 있었습니다. 특이한점은 가챠(뽑기) 시스템이 존재함에도 해당 시스템에 대한 불만이 가장 적은 것이 인상적이었습니다. 아무래도 게임 접근방식에서의 차이가 있어서 해당 리뷰들이 덜 언급된 것이 아닌가라는 생각도 듭니다만 이번 분석에서 접근방식에 대한 언급은 스마트폰 기기에 대한 오류, 로딩에 대한 문제 토픽, 키워드만 있었을뿐 그외는 알 수 없었기 때문에 다른 데이터를 통해서 알아보는게 필요해보였습니다. 4개 게임중 가장 오래된 게임임에도 스토리에 대한 칭찬이 있다는 것도 확인할 수 있었습니다.
긍정 : 스토리, 자유도, 힐링
부정 : 젤다 표절, 중국
붕괴:스타레일
붕괴:스타레일은 가장 최근에 출시한 게임임에도 번역에 대한 너무 큰 이슈를 겪어서 해당 이슈에 대한 키워드가 긍,부정 할 것 없이 많이 보였습니다. 이로 인해서 게임사나 번역업체에 대한 불만 키워드들도 많이 보였습니다. 그렇지만 긍정 리뷰를 남겨준 유저들의 경우 해당 이슈임에도 게임 자체에 대한 긍정적인 평가를 남기고 번역 이슈에 대한 아쉬움과 잘 해결되길 바라는 키워드들이 눈에 보였습니다. 오히려 부정적 리뷰에서 번역에 대한 퀄리티를 지적하는 토픽이 많았습니다. 그렇지만 게임의 스토리나 더빙에 대해서는 만족한다는 토픽들도 존재하였고 신규 게임이다보니 특정 캐릭터들에 대한 언급도 많았습니다. 또한 원신과 붕괴에 대한 언급이 많았는데 아무래도 원작이 있고 같은 게임사에 대형 IP가 있어서 동시에 언급되는 부분이라고 보였습니다. 그렇지만 두 게임과 비교해서 만족하는 유저들도 있었는데 붕괴와 비교해서 실망하는 유저들은 부정 리뷰에 많이 등장하는 것을 확인할 수 있었습니다.
긍정 : 스토리, 더빙
부정 : 번역, 오역
4가지 게임 모두 스토리나 더빙에 관한 긍정적인 리뷰들이 많이 존재하는 것을 확인할 수 있었습니다. 분재형 모바일 게임이 성장 요소에는 분재 게임 방식을 유지하지만 그외의 즐길거리에는 정성(?)을 들인다는 느낌을 유저들이 굉장히 긍정적으로 받아들이는 것으로 보였습니다. 스토리와 관련된 장점은 4가지 게임 모두 공통적으로 있던 부분이기에 특정 게임만의 강점으로 뽑기는 어려운 점인 것 같았습니다.
프로젝트 후기
모델
이번 프로젝트를 진행하면서 아쉬운 점은 KeyBert에 대한 성능을 제대로 확인하지 못한 것이 가장 아쉬운 부분으로 남았습니다. 이번 프로젝트에는 조금 맞지 않는 모델이었지만 커널 이슈로 인해서 전체 데이터에 대한 모델링을 제대로 해보지 못한 부분이 좀 아쉬운 부분으로 남았습니다. 반대로 BERTopic의 개발자의 말대로 LDA보다 좋은 토픽 분류 모델이다라는 것을 직접 결과를 통해 확인해볼 수 있는 것은 큰 수확이었습니다.
데이터
이번에 세세히 진행해보지 못한 전처리(단어 치환 부분)를 좀 더 깊이 있게 진행하고 구글스토어 리뷰만이 아니라 애플스토어의 리뷰 데이터까지 다뤘다면 보다 다각적인 결과를 낼 수 있었을 것 같아 다음 프로젝트에서는 애플스토어와 비교하는 간단한 프로젝트로 진행해보려고 고려하고 있습니다.
+ BERTopic 시각화 (블루 아카이브 - Mecab)
지난번 포스팅에도 작성하였지만 BERTopic의 시각화 함수들은 plotly로 그려져 동적인 시각화를 제공합니다. plotly 모듈의 결과가 공유나 호환이 어렵기 때문에 직접 꼭!! 결과를 확인해보시는걸 추천드립니다.
- topics_over_time()
훈련 데이터 셋에 리뷰 작성일이 있다면 시간에 따른 변화 과정을 확인이 가능합니다. 시각화는 다음과 같은 차트가 굉장히 유용하게 사용될 수 있습니다. 'topics_over_time'으로 문서와 타임스탬프를 전달해주면 시각화가 가능한 형태의 데이터를 넘겨줍니다. 이를 모델의 visualize_topics_over_time에 값으로 넣어주고 원하는 토픽수를 적어주면 수에 맞는 상위 토픽의 시간에 따른 변화를 볼 수 있습니다.
documents = b_a.values
preprocessed_documents = []
time_stamps = []
for idx, row in ba.iterrows():
line = row['content']
if line and not line.replace(' ', '').isdecimal():
preprocessed_documents.append(line)
time_stamps.append(row['writed_at'][:10]) # 2023-10-13 형태로 정규화
# 시간에 따른 토픽 시각화
topics_over_times = loaded_model.topics_over_time(docs = preprocessed_documents, timestamps=time_stamps)
loaded_model.visualize_topics_over_time(topics_over_times, top_n_topics=10)
- get_topic_info()
분류한 토픽의 키워드와 대표적인 예시 문장들을 보여줍니다.
# loaded_model은 BERTopic 모델명
# 출력 결과에서는 10개로만 출력했습니다. 해당 코드 실행시 하이퍼파라미터로 설정한 토픽수만큼 출력됩니다.
loaded_model.get_topic_info()
<결과>
Topic | Count | Name | Representation | Representative_Docs | |
---|---|---|---|---|---|
0 | -1 | 3646 | -1_게임_캐릭터_스토리_개발 | [게임, 캐릭터, 스토리, 개발, 유저, 과금, 생각, 운영, 컨텐츠, 오류] | [요즘 워낙 화려한 그래픽 지닌 게임들 늘어나다 보니 게임 재밌는가 고민할 때 그래... |
1 | 0 | 1150 | 0_게임_개추_몰루_개꿀 | [게임, 개추, 몰루, 개꿀, 조아, 용하, 사료, 버튜, 우흥, 야호] | [갓게임, 갓게임, 망게임] |
2 | 1 | 1083 | 1_발열_용하_사랑_기대 | [발열, 용하, 사랑, 기대, 운영, 게임, 확률, 리뷰, 필요, 이게] | [이쁘고 커여워 사랑해 갓용하, 사랑해요 갓용하, 그저 갓게임입니다 용하형 사랑해요] |
3 | 2 | 940 | 2_확률_리세_픽업_삭제 | [확률, 리세, 픽업, 삭제, 오류, 계정, 과금, 업데이트, 이거, 게임] | [확률 진짜 너무하네요 만원 과금했는데 한 장 안 나오 건 좀 접습니다, 엥간하면 ... |
4 | 3 | 616 | 3_최적화_최고_재미_완벽 | [최적화, 최고, 재미, 완벽, 만족, 시로코, 어용, 아루, 기적, 히나] | [최고, 최고, 최적화최적화최적화최적화최적화최적화최적화최적화최적화최적화최적화최적화최... |
5 | 4 | 119 | 4_과금_픽업_캐릭_천장 | [과금, 픽업, 캐릭, 천장, 확률, 생각, 사람, 스테이지, 스킬, 정도] | [이게임 잘한점 장점 핵계정 밴한거 일러스트 더빙 마음에든다 간단한 조작 시스템 설... |
6 | 5 | 117 | 5_캐릭터_스토리_컨텐츠_게임 | [캐릭터, 스토리, 컨텐츠, 게임, 요소, 매력, 과금, 전투, 플레이, 부분] | [캐릭터 사운드같 게임성 외적인 요소 정말 너무 맘에들어요 게임 자체 스마트폰 게임... |
7 | 6 | 99 | 6_미래_게임_김봉정_우리 | [미래, 게임, 김봉정, 우리, 분만, 구동, 초갓, 로리, 운영, 서브] | [미래시박살 미래시질문 밸런스답하 인터뷰 꼬라지 기습픽업공지, 김봉정 우리미래, 김... |
8 | 7 | 98 | 7_게임_확률_방치_성인 | [게임, 확률, 방치, 성인, 주작, 무시, 쓰레기, 조작, 개똥, 바보] | [확률 조작 망게임, 확률조작쓰레기게임, 리세 쓸데없 시간 먹게하고 유저별 확률조작... |
9 | 8 | 92 | 8_애플리케이션_다운로드_화면_스마트폰 | [애플리케이션, 다운로드, 화면, 스마트폰, 업데이트, 플레이, 실행, 문제, 현상... | [다운로드 중 계속 다운로드 실패하여 애플리케이션 종료합니다 다시 애플리케이션 실행... |
- visaulize_distribuiton
훈련된 모델에 probabilities_를 통해 해당 데이터가 어디 토픽에 근접한지를 확인할 수 있는 시각화 함수입니다.
# 선택한 리뷰에 대해서 토픽의 확률을 보여줍니다.
loaded_model.visualize_distribution(loaded_model.probabilities_[200], min_probability=0.015)
- visualize_hierarchy
BERTopic은 HDBSCAN을 통한 계층 클러스터링이 진행됩니다. 이 과정에서 토픽이 어떻게 군집화가 진행됐는지 확인해볼 수 있는 시각화 함수입니다.
# HDBSCAN을 통한 계층 클러스터링 관계를 토픽수만큼 보여줍니다.
loaded_model.visualize_hierarchy(top_n_topics=10)
해당 계층도를 통해 토픽들이 어떻게 분기되었는지 확인할 수 있습니다.
- visaulize_barchart
각 토픽에 주요 단어들이 무엇인지 확인할때 쓰기 좋은 시각화 함수입니다. 원하는 토픽수, 단어수를 입력하여 그래프를 얻을 수 있습니다.
# 파라미터로 지정한 토픽수 만큼 지정한 상위 키워드의 토픽에서 중요도를 보여줍니다.
loaded_model.visualize_barchart(top_n_topics=10, n_words = 6)
- visualize_term_rank()
BERTopic에서 다르게 제공하는 토픽 키워드의 트렌드는 다음과 같은 시각화도 제공합니다. 해당 그래프에 대한 해석은 이번 포스팅에서 다루기엔 내용이 너무 길어지니 참고할 수 있는 링크 남기겠습니다.
model_mecab.visualize_term_rank()
'머신러닝&딥러닝 > NLP' 카테고리의 다른 글
NLP - 텍스트 요약(Text Summarization) + BERTsum 논문 톺아보기 (1) | 2023.10.16 |
---|---|
NLP - 텍스트랭크(TextRank) (1) | 2023.10.16 |
모바일 4가지 게임 리뷰 토픽 모델링 분석(5) (2) | 2023.10.12 |
모바일 4가지 게임 리뷰 토픽 모델링 분석(4) (1) | 2023.10.12 |
모바일 4가지 게임 리뷰 토픽 모델링 분석(2) (0) | 2023.10.11 |