수 있지만, 100만개를 사람이 볼 수는 없다." - "사람이 할 수 있다면, 기계도 할 수 있지 않을까?" ‣ 물론, 충분한 양의 데이터가 있어야 한다. •두가지를 모두 보자! - 사람이 볼 수 있는 규모라면, 자동으로 볼 수 있도록 만들자. - 사람이 볼 수 없는 규모라면, 그동안 보지 못하던 새로운 것을 찾아보자. !17 어떻게 보여줄 수 있을까?
분석): 우리가 가진 데이터는 어떤 모양일까? ‣ 각각의 데이터가 무엇을 의미하는걸까? ‣ 어떤 데이터 분포를 보이고 있는걸까? - 현재 나타나는 현상을 설명하기 위한 방법 - 가진 데이터 + 데이터를 변형하는 것으로 가설 세우고 & 검증하기 ‣ ex) 표준분포에서 멀리 떨어진 사람들은 얼마나 많은 댓글을 쓰고있을까? !27 통계분석 vs 머신러닝 vs 딥러닝
위한 모델링 - 수치 데이터 / Boolean / 시계열 / 네트워크 등등 - 가설을 세우고 해당하는 분포를 확인하고 실제 세상에 적용해보기 ‣ ex) 통계적 접근을 통해 얻은 시야를 선형/비선형적으로 분류하는 모델링 - Feature Extraction이 성능에 아주 큰 영향을 준다 ‣ 어떤 Feature가 유의미한 연관성이 있을까? ‣ 모든 Feature를 넣을까? 일부를 넣을까? !28 통계분석 vs 머신러닝 vs 딥러닝
(약 5천만개+) ‣ Main 댓글(대댓글 비포함시): 21,759,673개 (약 2천만개+) - 총 유저 수: 1,746,716명 (약 170만명+) ‣ Main 댓글(대댓글 비포함시): 1,306,210명 (약 130만명+) •얼마나 많은 기사가 있나? - 총 기사 수: 38283개 하루에 분야별 TOP30 = 210개(혹은 그 이하) - 총 언론사 수: 80개 !36 간단히 살펴보는 데이터 총량 댓글 많은 하루 약 20만건 내외의 댓글 ('댓글많은' 랭킹 뉴스 한정)
종류가 아닌 여러가지 종류를 함께 볼때 의미가 생기는 경우 - 베스트댓글(랭킹) = 기사별로 합친 후 정렬 - 유저의 댓글 다는 속도 = 유저별로 합친 후 댓글 시각별 차이 - 최대 댓글 분량 = 유저별 & 일자별로 합친후 숫자 세기 - 분쟁적인 댓글인가? ‣ 좋아요/싫어요 비율이 다른 베스트에 비해 비율이 Outlier ‣ 동시에 대댓글 수가 높음 ‣ 대댓글의 Political bias가 갈림 !38 Feature Engineering
값으로 치환! - Q. 어떻게 해야 컴퓨터가 언어를 계산할 수 있을까? - Text 자체의 Feature를 뽑는 방법: ‣ 단어를 1:1로 숫자로 바꾸자 One-Hot embedding ‣ 주변 단어에 따라 N차원의 벡터로 바꾸자 Embedding Layer / Word2Vec ‣ 모든 문장을 보되 가중치를 두고 보자 Attention / Transformer ‣ 미리 막대한 분량의 데이터로 언어를 학습하자 Transfer Learning: BERT / GPT-2 !39 Feature Engineering
어떤 모델링을 한다고 하더라도 명시적 테스트가 불가능함 (False Positive) ‣ ex) 봇이라고 생각했는데, 실제로는 엄청나게 열심히 댓글을 다는 사람이라면? - Unsupervisored Clustering ‣ Clustering을 통한 분류를 진행하려면 사실상 Label이 필요해, 일종의 Supervisored Learning이라고 볼 수 있다. - Supervisored Learning !43 어떤 가설을 세워볼 수 있을까?
- 알 수 있는 것일까?? •"극단적인 댓글을 찾아보자" (Q. 무엇이 '극단적'인 댓글인가?) - 댓글이 절대적인 갯수가 많은 사람의 댓글? - 댓글의 내용이 같거나/유사한 댓글만 도배하는 것? - 정치적으로 Extremely Biased된 댓글? - 욕설하는 댓글? - 무언가 Outlier인 것들 !44 어떤 가설을 세워볼 수 있을까?
때 정규분포를 벗어나는 유저들 •Political Lean 쪼개보기 - 보수? 진보? 한쪽 성향이 강하게 드러나는 유저 - 키보드워리어의 콜로세움을 여는 유저는 누구인가 - 집단적인 행동이 있다면 나타날 Temporal Pattern? ‣ 베스트 댓글의 정치적 성향에 따라 좋아요/싫어요의 비율이 다를까? !45 어떤 가설을 세워볼 수 있을까?
매크로?) + 특정 사이트를 보게 만드는 것일까 ‣ 댓글에서는 링크도 클릭도 안되는데! •Idea.2: 평균 문자열 길이 - 기사를 보고나서 '반응'으로 다는 댓글의 길이는 의도적으로 Bias를 만들기 위한 댓글들보다는 짧지 않을까? - 손으로 단 댓글 길이 < 자동으로 단 댓글 or 복붙한 댓글 길이? !47 어떤 축을 기준으로 두고 Outlier를 찾을까?
가능 - 1) 뉴스가 올라오자 마자 댓글 다는 경우 ‣ 뉴스가 올라오는 새벽 시간에 곧바로 댓글을 다는 경우? - 2) 한 댓글을 쓰고 나서 다음 댓글로 활동이 이어지는 간격 ‣ 뉴스를 돌아다니며 뉴스 읽는 시간도 없이 댓글 달고 다니는 경우? !49 어떤 축을 기준으로 두고 Outlier를 찾을까?
길게 많이 다는 댓글 / 비슷한 단어만 쓰는 댓글 대댓글이 많이 달리는 댓글 기사가 올라오자 마자 달리는 댓글 / 짧은 시간 내에 많이 올리는 댓글 Pandas + Dask를 통한 정량적 / 시계열적 분석 Human Labeling이 들어간 노가다 딥러닝 분석 베댓이 되는가? 봇처럼 보이는가? 집단적 움직임으로 보이는가?
댓글을 모두모아 + 서로 유사도 비교 •유사도 비교는 어떻게? !67 3. 비슷한 말만 하는 아웃라이어 완전히 같은지 == 비교 가장 빠른 방법, 하지만 조금이라도 달라지면 찾을 수 없다 얼마나 글자를 바꾸면 되나 Levenstein Distance, LCS(최장공통길이) + 댓글길이에 따른 비율 얼마나 비슷한 단어를 갖나 [토큰화+JaccardDist/BLEU] [Embedding + Cosine similarity]
기사에 빠르게 댓글을 다는 경우 ‣ 시간대가 일정하다면 유저의 사용패턴이라고 볼 수 있음 •한 사람의 댓글 사이사이에 TimeDelta가 작은 경우 - (댓글을 타이핑하는 속도 + 기사 읽는 속도) << 댓글간 시간 간격 ‣ 복붙인 경우라면 가능? 프로그램? !82 4. 손은 눈보다 빠르다(?)
단어 ‣ 키워드 기반으로 찾기 ‣ TFIDF, 단순 빈도, χ2분포 등 - 문맥상 특정 정당 혹은 정책 지지 •보수 vs 진보 댓글 비율 분포는? !95 어떻게 Political Lean을 찾을까? 어떻게 "보수"인지, 어떻게 "진보"인지 자동으로 label 할 수 있을까?
극단적으로 바뀔까? % - 그렇다면, 여러 댓글이 '보수' 혹은 '진보'로 라벨링 된 사람의 댓글은 대부분 '보수'/'진보'성 댓글이 아닐까? ‣ 물론 노이즈가 꽤나 끼어 있을거야! - 따라서 직접 라벨링한 데이터셋에서 유저별 보수/진보 위치를 찾자! !101 조금 부정확하더라도 대충 라벨링
하고, 해당 유저들의 데이터를 가져온다면? - Outlier 모델들에 몇 번 이상 탐지된 유저들의 패턴을 분석한다면? - 모델에는 잡히지 않았지만, 기존 탐지된 유저와 비슷한 패턴을 보이는 유저를 찾는다면? - 좀 더 빠르고 훨씬 많은 데이터를 볼 수 있다! !105 사람은 잘 바뀌지 않는다!
유저는 924명:355명 •확실하게 라벨링 된 사람의 정보를 가져오자! - 2019년 1월 1일부터 수집한 데이터와 JOIN - 보수(score > 0.8) 댓글 수: 29,637개 - 진보(score < -0.8) 댓글 수: 3,650개 훨씬 적다 - 따라서 UnderSampling 필요! !107 사람은 잘 바뀌지 않는다!
보수 뉴스에 달리는 댓글은 대부분 보수, 진보 뉴스에 달리는 댓글은 반반? - 결국 보수/진보 Classifier가 필요하다! •진보 뉴스의 댓글들을 좀 더 라벨링해보자! - 추가적으로 10,000개+ 라벨링 [진행중] !109 진보는 어디에 있는가? 사실 아직 연구중!
- 꼭 필터버블이 아니더라도, 사람이 볼 수 있는 것은 제한되어있다 •사람이 하나하나 보는 것이 아닌 자동화된 작업 •모두가 조금씩 신경쓸 수 있게 하는 환경 - 개발자가 아닌 시민들의 참여를 이끌어내려면? - 최대한 적은 수고로 높은 효과를 이끌어내려면? !114 맺으며