AI/정책 댓글 반응 NLP 19

[4] 포털 댓글 감성 분석_3. 결과 분석

감성 분석 모델링은 순환신경망, BERT 모델에서 완료했다. 모델링 흐름도는 다음과 같다. # 모델 성능 비교 정확도를 기준으로 모델링 결과를 단순히 비교하면 다음과 같다. 대부분의 자연어 처리 태스크에서 BERT 모델의 정확도가 다른 모델들을 능가하는 것으로 알려져 있는데, 해당 프로젝트에서 모델링을 진행한 결과는 그렇지 않았다. 다만, 프로젝트가 진행될수록 일정 관리에 어려움을 겪어 BERT 모델에서 에폭 수 조정, 파라미터 조정 등 사소한 부분을 시도해보지 못한 것이 많았다는 점을 감안해야 한다. # 모델 예측 차이 정확도 외에, 각 모델이 실제로 어떻게 댓글을 예측했는지 살펴 보았다. 두 모델의 예측 결과가 다르게 나타난 댓글은 총 13만 건 정도였는데, 샘플링을 통해 랜덤으로 추출하여 어떤 차이..

[4] 포털 댓글 감성 분석_2. BERT_2. 모델링 및 예측

앞 단에 이어 모델링을 진행한다. 사전학습된 BERT 모델에 transformers 라이브러리의 분류 클래스 층을 더했다. 20200420 현재, 가장 좋은 정확도를 보인 것은 15회 학습시켰을 때 0.8678 정도였다. # GPU 설정 Keras에서와 달리, PyTorch에서 GPU를 사용할 수 있는지 알아보는 과정이 필요하다. GPU를 사용할 수 있다면, GPU를 사용하도록 장치를 설정한다. (Colab Pro 기준 : Tesla P100-PCIE-16GB) device_name = tf.test.gpu_device_name() # GPU 디바이스 이름 검사 if device_name == '/device:GPU:0': print('Found GPU at: {}'.format(device_name))..

[4] 포털 댓글 감성 분석_2. BERT_1. 사전 작업

자연어 처리 분야에서 가장 성능이 좋다고 알려진 모델은 transformer network 기반 구글의 BERT 모델(참고)이다. NLP 감성분석의 기본으로서 순환신경망 모델을 구현해 보았으니, BERT 모델에 분류층을 적용하여 결과를 비교할 것이다. Pytorch로 쉽게 BERT를 적용할 수 있게 한 Hugging Face의 transformers 라이브러리를 활용하여 작업을 진행했다. 구현을 위해 Chris McCormick의 블로그를 참고했다. # 사용 라이브러리 Pytorch Tensorflow Keras Transformers : 한국어는 bert-base-multilingual-cased 모델에 사전훈련되어 있다. pandas, numpy, tqdm # 사전 작업 데이터를 로드하는 단계까지는 ..

[4] 포털 댓글 감성 분석_1. 순환신경망_3. Word2Vec 임베딩층

Keras Embedding 레이어가 아닌, 팀 데이터셋에 맞는 Word2Vec 임베딩 층을 사용해 임베딩 층으로 주입한다. 이전의 LSTM 모델에서 임베딩 층만 달라지기 때문에, 해당 부분만 기록한다. # Word2Vec Embedding 모든 데이터셋(커뮤니티, 포털 게시글 및 댓글)을 mecab 형태소 분석기를 사용해 형태소 단위로 분석하고, Word2Vec 임베딩을 진행했다. Gensim라이브러리의 Word2Vec 모델을 사용했고, skip-gram 방식을 적용했다. 최소 등장 빈도는 5, 윈도우 사이즈는 10으로 설정하였으며, 100차원으로 임베딩하였다. 임베딩 품질을 확인하기 위해 다음의 작업을 진행했다. 첫째, 몇 가지 키워드를 선정하여 코사인 유사도가 높은 단어들을 추출했다. 어느 정도 유..

[4] 포털 댓글 감성 분석_1. 순환신경망_2. 모델링 및 예측

앞 단에 이어 모델링을 진행한다. 긍정, 중립, 부정의 3 class로 각각의 텍스트를 분류하는 작업을 수행한다. RNN과 LSTM의 성능 차이를 보기 위해 초기에 RNN, LSTM 모델을 설계했으며, 시행착오를 통해 여러 층으로 구성된 LSTM, GRU 모델을 구성했다. 본격적으로 파라미터, 층을 조정한 것은 여러 층으로 구성된 LSTM, GRU 모델에 한정하였다. 그리고 20200418 현재, 가장 좋은 정확도를 보인 모델은 양방향 LSTM 층을 적용한 모델이다. 테스트 셋에 대한 정확도는 0.9056이다. 이 모델을 통해 포털 댓글에 대한 감성 분석 분류 작업을 수행한다. # 공통 사항 임베딩 : Keras의 Embedding 레이어 사용. 100차원 임베딩. 옵티마이저 : adam. loss 측정..

[4] 포털 댓글 감성 분석_1. 순환신경망_1. 사전 작업

앞 단에서 감성어 사전(0417 현재 기준 ver3), 긍/부정 라벨링된 커뮤니티 게시글 및 댓글 데이터셋을 구축했다. 감성분석 모델링을 수행할 준비를 마쳤다. 이제 네이버, 다음, 유튜브 등 포털에서 수집한 180만 건의 댓글 데이터를 대상으로 감성분석을 수행한다. 우선 자연어 처리에 많이 활용되는 딥러닝의 순환신경망 알고리즘을 사용한다. 그 중에서도 RNN 알고리즘을 개선/변형한 LSTM, GRU 알고리즘을 적용한다. (각 모델에 대한 공부는 StudyLog에서...) 본격적으로 모델을 설계하고 적용하기에 앞서, 문장 토큰화, 불용어 처리 등의 작업을 진행한다. 참고 : 「케라스 창시자에게 배우는 딥러닝」, 「딥러닝을 이용한 자연어 처리 입문」 # 사전 작업 # install KoNLPy ! pip3..

[3] 커뮤니티 글 데이터셋 라벨링

감성분석을 모델링을 진행하기에 앞서 긍정, 부정이 라벨링된 Train Set을 만들기로 했다. 감성어 사전을 바탕으로 형태소 분석을 진행한 뒤, 문장 내 형태소가 긍정어 사전에 있으면 점수에 +1을, 부정어 사전에 있으면 -1을 했고, 각 문장별로 점수가 0보다 작으면 부정(-1), 0보다 크면 긍정(1), 0이면 중립/unknown(0)으로 라벨링했다. 이번 단계의 작업을 통해 얻고자 하는 결과물은, 커뮤니티 게시글, 댓글을 문장 단위로 나누어 긍/부정 라벨링을 진행한 데이터셋이다. # 사용한 라이브러리 KoNLPy Pandas, Numpy Matplotlib.pyplot, Seaborn 더보기 Jupyter Notebook 및 윈도우 환경에서는 KoNLPy를 사용하기에 제약이 많다. 따라서 Googl..

[2] 감성어 사전 구축

팀원 간 역할 분담을 통해 포털 사이트 뉴스 플랫폼(네이버, 다음), 유튜브, 커뮤니티(MLBPARK, 루리웹닷컴, 보배드림, 클리앙)에서 약 180만 건의 댓글 데이터를 확보했다. 0408 회의 이후, 데이터 취합 및 전처리, 감성어 사전 구축으로 인원을 분배하여 최대 3일 간 작업을 진행하기로 하였다. 나는 후자의 작업을 맡았다. 해당 단계의 작업을 통해 얻고자 하는 결과물은, 문장별로 긍정/부정을 라벨링하기 위한 근거로서의, 형태소별로 구분된 긍정어/부정어 사전이다. # 데이터 인터넷 게시물, 댓글 데이터는 맞춤법이 제대로 지켜지지 않고, 신조어와 비속어가 많다. 우리 데이터의 특성을 고려한 감성어 사전을 구축해야 한다. 그러나 180만 건의 데이터를 모두 형태소 단위로 분석하고 확인하는 것은 불가..

[1] 네이버 뉴스 댓글 크롤러_ver2

네이버 뉴스 기사량이 많아 팀원과 작업을 분배하여 2019년 기사를 수집했다. ver1.5의 크롤러를 수정했다. 작업을 통해 얻고자 하는 결과물은 네이버에서 '주52시간'으로 검색했을 때 나오는 2019년의 모든 기사들 중 네이버 뉴스 플랫폼에 등록된 기사들의 기사 제목, 언론사, 기사 작성 시간, 댓글 수, 댓글 작성자, 댓글 내용, 댓글 공감/비공감 수이다. # 변수 설정 1년치 기사량이 많아 한 번에 크롤링할 수 없다. 한 달씩 나누어 작업을 진행했다. 월별로 기간을 지정해 기사를 검색하고, 기사 양에 맞게 최대 페이지를 지정해 준다. 다행히 한 페이지당 10개씩 기사가 보여지기 때문에, 페이지를 지정하는 일이 쉬웠다. URL이 조금 달라졌는데, 시작 날짜를 나타내는 ds, 종료 날짜를 나타내는 d..

[1] 커뮤니티 게시물 크롤러_2. 루리웹닷컴

# 사전 작업 루리웹닷컴의 경우, 검색어를 통합검색 창에 검색했을 때 뉴스, 게시글, 댓글, 마이피, 구글 통합검색 결과가 모두 검색되어 한 화면에 결과로 나온다. 뉴스와 구글 통합검색 결과는 애초에 팀의 크롤링 대상이 아니기 때문에 제외한다. 마이피는 루리웹닷컴만의 게시판인 것 같은데, 루리웹 회원들만의 공간으로 판단된다. 회원 아이디가 없으면 접근할 수 없는 경우도 있고, 공론장에 게시된 글이나 댓글으로 판단하기에는 무리가 있기 때문에 크롤링하지 않는다. 따라서 검색 결과 창에서 게시글과 댓글만을 크롤링하기로 한다. 그러나 의사결정이 필요한 부분에 부딪혔다. 문제는 다음과 같았다. 첫째, 댓글로 검색된 결과 중 게시글 검색 결과에 포함된 글이 있을 수 있다. 둘째, 댓글로 검색된 결과 중, 실제 클릭..