블로그를 오랜만에 접속했습니다.
18년도에 블로그를 만들었을 때, 꾸준히 한달에 한번이라도 글을 쓰자 생각했었는데 지켜지지 않았네요 ㅠ.ㅠ
2020년의 나와 현재의 나를 비교하면서 되돌아보니 생각보다 이것저것 바뀐 것이 있습니다. 물론 시간이 너무 빨리 지나가는 것 같은 생각은 항상 하지만요.
트위터 파헤치기 시리즈 두번째 - 한국어 전처리
트위터 파헤치기 두번째 시리즈의 주제는 한국어 전처리 이다.
단순히 LDA 토픽 모델링을 하는 것에서부터 딥러닝 모델을 훈련시키는 것 까지 NLP와 관련된 전 과정에서 전처리는 필수적이다.
텍스트 데이터의 특성상 기본적으로 노이즈 (noise)가 많은 데이터에 속하기 때문이다. 다음과 같은 과정을 보통 진행한다.
- Tokenization : 문장을 하나의 기준을 가지고 자르는 것 (안녕하세요 -> 안녕 / 하세요)
- Stemming : 동사 및 형용사 등의 활용 형태를 원문으로 바꾸는 것 (잼따 -> 재미 이다)
- Noramlization : 표기가 다른 단어들을 통합하는 것 (입니닼ㅋㅋ -> 입니다 ㅋㅋ)
- Noise removal : 문장의 의미를 이해하는 데에 불필요한 부분을 제거하는 것 (특수문자, url 등)
영어의 경우 nltk
라는 강력한 파이썬 패키지가 존재하여, 대부분의 우리가 원하는 전처리 함수들이 구현되어 있다.
그러나 한국어의 경우 Tokenization의 단위가 단어인지, 형태소인지, 자모인지, 아니면 그 외인지조차 아직까지 불명확한 부분이 있다. (현재도 연구중)
또한, Normalization이나 Stemming의 경우에도 Konlpy
에 최근 포함된 Okt
클래스가 지원하지만 써본 결과 영어만큼 완벽하지는 않다.
그래서 본 포스트에서는 제일 general 한 토크나이저인 Mecab
을 사용해서 그나마 reasonable한 방향으로 한국어 전처리를 진행해 보고자 한다. 현재도 계속 연구중이므로 완벽한 방법은 아니라는 것에 유의하자.
트위터 파헤치기 시리즈 첫번째 - 수집하기
트위터 데이터를 주로 수집해서 사용하다 보니, 너무 관련된 포스트를 여러개 쓰는것 같지만..
많은 분들이 댓글 혹은 메일로도 연락이 오셔서 문의하시는 부분이 있어 이 기회에 정리해 보고자 한다.
이름하여 트위터 파헤치기 시리즈! 수집부터 시작해서 한국어 전처리, 워드 클라우드 시각화 및 클러스터링 시 적절한 하이퍼 파라미터 설정 등 분석 단계까지 조금씩 정리해 보고자 한다.
예시 주제로 요즘 우리들을 괴롭히는 코로나 바이러스 에 대해서 트위터를 살펴보는 것으로 정했다.
지금까지 트위터 수집 방법에 대해서 꽤 여러 포스트를 썼었는데, 지금까지 다루지 않은 방법으로 시도하고자 한다. 수집 방법을 많이 알면 알수록 좋으니까!
Pytorch 특정 GPU 사용하기
나는 많은 딥러닝 프레임워크 중 Pytorch와 MxNet을 자주 사용하는 편이다.
그런데, 연구실 사람들과 GPU 서버를 함께 쓰다 보니 어떤 GPU가 현재 available한지 알아야 할 필요가 있었다.
원래는 시간대를 적당히 맞춰서 사용하곤 했는데, 멀티 GPU 세팅에 대해서는 잘 모르기도 하고 colab으로는 도저히 불편해서 쓸수가 없었으므로..ㅠㅠ 관련 정보를 찾아보고 그 결과를 간단히 공유하고자 한다.
패키지 없이 트위터 데이터 수집하기 with Python
이전에 트위터 데이터를 키워드를 기준으로 크롤링하는 글을 쓴적이 있다. 최근 내가 진행하는 연구에서도 트위터 크롤링이 계속 요구되었고, 정말 다양한 패키지와 방법을 사용해 왔다.
Tweepy나 TwitterScraper 등 좋은 패키지들이 github에 많이 공유되어 있는데, 뭔가 내 맘에 드는 게 없어서 순정으로 돌아가보기로 했다.
이번 포스트에서는 일절 패키지 없이 트위터 API로만 크롤링을 시도해 볼 것이다. 요즘 대단히 이슈가 되는 코로나 바이러스에 대해서 키워드를 설정하고, 관련 트윗을 수집해 보자!
Khaiii 형태소 분석기 사용하기
한국어로 된 데이터를 분석할 때, 이를 적절한 형태로 토크나이즈 (tokenize)하는 과정은 반드시 필요하다.
특히나 한국어는 영어와 달리 최소 의미 전달이 단어로 이루어진 언어가 아니기 때문에 형태소 단위로 잘라주는 패키지를 자주 사용한다.
오늘은 내가 평소에 자주 사용하는 형태소 분석기 중 Khaiii 형태소 분석기 에 대해 포스팅하고자 한다.
Khaiii 는 카카오에서 18년도 말에 공개한 딥러닝 기반의 형태소 분석기이다. 기존의 사전 의존 방법과는 달리 세종 코퍼스 약 1000만 어절을 학습하여 형태소 단위로 분리한다고 한다.
2019년 여름, 연구실에서 근황
쓰고 싶은 주제들은 많은데.. 요즘 블로그를 거의 못하고 있다 ㅠㅠ
덥기도 하고, 연구실에서 해야할 일도 많고 행사도 있고 정신이 없는듯.
매일 운동도 빠짐없이 하고 싶은데 밥을 제때 못먹어서 힘이 없어서 못하기도 하고, 미팅이 길어져서 타이밍을 놓치기도 하고..
그래도 간간히 블로그 들러주셔서 메일 주시는 분들이 몇 계시다는 데에 만족중 ㅋㅋ
현재 두 가지의 프로젝트에 involve 하는 중인데, 열심히는 하고 있지만 아직 갈길이 멀었다.
네이버 뉴스 및 댓글 데이터를 바탕으로 정치적 편향성을 가진 사용자의 반응 연구
원자력 발전소와 관련한 트윗을 크롤링하여 루머의 확산에 관한 연구
방학 때 좀 빡세게 해서 결과가 좀 나오면.. 탑 티어 컨퍼런스인 CHI나 ICWSM에 도전해 보고 싶다!!
이외에도, 최근 한 일중에 미래에 도움될 만한 일이 있다면.. 도커 (Docker) 세팅을 해본 것?
처음 만져보니까 버벅대긴 했는데.. 어찌어찌 해서 나의 전용 도커파일도 만들고 내가 원하는 자연어 처리 세팅을 완료했다.
또 막상 끝내고 나니까 가르쳐주는 건 쉽더라. 시간 될 때 리마인드 겸 도커 세팅과 관련된 포스트를 작성할 계획이다.
친구들한테 물어보니, 기업에서 도커 다루는 것은 거의 필수라고 하더라고 ㅋㅋㅋ 공부한 셈 치고 머리 박은 시간들은 넘어가는 걸로. 다음엔 안헤메겠지뭐!
Data Crawling - 크롤러 속도를 높이는 멀티프로세싱 (multiprocessing)
이번에는 크롤러의 속도를 높이는 방법 중 하나를 알아보자.
우리가 10000개의 유저 데이터를 수집한다고 가정하면, 지금까지는 처음부터 차례대로 하나씩 수집한 것이다.
그런데 만약 동일한 기능을 하는 프로그램 창을 여러개 띄우고, 2500개씩 나누어 4개의 창으로 동시에 데이터를 수집하면 어떨까?
이런 것을 가능하게 하는 것이 바로 파이썬의 기본 모듈 중 하나인 멀티프로세싱 (multiprocessing)이다.
19년 카이스트 봄학기 후기
카이스트에서의 도전적인(?) 한 학기가 드디어 끝났다.
정말 많은 일들을 한꺼번에 진행하느라 힘들었지만, 그만큼 의미있었던 한 학기였다.
나의 무기를 가지고 싶어 시작했던 일들이었던 만큼, 재미있고 가슴뛰는 무언가를 찾아서 움직였던 과거와는 달리 모든 일에 조금 진지하게 임하였던 것 같다.
Data Crawling - 파이썬을 이용한 트위터 수집하기
어떤 사건에 대한 사람들의 즉각적인 관심과 반응, 그리고 영향력자들이 어떻게 일반 사용자에게 영향을 미치는지 분석하는 데는 트위터 만한 SNS가 없다.
본 포스트에서는 예제로 19년 4월 4주차에서 어벤져스 또는 스포가 포함된 트윗을 수집해 볼 것이다.
어벤져스 엔드게임은 19년 4월 24일에 개봉해서 엄청난 인기를 끌었는데, 한동안 SNS에서 일명 스포 (스포일러)를 한다고 절대 아무거나 클릭하지 말라고 소동이 있었던 것으로 기억한다.
개봉일 전후로 트윗 수가 차이가 나고, 스포와 같이 작성된 트윗이 많을 것으로 기대된다.