Natural Language Processing Basic
13기 조상연
Week8) NLP 기초
13기 조상연
과제내용
파일로 제공되는 정형 데이터가 아닌, ‘크롤링’으로 데이터를 수집해주세요.
임베딩 모델을 2개 이상 적용해본 후, Step5의 결과에 따라 가장 좋은 모델을 선택해주세요.
ex) CBOW, Skip-gram, GloVe, NN, FastText 등
RNN, LSTM 등 모델링을 하는 것이 아니기 때문에 이번 과제에서는 텍스트를 전처리,
토크나이징, 임베딩 후 인사이트를 도출하는 경험이 중요합니다.
주석 꼭 꼼꼼하게 달아주시고 데이터가 자유인만큼 참신한 인사이트 찾아주세요!
우수과제 선정이유
흐름이 정확하게 잡있고 출제자의 의도대로 깔끔하게 정리해 주셨습니다. 특히 임베딩 모델간의 이에 대해서 구체적으로 잘 비교해 주셔서 다른분들이 충분히 참고할만한 과제였습니다.
1. Data Crawling
데이터는 뉴스 빅데이터를 제공해주는 빅카인즈를 통해 크롤링을 진행하였다. 데이터의 종류는 중앙지 전체의 [정치, 경제, 사회, 문화, IT] 분야 분석기사를 수집하였다. 기간은 최근 3개월로 약 2만여건의 뉴스 기사를 수집하고 이를 기반으로 문장별 전처리, 토크나이징을 진행하였다.
데이터 소스: https://www.bigkinds.or.kr/
In [2]:
In [ ]:
In [ ]:
In [68]:
In [70]:
Out[70]:
In [72]:
In [ ]:
In [98]:
Out[98]:
In [12]:
In [392]:
In [393]:
Out[393]:
2. Preprocessing
In [559]:
In [400]:
In [401]:
In [404]:
In [405]:
Out[405]:
총 492,264 문장
In [406]:
2.1 형태소 추출 테스트
In [53]:
In [407]:
In [408]:
Out[408]:
In [409]:
Out[409]:
In [410]:
Out[410]:
In [411]:
신문 기사인 만큼 띄어쓰기가 잘 되어있어 띄어쓰기 오류에 따른 성능 하락은 보이지 않지만, 도널드 트럼프나 김여정 같이 인물 이름에 대해서 kkma가 제대로 분류하지 못하는 모습을 보인다. 비슷한 성능에서 카카오 Khaiii가 압도적인 시간적 성능을 보이고 있어 Khaiii를 토크나이저로 선정하였다.
3. Tokenizing
In [511]:
In [412]:
Out[412]:
In [512]:
In [414]:
In [513]:
Out[513]:
In [416]:
Out[416]:
In [436]:
Out[436]:
In [515]:
In [516]:
Out[516]:
4. Embedding
임베딩은 Skipgram, CBOW, FastText 총 3개의 모델을 통해 이루어졌다. CBOW가 가장 빠른 학습 속도를 보였으며, FastText가 그 이름이 무색하게 가장 느렸다.
In [417]:
In [418]:
In [492]:
전체적으로 괜찮은 성능을 보여준다. 비판에 대해 질타, 비난 등 유의어가 많이 나오고 같은 품사가 나와 잘 학습되었음을 알 수 있고, 대통령에 대해선 확실히 문재인, 트럼프 등 현 대통령의 이름이 거론되는 것이 보인다. 중국에 대해선 유의어로 여러 국가명이 나오는 것도 합리적으로 보인다. 다만 바이러스의 유의어로 나온 증우/임부는 어떤 단어인지 유추가 되지 않는 문제가 있다.
In [420]:
In [421]:
In [422]:
비판의 유의어로 비난, 반박 등이 나온 것은 모델이 유의어를 잘 찾아냈음을 보여준다. 하지만 대통령에 대해선 별로 관련 없는 단어가 많고, 대체어란 느낌 보단 같이 쓰이는 단어의 느낌이 강하다. 중국 같은 경우에 비슷한 국가 이름이 나오는 모습이 보이고, 바이러스의 같은 경우 비말, 사이토카인과 같이 코로나와 많이 나오는 단어가 같이 나오는 것이 인상적이다.
In [423]:
In [424]:
In [426]:
이전 모델과 확실히 다른 점은 확실히 Charater(음절) 하나 하나에 대한 일치도를 본다는 느낌을 받을 수 있다. 바이러스의 유의어로 온갖 바이러스가 등장하고 중국의 유의어로 중국 + 나라명이 많이 나온다. 이는 기사에서 미국, 중국 이런 식으로 쓰여졌으나 특수문자 제거 및 토크나이징하는 과정에서 합쳐진 것으로 보인다. 이를 통해 FastText를 사용할 땐 캐릭터 단위의 전처리를 신경써야하며 가급적 띄어쓰기 등을 통해 이를 나누어줘야한다 는 인사이트를 얻을 수 있었다.
In [427]:
In [428]:
In [517]:
확실히 캐릭터 기반이라 품사 태깅을 제외하여 그 길이를 줄이니 학습 속도가 2배로 빨라졌다.
In [518]:
5. Analysis
코사인 거리와 유클리디안 거리로 각 단어들간의 거리 차이를 알아보며 모델 간 차이를 비교해본다.
In [ ]:
In [493]:
모델에 이미 내장된 거리 계산법이 코사인 기준임을 알 수 있다.
In [495]:
Out[495]:
현재 10차원 벡터로 10차원에서의 유클리디안 거리의 최대가 6.3임을 알 수 있다.In [501]:
In [502]:
유클리디안 거리와 코사인 거리를 볼 수 있는 Helper 함수 제작 후 테스트
In [558]:
5.1 손길 단어 비교
In [496]:
Skipgram 모델에선 코사인 유사도와 유클리디안 유사도가 모두 낮게 나오는 것을 알 수 있다.
In [497]:
Skipgram에서 선교지가 유사 단어로 나온 것 처럼, Cbow에선 전지전능과 영생이 나온 것으로 보아 기독교 문맥에서 손길이 많이 나온 것으로 보인다. 인상적인 것은 유클리디안 거리가 먼 것으로 나옴에도 Cosine유사도로는 매우 가깝게 측정된다는 것이다. 즉 차원에서의 거리는 멀지만 각도가 비슷한 단어들이며 의미론적으로 비슷하다고 학습된 것이다.
In [498]:
FastText 모델에선 코사인 유사도가 가장 높은 사랑밤길이 유클리디안 거리가 가장 멀다는 점이 눈에 띈다. 캐릭터 단위의 유사도가 코사인 유사도에 반영되어 있음을 알 수 있다.
5.2 킹통령 단어 비교
In [ ]:
In [550]:
FastText 모델은 학습하지 않은 단어에 대해서도 벡터를 구할 수 있다는 장점이 있다. 위와 같이 뒤통령 / 초통령 / 군통령 등 다양한 통령이 유사하게 구해진 것을 알 수 있다.
5.3 Fast_Text No Tage 모델
Fast Text의 캐릭터 기반 분석에 맞게 품사 정보를 제외한 코퍼스로 학습시킨 Fast_Text_model_no_tag 모델을 생성한 후 비교해보았다.
In [551]:
의외로 기대했던 통령과 비슷한 단어를 찾지 못하는 모습이다.
In [521]:
In [500]:
심지어 중국이란 단어에 대해서 중국이 들어가 있는 단어에 대해서 유클리디안 거리가 매우 높게 측정되어 있음을 알 수 있다.
In [519]:
5.4 Visualization
In [305]:
In [313]:
In [318]:
In [319]:
In [320]:

t-SNE로 변환 후 2차원 시각화
Summary¶
여러 모델 모두 합리적인 결과를 보여주고 있지만 실제 다양한 단어가 등장하는 상황에서 임베딩된 단어의 한계는 명확해진다. 좀 더 다양한 단어들에 대해 대응할 수 있는 FastText 모델이 성능면에서 좋은 면을 보여주었으나, 품사 태깅이 없을 경우 기대만큼 좋진 않아 더 많은 데이터, size, iteration을 조절을 통해 모델의 성능을 끌어올릴 필요가 있다는 걸 알 수 있다.
Last updated
Was this helpful?