조금 다른 Topic 모델링

Rocki_log·2023년 12월 10일
0

NLP

목록 보기
2/2

기존 Topic 모델링을 주로 단어 위주로 한다. 다만 글 뭉치가 단어까지 정제 되면서 많은 데이터가 소실되지 않을까 하여, 이번 Topic모델링에서는 최대한 원문을 보존하면서 진행하였다.

1. 데이터 스크래핑

가. 방법

  • AJax를 날려 api를 호출하는 방식으로 가져왔다. 지속적으로 업데이트해야하는 데이터가 아니라 일회성이기에 빠르고 쉬운 방법을 택했다.
  • 셀레니움 이용, AJax로 세 개의 플랫폼 모두 가져올 수 있었지만 왓챠에서는 셀레니움을 이용했다. 모두랩 구성원들끼리 여러 스크래핑 방법을 함께 시도해보기 위해 왓챠만 다르게 가져와봤다.

나. 데이터 구성

  • 총 44,657 개 리뷰를 스크래핑했다.
  • 리뷰 특성상 자유롭고 다양한 표현이 많다보니, 오타나 띄어쓰기가 안되어 있는 것도 많았다.
리뷰리뷰어PK작성날짜리뷰어의 평가리뷰 공감, 비공감플랫폼
부럽다 내 행복이 먼저라고 말해주는꼰대스럽지않은멘토 우리나라에 저런제도가 있을수있을까? 혹 만들어진다해도 벤같은 경력을가진 노년이 인턴을 하려하지도 않을것이고 그리된다해도 새로운것을 배우려하지않고 내가 왕년에말이야를 늘어놓는 꼰대가될듯.n42KR7yj2NHi+CZPN+fqPQ==2015.10.015.0121cgv

2. 맞춤법 검사

  • py-hanspell은 네이버 맞춤법 검사기를 이용한 파이썬용 한글 맞춤법 검사 라이브러리이다.
  • 오타, 띄어쓰기, 비표준어, 신조어 수정 작업을 진행하였다.
  • 배우의 이름을 통일시켜주는 것은 추후 임베딩할 때에 큰 도움이 되었다.

3. 문장 분리

한 리뷰 안에 여러 의미를 함축했을 가능성을 생각하여, 리뷰를 한 문장씩 나누는 작업을 하였다.
문장 분리기를 사용하였는데, kssKiwi를 비교해보았다.

kss는 형태소 분석하여 종결 패턴 기반으로 문장을 분리하였고, Kiwi는 형태소 분석과 더불어 언어모델(SkiBigram)을 활용하여 문장을 분리하였다. Kiwi의 성능이 더 좋아 최종적으로 Kiwi를 사용하였다.

그 결과, 44,657개 리뷰가 72,287개의 문장으로 분리되었다.

4. 감성분석

처음엔 문장분리 후에 바로 군집화를 실행하였다. 그 결과 한 군집 내에서 긍정과 부정 표현이 함께 들어가서 추후 LLM을 통해 주제를 추출할 때 결과물이 안 좋았다. 그래서 감성분석 후 긍정, 중립, 부정 결과에 따라 3개의 데이터로 나눠 주었다. CLOVA Sentiment API를 활용하였다.

가. 감성분석 결과 분포

긍정, 중립, 부정 나온 결과값과 스크래핑 해온 '리뷰어의 별점'을 합산하여, 데이터를 나누었다.

5. 군집화

  • 의미 단위로 잘 묶이게 하기 위해 한국어 임베딩 모델을 사용하였다.
  • 허깅스페이스의 jhgan/ko-sroberta-multitask
  • K-means를 이용하여, 긍정/중립/부정을 각각 20개씩 군집화 진행하였다.

가. 영화 소재와 관련된 군집 선택

이번 연구에서는 LLM을 활용하기 전에 팀원들과 각 군집들의 문장들을 보며, 군집별 태깅을 하였다.
재밌다, 잔잔하다와 같이 단순 평가를 제외하고 영화 소재에 대한 의미가 담긴 군집 7가지 군집을 재조합하였다. 그 결과 4가지의 군집으로 정리가 되었다.

나. 군집 결과

  • 시니어와 관련한 사회 이슈 (긍정16/18, 중립7)
  • 직장에서 시니어 (긍정 14)
  • 일상에서 시니어 (긍정 15, 중립10)
  • 멘토와 관련한 이슈 (중립 17)

6. LLM을 통한 Topic 추출

4개의 군집의 문장들을 LLM을 통해 Topic을 추출해볼 마지막 단계이다.

가. RAG(retrieval-augmented generation)


외부 소스를 활용하여 LLM의 결과를 받아낼 수 있는 LangChain의 핵심 체인이다.

나. 요약 결과

1) 시니어와 관련한 사회 이슈(긍정16/18, 중립7)

주요 테마는 나이가 많은 사람들의 지혜와 경험을 존중하고 배우는 것입니다. 이 영화는 어른들의 조언과 도움을 받아 성장하고자 하는 젊은 세대와의 소통과 상호 이해를 강조합니다. 또한, 노년에도 새로운 도전과 성장이 가능하다는 메시지를 전달합니다. 이는 노년의 인턴으로서 새로운 경험을 하는 주인공을 통해 나타납니다. 

 "시니어의 연륜. 인생 선배로서의 적절한 타이밍의 충고!!"

2) 멘토와 관련한 이슈(중립 17)

나이와 경험에 따른 지혜, 어르신과 젊은이의 소통, 인생 선배의 조언, 은퇴 후의 새로운 시작, 부모님 세대와의 이해와 소통입니다. 이 영화는 어르신과 젊은이의 만남을 통해 나이와 경험에 따른 지혜를 전달하고, 인생 선배로서의 조언과 은퇴 후의 새로운 시작에 대한 이야기를 다루며, 부모님 세대와의 소통과 이해를 강조합니다. 이러한 주제들은 리뷰에서 다음과 같은 문장들을 기반으로 파악할 수 있습니다: 
"은퇴한 70대와 현 30대 CEO의 만남!", "나이 많고 경험 많은 분의 조언", "은퇴한 노인이 지혜로 메꿔주는 과정", "부모님 세대를 이해할 수 있는 또 다른 방법", "진짜 어른이 되고 싶은".

3) 직장에서 시니어(긍정 14)

주요 주제는 적당한 재치, 적당한 교훈, 직장에서 열정과 연륜의 조화, 나이차를 넘어선 우정입니다. 이 영화는 사람들의 행동이 기대에 부합하지 않을 때 사람들이 그들을 재평가하는 것을 다루고 있습니다. 행동이 객관적으로 긍정적이거나 그들에게 긍정적인 영향을 미친다면 사람들은 그들을 긍정적으로 평가합니다. 그렇지 않으면 사람들은 그들을 부정적으로 평가합니다. 

"연륜으로 열정이 넘치지만 여러 면에서 부족한 젊은 세대에게 도움이 되는 시니어 인턴?""연초에 킹스맨의 익살+중년미가 있었다면, 연말은 인턴의 훈훈+노년미(?)가 있다."

4) 일상에서 시니어(긍정 15, 중립10)

나이와 경험에 따른 지혜와 조언, 세대 간의 소통, 노년 시기의 다시 시작, 어른으로서의 역할과 책임, 그리고 어른들의 공경과 인생 선배로서의 역할입니다. 이 영화는 어르신들의 경험과 지혜를 소중히 여기고, 세대 간의 소통과 이해를 강조하며, 노년 시기에도 새로운 도전과 성장이 가능함을 보여줍니다. 또한, 어른으로서의 책임과 역할을 강조하며, 어른들의 공경과 인생 선배로서의 역할을 중요시합니다. 이 영화는 따뜻하고 감동적인 이야기를 통해 어른들의 가치와 중요성을 전달합니다.

"은퇴한 70대와 현 30대 CEO의 만남! get wiser as you get older."
"나이 많고 경험 많은 분의 조언현대에서도 필요하다 생각됩니다 따뜻해지고 어르신의."
"시니어의 연륜. 인생 선배로서의 적절한 타이밍의 충고!!"
"울 남편이 꼭 봐야 할 영화 이렇게 늙어갈 수 있다면~~누군가의 멘토로또 누군가의 인생 선배로 손을 내밀어 주는 어른으로 늙어갔으면."

다. 추가 연구 방법(Map reduce)

군집선택 단계를 생략하고 바로 60개의 군집별 요약을 LLM을 통해 한 뒤에 다시 Topic을 할 수 있는 방법도 있다. Map_reduce 랭체인을 활용할 수 있을 거 같다.

7. 연구를 마치며 느낀점

'나이'만 들어도 공경하던 시대가 있었는데 '시니어'가 왜 옛날보다 덜 공경받게 되었을까? 왜 더 쉽게 사회에서 배제될까? 생각해보았을 때 가장 큰 요인은 '기술에 대한 이해도'이다.

아래의 오른쪽 사진은 '한겨레' 기사 중 하나인데, 햄버거 주문을 위해 키오스크 실습을 하는 노인분들을 그린 기사이다. 상황을 가정해보자. 키오스크만으로 주문을 받는 매장에서 굳이 직원한테 주문을 하겠다고 실할이를 부리는 '노인'을 본다면 누군가는 쉽게 '꼰대'가 라고 하지 않을까. 노인은 키오스크가 두려웠을 뿐인데..

영화 '인턴'에서 시니어 인턴 역할인 벤 휘태커가 존경받는 이유는 기술을 잘 아는 '시니어'라서가 아니고 본래 시니어에 기대하던 것을 잘 했기 때문이다. 왼쪽의 리뷰가 이번 연구 목적인 'MZ가 바라는 시니어'를 가장 잘 담은 듯하다.

결론은 서로의 세대가 잘 아는 것을 세대끼리 잘 공유하고 소통한다면 우리 사회는 더 연결되지 않을까?

2023 MODUCON 발표 후기

본 연구 주제로 모두콘에서 발표를 하였다. 인문사회 분야 청중들이 많이 올 거 같아, 예시 위주로 설명을 하였는데... 모두연 행사에 그래도 너무 코드 얘기가 없었나.. 아쉬웠다. 필요하신 분은 코드 공유해드리겠다는 말이라도 마지막에 하고 싶었지만 시간이 부족해 급하게 마무리하다가 깜빡하였다... ! 그래도 재밌는 경험이었다 :)

profile
Learning&Running

0개의 댓글