Upgrade to Pro — share decks privately, control downloads, hide ads and more …

[PyConKR 2019] 온라인 뉴스 댓글은 정말 사람들의 목소리일까? - PART2

Beomi
August 18, 2019

[PyConKR 2019] 온라인 뉴스 댓글은 정말 사람들의 목소리일까? - PART2

PyConKR 2019 발표자료입니다.

Beomi

August 18, 2019
Tweet

More Decks by Beomi

Other Decks in Research

Transcript

  1. PyCon Korea 2019
    온라인 뉴스 댓글은
    정말 사람들의 목소리일까? - PART2
    이준범 ( [email protected] )

    View full-size slide

  2. 모두 손을 들어주세요!
    Hands up!

    View full-size slide

  3. 온라인으로 뉴스 보지 않으시는 분,
    손 내려주세요

    View full-size slide

  4. 온라인 뉴스를 보지만,
    댓글은 보지 않으시는 분 손 내려주세요

    View full-size slide

  5. "대한민국은 민주공화국이다.
    대한민국의 주권은 국민에게 있고,
    모든 권력은 국민으로부터 나온다."

    View full-size slide

  6. "...The simple truth,
    that nothing is more important to a democracy
    than a well-informed electorate."
    - The Newsroom

    View full-size slide

  7. 우리는 정보를 어디에서 얻고있나요?

    View full-size slide

  8. 댓글: 때묻지 않은, 새로운 정보의 원천

    View full-size slide

  9. 댓글: 때묻지 않은, 새로운 정보의 원천?

    View full-size slide

  10. 네이버 월요웹툰 「꿈의기업」 중
    "시민들은 본문보다
    댓글을더 믿는 편이니"

    View full-size slide

  11. 우리가 보는 인터넷은
    정말 우리 세상을 제대로 반영해주고 있을까요?

    View full-size slide

  12. :: Disclaimer ::
    본 발표 중 정치사회적 내용이 일부 있으나,

    이번 발표는 기술의 사회적 참여를 이야기하는 발표입니다.
    제시된 내용은 발표자&파이콘의 정치사회적 입장을 반영하지 않으며,
    발표 내용과 발표자의 개인적 견해는 무관하며,
    특정 집단의 편향이 반영되지 않았음을 밝힙니다.

    View full-size slide

  13. 소셜 데이터, 왜 보나요?

    View full-size slide

  14. •우리 사회에서 나타나는 현상을 '설명'한다는 것

    - 수없이 떠도는 '루머'들, 어떤 것이 Fact인가?

    - 얼마나 Political Biased가 나타나는가?

    - 우리가 보는 댓글은 표본 추출로서 우리 사회를 대표하는가?

    (Represent)
    !14
    소셜 데이터를 분석한다는 것은..

    View full-size slide

  15. •우리 자신에 대한 이해를 높이는 것

    •사회가 보다 성숙할 수 있도록 도와주는 것

    - 우리가 더 멋진 사회에서 살 수 있도록 만들어준다는 것

    - 기술이 우리 사회에 기여할 수 있는 부분
    !15
    소셜 데이터를 분석한다는 것은..

    View full-size slide

  16. 데이터 분석,
    사회를 바라보는 또하나의 눈

    View full-size slide

  17. •데이터 분석과 ML, 새로운 두가지 명제:

    - "100개는 사람이 볼 수 있지만, 100만개를 사람이 볼 수는 없다."

    - "사람이 할 수 있다면, 기계도 할 수 있지 않을까?"

    ‣ 물론, 충분한 양의 데이터가 있어야 한다.

    •두가지를 모두 보자!

    - 사람이 볼 수 있는 규모라면, 자동으로 볼 수 있도록 만들자.

    - 사람이 볼 수 없는 규모라면, 그동안 보지 못하던 새로운 것을 찾아보자.
    !17
    어떻게 보여줄 수 있을까?

    View full-size slide

  18. 뉴스 + 댓글 데이터를 보자!

    View full-size slide

  19. •기사의 정보
    !19
    어떤 정보를 얻을 수 있나요?
    언론사
    기사제목
    작성시각

    View full-size slide

  20. •기사의 정보
    !20
    어떤 정보를 얻을 수 있나요?
    독자들의 감성 반응과 추천

    View full-size slide

  21. •댓글의 정보
    !21
    어떤 정보를 얻을 수 있나요?
    댓글의 좋아요/싫어요 수
    댓글의 순위
    댓글의 본문
    댓글 작성 시각
    대댓글 수+내용
    댓글 작성자(?)

    View full-size slide

  22. 데이터를 어떻게 모으지?

    View full-size slide

  23. •로컬에서 크롤링 NO

    •클라우드 OK

    •서버리스!

    - AWS Lambda

    - S3

    ‣ (더 자세한 내용은 2018년 발표와 중복!, 궁금하면 QnA!)
    !23
    데이터를 어떻게 모으지?

    View full-size slide

  24. !24
    서버리스 크롤링 on AWS [2018ver]

    View full-size slide

  25. !25
    서버리스 크롤링 on AWS [2019ver]
    두가지 종류로 데이터 수집
    1. [댓글 많은] 랭킹 뉴스 일별 데이터
    2. [댓글 많은] 랭킹 뉴스 10분간격 데이터
    - CloudWatch로 자동화

    View full-size slide

  26. •JSON to Parquet (일자별 정리)

    •AWS Glue (PySpark 환경) semi-서버리스
    !26
    데이터 정리하기
    10분 간격으로 기사별로 모은 자료,
    너무 양이 많아서 전체 size를 찍은게 없음!
    (약 1.8TB+로 추정)
    10GB
    282GB

    View full-size slide

  27. •통계분석

    - 데이터를 통계의 방식으로 접근해서 분석

    - EDA(탐색적 데이터 분석): 우리가 가진 데이터는 어떤 모양일까?

    ‣ 각각의 데이터가 무엇을 의미하는걸까?

    ‣ 어떤 데이터 분포를 보이고 있는걸까?

    - 현재 나타나는 현상을 설명하기 위한 방법

    - 가진 데이터 + 데이터를 변형하는 것으로 가설 세우고 & 검증하기

    ‣ ex) 표준분포에서 멀리 떨어진 사람들은 얼마나 많은 댓글을 쓰고있을까?
    !27
    통계분석 vs 머신러닝 vs 딥러닝

    View full-size slide

  28. •머신러닝

    - 가지고 있는 데이터 중 Feature를 통해 이후를 예측하기 위한 모델링

    - 수치 데이터 / Boolean / 시계열 / 네트워크 등등

    - 가설을 세우고 해당하는 분포를 확인하고 실제 세상에 적용해보기

    ‣ ex) 통계적 접근을 통해 얻은 시야를 선형/비선형적으로 분류하는 모델링

    - Feature Extraction이 성능에 아주 큰 영향을 준다

    ‣ 어떤 Feature가 유의미한 연관성이 있을까?

    ‣ 모든 Feature를 넣을까? 일부를 넣을까?
    !28
    통계분석 vs 머신러닝 vs 딥러닝

    View full-size slide

  29. •딥러닝

    - 데이터를 넣어 Feature를 찾아내기

    - Supervisored & Unsupervisored Learning

    - 텍스트와 같은 Unstructured Data에 대해 학습을 하자!

    ‣ 통계적 접근방법보다 훨씬 높은 성능을 이끌어낸다.
    !29
    통계분석 vs 머신러닝 vs 딥러닝

    View full-size slide

  30. 어떤 Feature를 세워볼 수 있을까?

    View full-size slide

  31. Feature는 데이터로부터...
    너 자신의 데이터를 알라

    View full-size slide

  32. •Numeric Data

    - 숫자로 표현 가능한 데이터

    - 좋아요 수 / 싫어요 수

    - 대댓글 수

    - 댓글 단 순위(시간순)

    - 댓글 랭킹 (순공감 순/비율 순 등등)

    - 공감 비율 등등
    !32
    데이터는 총 4가지 종류
    댓글의 좋아요/싫어요
    댓글의 순위
    대댓글 수

    View full-size slide

  33. •Time Data

    - 시간과 관계된 데이터

    - 댓글을 언제 썼는지

    - 기사 쓴 시간 대비 얼마나 빨리 썼는지

    - 짧은 시간 내 얼마나 많이 쓰는지

    ‣ 이전 댓글과 시차

    - 하루에 얼마나 많이 댓글을 다는지
    !33
    데이터는 총 4가지 종류
    댓글 작성 시각

    View full-size slide

  34. •Text Data

    - 댓글이라는 '텍스트' 자체의 데이터

    - 자연어 처리, NLP!

    •User Data

    - 정확히 누구인지는 모르지만, 그래도 유저별 댓글을 모아볼 수 있다.
    !34
    데이터는 총 4가지 종류
    댓글 본문
    유저 정보
    2019년 7월 중순부터
    유저를 식별하는 방법이
    완전히 사라짐

    View full-size slide

  35. •어떤 데이터를 모았나?
    !35
    간단히 살펴보는 데이터 총량
    정치/경제/사회...등
    총 7가지 섹션
    (포토 섹션 제외)
    섹션별 30개 기사
    Max total 210
    (실제로는 중복 있음)
    매일 랭킹뉴스 중
    '댓글 많은' 섹션

    View full-size slide

  36. •얼마나 많은 댓글과 사람들이 있나?

    - 총 댓글 개수: 51,866,541개 (약 5천만개+)

    ‣ Main 댓글(대댓글 비포함시): 21,759,673개 (약 2천만개+)

    - 총 유저 수: 1,746,716명 (약 170만명+)

    ‣ Main 댓글(대댓글 비포함시): 1,306,210명 (약 130만명+)

    •얼마나 많은 기사가 있나?

    - 총 기사 수: 38283개 하루에 분야별 TOP30 = 210개(혹은 그 이하)

    - 총 언론사 수: 80개
    !36
    간단히 살펴보는 데이터 총량
    댓글 많은
    하루 약 20만건 내외의 댓글
    ('댓글많은' 랭킹 뉴스 한정)

    View full-size slide

  37. •언론사별 댓글 & 뉴스 개수

    - 뉴스가 많이 나오는 연합뉴스가 1등!
    !37
    간단히 살펴보는 데이터 총량
    기사수
    댓글수
    1. 연합뉴스
    2. 중앙일보
    3. 조선일보
    ...

    View full-size slide

  38. •제한된 종류의 데이터 중에서 어떤 것이 의미가 있는가?

    •한 가지 종류가 아닌 여러가지 종류를 함께 볼때 의미가 생기는 경우

    - 베스트댓글(랭킹) = 기사별로 합친 후 정렬

    - 유저의 댓글 다는 속도 = 유저별로 합친 후 댓글 시각별 차이

    - 최대 댓글 분량 = 유저별 & 일자별로 합친후 숫자 세기

    - 분쟁적인 댓글인가?

    ‣ 좋아요/싫어요 비율이 다른 베스트에 비해 비율이 Outlier

    ‣ 동시에 대댓글 수가 높음

    ‣ 대댓글의 Political bias가 갈림
    !38
    Feature Engineering

    View full-size slide

  39. •텍스트 데이터는 조금 더 복잡하다!

    - 모델에 입력 = 수학적 값으로 치환!

    - Q. 어떻게 해야 컴퓨터가 언어를 계산할 수 있을까?

    - Text 자체의 Feature를 뽑는 방법:

    ‣ 단어를 1:1로 숫자로 바꾸자 One-Hot embedding

    ‣ 주변 단어에 따라 N차원의 벡터로 바꾸자 Embedding Layer / Word2Vec

    ‣ 모든 문장을 보되 가중치를 두고 보자 Attention / Transformer

    ‣ 미리 막대한 분량의 데이터로 언어를 학습하자 Transfer Learning: BERT / GPT-2
    !39
    Feature Engineering

    View full-size slide

  40. •텍스트의 좀 더 다양한 속성

    - URL(링크)가 포함되어 있나?

    - 한 사람 기준으로 잡을때

    '얼마나 다양한 단어'를 사용하는가?

    - 얼마나 긴 글을 쓰는가?
    !40
    Feature Engineering

    View full-size slide

  41. 어떤 가설들을 세워볼 수 있을까?
    유저들의 패턴 찾는 아이디어

    View full-size slide

  42. !42
    어떤 가설을 세워볼 수 있을까?
    Ground Truth

    View full-size slide

  43. •[문제발생!!] Ground Truth가 없다!

    - 사실 가장 큰 이슈

    - 어떤 모델링을 한다고 하더라도 명시적 테스트가 불가능함 (False Positive)

    ‣ ex) 봇이라고 생각했는데, 실제로는 엄청나게 열심히 댓글을 다는 사람이라면?

    - Unsupervisored Clustering

    ‣ Clustering을 통한 분류를 진행하려면 사실상 Label이 필요해, 

    일종의 Supervisored Learning이라고 볼 수 있다.

    - Supervisored Learning
    !43
    어떤 가설을 세워볼 수 있을까?

    View full-size slide

  44. •Ground Truth가 없다!

    - 무엇이 '정상' 댓글이고 무엇이 '비정상' 댓글인가?

    - 알 수 있는 것일까??

    •"극단적인 댓글을 찾아보자" (Q. 무엇이 '극단적'인 댓글인가?)

    - 댓글이 절대적인 갯수가 많은 사람의 댓글?

    - 댓글의 내용이 같거나/유사한 댓글만 도배하는 것?

    - 정치적으로 Extremely Biased된 댓글?

    - 욕설하는 댓글?

    - 무언가 Outlier인 것들
    !44
    어떤 가설을 세워볼 수 있을까?

    View full-size slide

  45. •Outlier로 '튀는' 댓글을 쓰는 유저들

    - 어떤 Feature의 축을 잡았을 때 정규분포를 벗어나는 유저들

    •Political Lean 쪼개보기

    - 보수? 진보? 한쪽 성향이 강하게 드러나는 유저

    - 키보드워리어의 콜로세움을 여는 유저는 누구인가

    - 집단적인 행동이 있다면 나타날 Temporal Pattern?

    ‣ 베스트 댓글의 정치적 성향에 따라 좋아요/싫어요의 비율이 다를까?
    !45
    어떤 가설을 세워볼 수 있을까?

    View full-size slide

  46. 어떤 축을 기준으로 두고
    Outlier를 찾을까?
    통계적 Feature 잡기

    View full-size slide

  47. •Idea.1: 댓글에 URL을 많이 가져다 쓰는 경우

    - 복붙의 가능성(손복붙? 매크로?) + 특정 사이트를 보게 만드는 것일까

    ‣ 댓글에서는 링크도 클릭도 안되는데!

    •Idea.2: 평균 문자열 길이

    - 기사를 보고나서 '반응'으로 다는 댓글의 길이는

    의도적으로 Bias를 만들기 위한 댓글들보다는 짧지 않을까?

    - 손으로 단 댓글 길이 < 자동으로 단 댓글 or 복붙한 댓글 길이?
    !47
    어떤 축을 기준으로 두고 Outlier를 찾을까?

    View full-size slide

  48. •Idea.3: 얼마나 다양한 워딩을 사용하는가?

    - 동일한 어구/어휘의 반복

    - 단어가 얼마나 다양한 분포로 나타나는가?

    •Idea.4: 한번에 몰아서 댓글 vs 일상적으로 댓글

    - 특정 날짜/이슈에만 댓글 다는 경우

    ‣ 단, 분량이 일반 유저에 비해 편차가 크게 많이 다는 경우
    !48
    어떤 축을 기준으로 두고 Outlier를 찾을까?

    View full-size slide

  49. •Idea.5: 얼마나 빨리 댓글을 다나?

    - 두 가지로 기준 세우기 가능

    - 1) 뉴스가 올라오자 마자 댓글 다는 경우

    ‣ 뉴스가 올라오는 새벽 시간에 곧바로 댓글을 다는 경우?

    - 2) 한 댓글을 쓰고 나서 다음 댓글로 활동이 이어지는 간격

    ‣ 뉴스를 돌아다니며 뉴스 읽는 시간도 없이 댓글 달고 다니는 경우?
    !49
    어떤 축을 기준으로 두고 Outlier를 찾을까?

    View full-size slide



  50. 어떤 댓글들이
    얼마나
    어떻게
    링크 달린 댓글 / 길게 많이 다는 댓글 / 비슷한 단어만 쓰는 댓글
    대댓글이 많이 달리는 댓글
    기사가 올라오자 마자 달리는 댓글 / 짧은 시간 내에 많이 올리는 댓글
    Pandas + Dask를 통한 정량적 / 시계열적 분석
    Human Labeling이 들어간 노가다 딥러닝 분석
    베댓이 되는가?
    봇처럼 보이는가?
    집단적 움직임으로 보이는가?

    View full-size slide

  51. Idea.1
    URL 붙이고 다니는 아웃라이어
    댓글에서는 링크 클릭도 안되는데..

    View full-size slide

  52. •URL에 댓글을 다는 비율이 얼마나 될까?

    - 0에 전부 쏠려있다!

    - 조금 확대해서 1% 이상만 보면 확실한 아웃라이어가 보인다.
    !52
    1. URL 붙이고 다니는 아웃라이어
    비율 0% ~ 100% 비율 1% ~ 100%
    누가봐도
    Outlier!

    View full-size slide

  53. •URL 댓글은 얼마나?

    - 전체 댓글 21,759,673개 (내용이 있는 댓글 한정)

    - URL 댓글 39,622개

    ‣ 전체 댓글 중 0.18%

    - URL 비율이 1% 이상인 유저수: 10036명

    ‣ 1번 이상 단 유저 수: 12386명
    !53
    1. URL 붙이고 다니는 아웃라이어
    url 비율 별 유저들의
    댓글 수

    View full-size slide

  54. •아웃라이어의 댓글은 얼마나?(urlRatio >= .5)

    - urlRatio: "URL댓글/전체댓글"

    - True: URL댓글 개수(log)
    !54
    1. URL 붙이고 다니는 아웃라이어

    View full-size slide

  55. •아웃라이어의 댓글은 어떤 댓글인가?

    - 청와대 청원 게시글 요청이 많은 편
    !55
    1. URL 붙이고 다니는 아웃라이어

    View full-size slide

  56. •아웃라이어의 댓글은 어떤 댓글인가?

    - 특정 기사/매체로의 유입을 유도하는 글
    !56
    1. URL 붙이고 다니는 아웃라이어

    View full-size slide

  57. Idea.2
    댓글을 길게 다는 아웃라이어
    최소글자 채우는 것도 귀찮은데..

    View full-size slide

  58. •댓글의 길이는 비슷비슷?

    - 댓글 길이 max는 300

    - 유저별 '평균' 댓글 길이를

    살펴보자!
    !58
    2. 평균 댓글 문자열 길이로 찾는 아웃라이어
    len<50: 60%
    len<100: 87%
    유저별
    평균 댓글 길이

    View full-size slide

  59. •댓글의 길이는 비슷비슷?

    - 250 이상으로 보아도

    290~300이 튄다!

    ‣ 점점 줄어들거나/비슷하지 않고

    확 튀는 것을 볼 수 있다
    !59
    2. 평균 댓글 문자열 길이로 찾는 아웃라이어
    유저별
    평균 댓글 길이
    (250이상 한정)

    View full-size slide

  60. •어떤 댓글이 '긴 댓글'? ( > 290)

    - 정치적 내용이 긴 댓글

    - 자주 다는 경우도 보임
    !60
    2. 평균 댓글 문자열 길이로 찾는 아웃라이어

    View full-size slide

  61. •긴 댓글이 차지하는 분량은?

    - 댓글 평균 길이가 290이상인 댓글의 수: 14376개

    ‣ 위 케이스의 해당하는 유저 수: 4932명
    !61
    2. 평균 댓글 문자열 길이로 찾는 아웃라이어
    댓글 길이별 댓글 수
    (from 전체댓글)

    View full-size slide

  62. Idea.3
    비슷한 말을 하는 아웃라이어
    얼마나 다양한 워딩을 사용하는 중인가?

    View full-size slide

  63. •방법1: 유저별 사용 단어 모으기

    - 2019년 6월1일~7일 기준 TF-IDF

    ‣ Tokenizer는 kakao의 Khaiii 사용

    ‣ sklearn의 TFIDF Vectorizer

    - "한 사람이 쓴 문장을 토큰(단어)으로 잘라 넣으면 

    토픽 키워드들로 나온다!"
    !63
    3. 비슷한 말만 하는 아웃라이어
    생각보다 좀더 오래걸려요!

    View full-size slide

  64. •가설1: "댓글은 많이 쓰는데, 토픽이 적은 유저 아웃라이어!"

    •방법

    - 1주일(혹은 1달치) 댓글을 모아서 토픽모델링을 돌린다.

    ‣ 1달은 TF-IDF도 무척 오래걸립니다.

    - 유저의 댓글 수와 비교한다.

    - "토픽 개수 / 댓글 수" 비율이 작은 아웃라이어를 찾는다!
    !65
    3. 비슷한 말만 하는 아웃라이어

    View full-size slide

  65. •결과 - 0~5에 몰려있는 전형적인 롱테일.

    - Topic이 적게 나오는 경우가 많아서 두드러진 결과가 나타나지 않음
    !66
    3. 비슷한 말만 하는 아웃라이어
    (토픽 / 댓글 수) 비
    (from 전체댓글)

    View full-size slide

  66. •방법2: 유저별 일 단위 같은/비슷한 문장 찾기

    •유저가 하루에 쓴 댓글을 모두모아 + 서로 유사도 비교

    •유사도 비교는 어떻게?
    !67
    3. 비슷한 말만 하는 아웃라이어
    완전히 같은지 == 비교 가장 빠른 방법, 하지만 조금이라도 달라지면 찾을 수 없다
    얼마나 글자를 바꾸면 되나 Levenstein Distance, LCS(최장공통길이) + 댓글길이에 따른 비율
    얼마나 비슷한 단어를 갖나 [토큰화+JaccardDist/BLEU] [Embedding + Cosine similarity]

    View full-size slide

  67. •방법: Tokenizer(Mecab) + Jaccard Dist 비교

    •결과 -
    !68
    3. 비슷한 말만 하는 아웃라이어
    1유저단위

    View full-size slide

  68. !69
    3. 비슷한 말만 하는 아웃라이어
    사실상 완전히 같은 케이스
    •방법: Tokenizer(Mecab) + Jaccard Dist 비교

    •결과 -
    1유저단위

    View full-size slide

  69. !70
    3. 비슷한 말만 하는 아웃라이어
    일부 단어만 바꿔서 다는 경우
    •방법: Tokenizer(Mecab) + Jaccard Dist 비교

    •결과 -
    1유저단위

    View full-size slide

  70. •방법: Char 단위 BLEU Score 계산

    •결과 -
    !71
    3. 비슷한 말만 하는 아웃라이어
    1유저단위

    View full-size slide

  71. !72
    3. 비슷한 말만 하는 아웃라이어
    •방법: Char 단위 BLEU Score 계산

    •결과 -
    1유저단위

    View full-size slide

  72. •방법: Embedding + Cosine Similarity

    •결과 -
    !73
    3. 비슷한 말만 하는 아웃라이어
    1유저단위

    View full-size slide

  73. !74
    3. 비슷한 말만 하는 아웃라이어
    •방법: Embedding + Cosine Similarity

    •결과 -
    1유저단위

    View full-size slide

  74. 한 유저만 보지 말고,
    전체 유저 사이에 유사한 댓글은?

    View full-size slide

  75. •방법: Tokenizer(Mecab) + Jaccard Dist 비교

    •전체 유저의 댓글 - 댓글간 유사도를 살펴보자

    - 같지 않은 유저가

    - 비슷한 내용을

    - 2번 이상 쓰는 경우 "탐지"
    !76
    3. 비슷한 말만 하는 아웃라이어
    전체유저단위

    View full-size slide

  76. •방법: Tokenizer(Mecab) + Jaccard Dist 비교

    •결과 -
    !77
    3. 비슷한 말만 하는 아웃라이어
    전체유저단위

    View full-size slide

  77. !78
    전체유저단위
    거의 같은 내용이지만
    다른 유저가 쓰고 있는 경우
    작년연구에서는 단일유저만!

    View full-size slide

  78. •간단한 네트워크 분석

    - 유저간 함께 걸린 경우 count += 1

    - 10번 이상 걸린 경우 Edge로 취급

    ‣ Weight는 생략한 그래프

    - 유저별로 끼리끼리 모이는 부분이 보임
    !79
    비슷한 말을 하는 유저들끼리 묶어보자!

    View full-size slide

  79. !80
    비슷한 말을 하는 유저들끼리 묶어보자!
    강다니엘 응원 그룹

    View full-size slide

  80. Idea.4
    손이 눈보다 빠른 아웃라이어
    뉴스가 올라오자마자 댓글을? 기사 읽기도 전에 댓글을?

    View full-size slide

  81. •뉴스가 올라오자 마자 댓글을 다는 경우

    - 시간대와 관계없이 굉장히 기사에 빠르게 댓글을 다는 경우

    ‣ 시간대가 일정하다면 유저의 사용패턴이라고 볼 수 있음

    •한 사람의 댓글 사이사이에 TimeDelta가 작은 경우

    - (댓글을 타이핑하는 속도 + 기사 읽는 속도) << 댓글간 시간 간격

    ‣ 복붙인 경우라면 가능? 프로그램?
    !82
    4. 손은 눈보다 빠르다(?)

    View full-size slide

  82. •뉴스가 올라오자 마자 댓글을 다는 경우
    !83
    4. 손은 눈보다 빠르다(?)
    1시간(3600초)이내에 단 댓글
    2019년 7월 1일자
    단순하게 '빠르다'라는 것은
    정보가 되지 않음
    유저별로 N초 이내에 다는 경우를
    세어보는 것이 좋겠다!

    View full-size slide

  83. •댓글을 달고 바로 댓글을 또다시 다는 경우
    !84
    4. 손은 눈보다 빠르다(?)

    View full-size slide

  84. •댓글을 달고 바로 댓글을 또다시 다는 경우; 10분(600s) 이내?
    !85
    4. 손은 눈보다 빠르다(?)

    View full-size slide

  85. 조금 다르게 살펴보기:
    베댓의 순위는 어떻게 변하나

    View full-size slide

  86. 베댓은 어떻게 만들어지나?
    한번 베댓은 영원한 베댓?
    베댓의 순위 변화를 살펴보자

    View full-size slide

  87. •'댓글많은' 기사들을

    - 오전 7시 ~ 밤 12시까지

    - 매 10분 간격으로 수집!

    •기사가 '댓글 많은' 랭킹으로 들어오면

    - 10분 간격으로 좋아요 / 싫어요 수 트래킹 가능!

    - 댓글의 삭제 유무 트래킹 가능!
    !88
    10분단위 스냅샷 데이터셋

    View full-size slide

  88. !89
    20190701: 댓글 분량 per 10분
    랭킹 업데이트

    View full-size slide

  89. •11:20 ~ 24:00

    - 베댓 순위는 잘 변하지 않음

    - 댓글 삭제로 순위 변동 있음

    - 초반에는 순위 변동 있음

    - 후반부로 가면 순위

    변하지 않는 편

    •순위가 많이 변하는 댓글?
    !90
    베스트 댓글의 변화
    1위 댓글 삭제

    View full-size slide

  90. •11:20 ~ 24:00

    - 베댓 순위는 잘 변하지 않음

    - 댓글 삭제로 순위 변동 있음

    - 초반에는 순위 변동 있음

    - 후반부로 가면 순위

    변하지 않는 편

    •순위가 많이 변하는 댓글?
    !91
    베스트 댓글의 변화
    순위가 올라갔다 내려간 경우

    View full-size slide

  91. •Political 입장이 나타나는 모습 변화
    !92
    밑에서부터 치고 올라오는 댓글?
    처음에는 모두 보수 댓글
    *일본이슈 관련, 정부 비판 댓글

    View full-size slide

  92. •Political 입장이 나타나는 모습 변화
    !93
    밑에서부터 치고 올라오는 댓글?
    10시 댓글 부터 정부 지지 댓글
    1~5등을 뒤집지는 못하지만,
    6~10위 모두 진보 댓글로 변화

    View full-size slide

  93. 댓글 속에서 나타나는
    Political Bias 찾기
    딥러닝과 함께하는 Text Feature

    View full-size slide

  94. •댓글에서 나타나는 정치적 편향성

    - 특정 정치와 관련된 입장을 나타내는 단어

    ‣ 키워드 기반으로 찾기

    ‣ TFIDF, 단순 빈도, χ2분포 등

    - 문맥상 특정 정당 혹은 정책 지지

    •보수 vs 진보 댓글 비율 분포는?
    !95
    어떻게 Political Lean을 찾을까?
    어떻게 "보수"인지,
    어떻게 "진보"인지
    자동으로 label 할 수 있을까?

    View full-size slide

  95. Text Feature with Deep Learning

    View full-size slide

  96. 손 라벨링(노가다)
    이 필요하다!

    View full-size slide

  97. •하루에 20만개 댓글을 라벨링: 절대! 불가능

    •베스트 좋아요가 많다 좋은 Representative

    •2019.07월 베스트 댓글 데이터: 5만개+

    - 그래도 너무많다..

    - 휴먼 라벨링 per day: 약 2000개+

    ‣ 혼자 하려면 1달 잡아야..
    !98
    라벨링노가다
    의 시작

    View full-size slide

  98. •직접 댓글 N만개를 라벨링한다?

    - 정신 건강이 해로워짐

    ‣ 신체건강도 해로워짐

    - 느리다!

    •좀 더 빠르고 편리하게 라벨링할 수 있는 방법이 없을까?

    - 조금 부정확하더라도 빠르게 찾을 수 있는 방법은 없을까?

    - '비슷한 것을 추천'해주는 태깅 서비스 개발을 해보자!
    !99
    조금 더 편리한 Human labeling을 위해

    View full-size slide

  99. 라벨링 없이
    할 수 있는 방법 없을까?
    일단 라벨링은 최대한 피하자!

    View full-size slide

  100. •가설: "사람은 잘 변하지 않는다"

    - 한 사람의 정치적 견해가 극단적으로 바뀔까? %

    - 그렇다면, 여러 댓글이 '보수' 혹은 '진보'로 라벨링 된 사람의 댓글은

    대부분 '보수'/'진보'성 댓글이 아닐까?

    ‣ 물론 노이즈가 꽤나 끼어 있을거야!

    - 따라서 직접 라벨링한 데이터셋에서 유저별 보수/진보 위치를 찾자!
    !101
    조금 부정확하더라도 대충 라벨링

    View full-size slide

  101. •Political Bias가 심한 커뮤니티의 '정치글'을 써보자!

    - 커뮤니티의 정치 섹션 글들의 '제목'을 가져오자

    •긁은 데이터

    - 일베 3만개 label as '1'

    - 더쿠 2.7만개 label as '-1'

    - 간단하게 돌려보자
    !102
    Baseline 모델 만들기

    View full-size slide

  102. •그래도 최신 모델을 가져다 써보자, BERT

    •성능이 (너무) 잘나온다?

    - Train acc 0.905

    - Val acc 0.88

    •하지만 실제 댓글 데이터에서는...

    - 전체적으로 '보수'로 판단하는 성향

    - 제목 스타일 != 댓글 스타일
    !103
    Baseline 모델 만들기

    View full-size slide

  103. 라벨링 적게
    할 수 있는 방법 없을까?
    댓글 타입에 맞게 라벨링 필요!

    View full-size slide

  104. •온라인에서 보이는 사람은 잘 바뀌지 않는다.

    - N명(N>=100)의 유저를 라벨링 하고, 해당 유저들의 데이터를 가져온다면?

    - Outlier 모델들에 몇 번 이상 탐지된 유저들의 패턴을 분석한다면?

    - 모델에는 잡히지 않았지만,

    기존 탐지된 유저와 비슷한 패턴을 보이는 유저를 찾는다면?

    - 좀 더 빠르고 훨씬 많은 데이터를 볼 수 있다!
    !105
    사람은 잘 바뀌지 않는다!

    View full-size slide

  105. •유저들의 성향을 보자!
    !106
    사람은 잘 바뀌지 않는다!
    mean이 1에 가까우면 '보수'
    -1에 가까우면 '진보
    mean이 1에 가깝고 1도 많음! 보수
    mean이 -1에 가깝고 -1도 많음! 진보

    View full-size slide

  106. •현재 라벨링된 데이터는 보수:진보 = 약 7:3

    - 내부에 들어있는 유저는 924명:355명

    •확실하게 라벨링 된 사람의 정보를 가져오자!

    - 2019년 1월 1일부터 수집한 데이터와 JOIN

    - 보수(score > 0.8) 댓글 수: 29,637개

    - 진보(score < -0.8) 댓글 수: 3,650개 훨씬 적다

    - 따라서 UnderSampling 필요!
    !107
    사람은 잘 바뀌지 않는다!

    View full-size slide

  107. •SKLearn으로 언더샘플링

    - 유저별로 골고루 들어가도록 유저 정보로 stratify

    - 굉장히 적지만 일단 '시작'할 수 있는 데이터!

    •진보가 적다. 진보를 좀 더 찾아보자!
    !108
    사람은 잘 바뀌지 않는다!

    View full-size slide

  108. •Q. 진보 뉴스와 보수 뉴스의 댓글에 달리는 성향은 다를까?

    - 보수 뉴스에 달리는 댓글은 대부분 보수,

    진보 뉴스에 달리는 댓글은 반반?

    - 결국 보수/진보 Classifier가 필요하다!

    •진보 뉴스의 댓글들을 좀 더 라벨링해보자!

    - 추가적으로 10,000개+ 라벨링 [진행중]
    !109
    진보는 어디에 있는가?
    사실 아직 연구중!

    View full-size slide

  109. 유저의 '성향'을 좀 더
    잘 쓸 수 있는 방법이 있을까?

    View full-size slide

  110. •매번 데이터에서 직접 유저를 찾아서 태깅

    - 데이터 분석가 혼자만 할 수 있음

    - 시간이 오래걸린다!

    - DB Query 하나하나 쓰는 것도 일

    •웹에서 Interactive하게 태깅을 할 수 있게 만들자

    - 다른 사람이 미리 달아둔 태그와 메모도 참고할 수 있게 만들자
    !111
    유저를 Tagging하는 웹 서비스를 만들자

    View full-size slide

  111. •Django + Vue.js

    •기초 분석 모델 저장

    •유저 데이터 저장

    - Tag로 유저 지정

    - 유사 유저 태그 추천

    (개발중)
    !112
    유저를 Tagging하는 웹 서비스를 만들자

    View full-size slide

  112. •사람들이 참여할수록 높아지는 정확도!

    •일종의 추천 서비스와 같은 개념

    - 태그된 유저별 Clustering

    - 새로운 데이터가 일정 이상이 되면 자동으로 재학습

    - "모델도 시간이 지나면 늙는다!"

    자동화된 업데이트가 필요하다!
    !113
    유저를 Tagging하는 웹 서비스를 만들자

    View full-size slide

  113. •우리가 보는 사회는 결국 '볼 수 있는' 범위 안의 사회

    - 꼭 필터버블이 아니더라도, 사람이 볼 수 있는 것은 제한되어있다

    •사람이 하나하나 보는 것이 아닌 자동화된 작업

    •모두가 조금씩 신경쓸 수 있게 하는 환경

    - 개발자가 아닌 시민들의 참여를 이끌어내려면?

    - 최대한 적은 수고로 높은 효과를 이끌어내려면?
    !114
    맺으며

    View full-size slide

  114. •연구를 함께 진행하고 연구 인프라를 제공해주시고 계시는

    - UTA HDILAB 박덕근 교수님

    - 고려대 DAVIAN Lab 주재걸 교수님

    •아이디어를 제시해주신

    - 카이스트/IBS DSLAB 차미영 교수님

    - 카이스트 DSLAB 한지영 박사님

    - 카이스트 박사과정 정지완님

    •그 외에도 도와주신 모든 분들 감사합니다 :)
    !115
    Credit

    View full-size slide

  115. 행복하게 연구 하는 랩을 찾습니다!
    NLP / Social Data

    View full-size slide

  116. 들어주셔서
    감사합니다 :)

    View full-size slide