김기도(olaf.kido) / kakao corp.(미래미디어파트)
---
사용자에게 알맞은 뉴스를 전달하기 위해서는 언론사에서 전달해주는 기본 정보 이외에도 컨텐츠의 다양한 특성을 파악하여 이를 사용자와 연결 짓는 것이 중요합니다. 다양한 특성 정보들 중에서 기사의 유형이나 핵심 주제 같은 것들은 컨텐츠 본문을 자연어 처리해서만 얻을 수 있기 때문에 분석하기가 매우 까다롭습니다. 본 발표에서는 Deep Learning 기술을 사용한 '뉴스 메타 태깅 시스템'의 개발 사례를 소개합니다. 이 사례를 통해 분석 모델 학습부터 운영 시스템 개발 과정에서의 고민과 Lessons Learned를 공유하도록 하겠습니다.
3. 뉴스 메타데이터 (News Metadata)
콘텐츠 분석 정보언론사 제공 속성
뉴스 기사의 특징을 설명하는 정보들
기자
카테고리
언론사 형태 분류
내용 분류
이미지 분석
ML / DL
2018년 8월 7일자 인입 기사
4. 뉴스 메타데이터 (News Metadata)
다양한 메타데이터를 확보하여 사용자에게 필요한 콘텐츠 제공에 활용
유익한 /
관심있는 /
필요한 것을
보고싶다!
컨텐츠의
특성들
다양한
메타데이터
=
Image: commons.wikimedia.org
5. 뉴스 메타 태깅 시스템
메타데이터 생성과 활용이 잘 되려면 데이터의 유통이 간단해야 함
SILO
FLOW
Produce Consume
6. 목차
1. 기사 형태 분류 하기
• Convolution Neural Network로
기사 형태 분류 하기
• 학습 데이터셋 구성 ~ 최종 모델 결과
2. 뉴스 메타 태깅 시스템
• 모델을 활용하는 메타 태깅 시스템 개발
• 데이터 흐름 및 System Design
3. 향후 과제
#텍스트분류
#딥러닝모델
#딥러닝개발
#메타데이터플랫폼 #다하는데요
...
7. 발표에서 주로 다루는 것
학습
데이터
구성
모델
선정
메타데이터
기획
모델
구현
테스트 및
평가
모델
배포
서비스
운영
파라미터
설정
모델
API 구현
메타 태깅
설계/구현
딥러닝 스터디 한 것을 잘 활용해보려고
서비스 개발에 도전한 이야기!!!
딥러닝을 활용한
뉴스 메타 태깅
9. 기사 형태 분류
- 육하원칙 위주로 기술
- 스트레이트 기사라고 함
- 사건, 인물에 대한 심층 취재 기사
- 르포, 스케치, 인터뷰 등
사실 전달형 기사 (A) 해설/묘사형 기사 (B)
2018년 8월 21일자 인입 기사
이산상봉 이틀 째..'가족끼리' 개별상봉 및 오찬(종합)
남북 이산가족들이 상봉 행사 이틀째인 21일 개별상봉을 통해 좀 더 밀착된 시간을 보
낸다. 양측 가족들은 이날 오전 10시10분께 우리 측 상봉단의 숙소인 금강산 외금강
호텔의 각 객실에서 개별 상봉을 시작했다.
사실 전달형과 해설/묘사형을 나누는 문제로 정의
10. 기사 형태 분류
2018년 8월 20일자 인입 기사
- 육하원칙 위주로 기술
- 스트레이트 기사라고 함
- 사건, 인물에 대한 심층 취재 기사
- 르포, 스케치, 인터뷰 등
사실 전달형 기사 (A) 해설/묘사형 기사 (B)
워리어 플랫폼 입고 사격해보니 '99점'
5 (5 ) . 5
, , , , .
. , .
사실 전달형과 해설/묘사형을 나누는 문제로 정의
11. 기사 형태 분류
2018년 8월 20일자 인입 기사
- 육하원칙 위주로 기술
- 스트레이트 기사라고 함
- 사건, 인물에 대한 심층 취재 기사
- 르포, 스케치, 인터뷰 등
사실 전달형 기사 (A) 해설/묘사형 기사 (B)
워리어 플랫폼 입고 사격해보니 '99점'
5 (5 ) . 5
, , , , .
. , .
사실 전달형과 해설/묘사형을 나누는 문제로 정의
정보량이 많고 오래 읽을 만한 내용의
기사들을 찾는 특징 중 하나
12. Text Classification by
Character based Convolution Neural Network
• 논문
• Text understanding from scratch
• Character based convolution neural network (X Zhang, J Zhao, Y LeCun)
• 모델
• 6개 Convolution Layer
• 3개 Fully Connected Layer
• 구현
• Tensorflow
Image: X Zhang, J Zhao, Y LeCun. Character based convolution neural network (NIPS 2015)
13. 뉴스 기사 분석을 위한 고려 사항들
뉴스 기사 콘텐츠를 “있는 그대로” 분석에 활용
• 형태소 분석, Word Embedding 보다는 Character 단위 처리
==> 기사 제목이나 본문의 특징적 기호 활용 (예: [날씨], (종합), “나혼자”)
• 한글, 한자 Romanization (로마자 변환, 음역)
==> alphabet space 안에서 처리 (예: ⽂정부, ⾭ "소득성장 가속”)
• 문자와 단어의 순서 보존하여 기사의 문투 학습
==> 1D Convolution
…
<-channel
->
(num
ofalphabet)
<- length ->
( j o n g h a p ) b e i , u r i g u k m
( j o n g h a p ) b e i , u r i g u k m
14. 학습 데이터 구성
정답을 가지고 있지 않은 문제의 정답셋을 만들어 내기
• 기사 형태별 샘플을 구할 수 있는 기준을 찾음
• 예: 기사의 길이 A=[500, 1200], B=[3000
• 오분류된 (mislabelled) 데이터가 있을 수 있음
• 오분류 패턴이 일관되지 않다면 패턴 학습 대세에 영향 적음
(예: 특정 키워드, 특정 언론사 모두 오분류)
Step 1. 근사기준
뉴스 도메인 전문가!
➕
• 우리에겐 뉴스 전문가들이 있다!
• 학습 데이터(샘플), 테스트 데이터(전수)를 검수
Step 2. 보완책
Image: kakaofriends.com
15. 시험 범위가 확정되었으니 시험을 보자!
• 학습 데이터
• 총 뉴스 44.2만건
• 사실전달 : 해설/묘사 : 기타 = 10:1:10
• 제목+본문 concat하여 600 char만 사용 (로마자 변환 후 기준)
해설/묘사형 기사들을 더 모으자!!!
학습 데이터 구성
• Validation Accuracy: 79.3%
• Test Accuracy: 79.8% — 하지만, 해설/묘사 Recall: 42.5%
• 특징
• 해설/묘사형 기사의 수가 너무 적어서 분류가 잘 안됨
테스트 결과
16. 참고서를 더 읽어보고 시험을 보자!
• 학습 데이터
• 총 뉴스 55만건
• 사실전달 : 해설/묘사 : 기타 = 2:1:2
• 제목+본문 concat하여 600 char만 사용 (로마자 변환 후 기준)
기사 본문을 더 길게 학습 해보자!
학습 데이터 구성
• Validation Accuracy: 83.3%
• Test Accuracy: 82.2% — 해설/묘사 Recall: 62.0%
• 특징
• 사실전달 기사의 표현을 잘 학습 (언제 누가 뭐했다, OO에 따르면, 보도했다)
• 해설/묘사 기사 중에서도 해설기사나 인터뷰 기사를 높은 확률 값으로 분류
• 그러나 재현율이 낮음
테스트 결과
17. 시험 범위를 늘렸으니 다시 시험을 보자!
• 학습 데이터
• 총 뉴스 55만건
• 사실전달 : 해설/묘사 : 기타 = 2:1:2
• 제목+본문 concat하여 1014 char를 사용 (로마자 변환 후 기준)
학습 데이터 구성
• Validation Accuracy: 82.76%
• Test Accuracy: 81.22% — 해설/묘사 Recall: 74.68%
• 특징
• 해설/묘사 기사 재현율 상승
• 연재, 기획코너 기사를 높은 확률 값으로 분류
• 600 char 학습 시 ‘기타’ 기사로 잘 분류하던 기사들을 헷갈려하는 경우도 있음
• 예) ‘오늘의 운세’류 기사 중 일부 길이가 긴 것들
테스트 결과
18. 모델 앙상블 (Ensemble)
학습 모델마다 특성이 다르므로 이를 결합하여 결과 변동성을 줄임
Model #1
Model #2
Add(Model[#1:2][A]),
Add(Model[#1:2][B]),
Add(Model[#1:2][C]).
Dataset #1
Dataset #2
• Accuracy: 83.7% (+1.5%)
• 해설/묘사 Recall: 75.9% (+1.2%)
모델이 서로 놓치는 부분을 보완해줌
19. 기사 형식 분류 결과
사실 전달 기사 분류 결과
2018년 08월 23일 인입 기사
1 연준, 트럼프 압박에도 '9월 긴축' 예고.."곧 금리인상 적절"(종합)
2 파리 교외서 30대 남성 흉기 휘둘러 3명 사상(종합)
3 브라질 "베네수엘라 난민 이달 말부터 단계적으로 분산이주"
4 英, 신용카드 결제비용 증가 등 '노딜브렉시트' 대비 지침 발표(종합)
5 백악관 "미일정상 통화..강력한 대북제재 유지 약속"(종합)
해설/묘사 기사 분류 결과
1 [기고]학교 시민교육을 제도화하자
2 [우보세] 신바람 한점 없는 오너들
3 청년'에서 '엄마'로, 제2의 정치 인생 맞이하는 신보라
4 [사설]문재인 정부 첫 개각, 국정쇄신 계기로 삼아야
5 [조한욱의 서양 사람] 의적의 탄생
20. 기사 형식 분류 결과
딥러닝 고장내는 기사
2018년 08월 23일 인입 기사
A : B : C
=
35% : 31% : 34%
22. 뉴스 메타 태깅 시스템
뉴스 발행 후 메타데이터를 ‘생성’하고 ‘유통’시키는 플랫폼
Design Goals
실시간 프로세싱
메타 태그 생성의 비동기성
메타 태그 생성 기술의 다양성
• 기사가 들어오는 대로 바로 메타데이터를 생성
• 다양한 조직과 플랫폼이 메타 데이터 생성에 참여
• 각 메타데이터 생성은 비동기적으로 이루어져야
(예외: 메타데이터간 의존성이 있는 경우)
• 기계학습, 딥러닝 플랫폼의 다양성을 수용할 수
있어야
23. 뉴스 메타 태깅 시스템
-NEWS TOPIC- -TAGS TOPIC-1
+
메타데이터 생성 서비스
(예: 기사 형태 분류)
메타데이터 생성 서비스
2 3
4
CMS
메타데이터 consumer
5
• 콘텐츠와 메타데이터를 함께 feeding
• News Topic에서 콘텐츠와 메타데이터 흐름을 모두 Tracking
• 동일 뉴스 - 동일 메타데이터가 중복 처리 되지 않도록 해야
• 콘텐츠+메타데이터를 조합하여 새로운 메타데이터를 만들기 용이
메타 데이터의 생성과 소비가 함께 이루어지는 흐름
24. System Architecture
Ensemble
API
Ensemble
API
Inferrer API
Inferrer API
Inferrer API
Inferrer API
Inferrer API
Inferrer API
-NEWS TOPIC- -TAGS TOPIC-
메타데이터 생성 = Ensemble - Inferrer API Services
Meatadata API Services
25. Inferrer API
• / API
• API
• Dockerizing +
•
• API / , Ensemble
역할 및 기능
Ensemble
API
Ensemble
API
Inferrer API
Inferrer API
Inferrer API
Inferrer API
Inferrer API
Inferrer API
26. Inferrer API
기사 형태 분류 CNN API 사례
Docker
Tensorflow
Model
Flask App
uWSGIwaitress
class TensorflowModel:
def __init__(self, tag, signature_key, input_key, output_key, path):
self.sess = tf.Session(graph=tf.Graph())
meta_graph_def = tf.saved_model.loader.load(self.sess, [tag], path)
signature = meta_graph_def.signature_def
tensor_name_x = signature[signature_key].inputs[input_key].name
tensor_name_yhat = signature[signature_key].outputs[output_key].name
self.input = self.sess.graph.get_tensor_by_name(tensor_name_x)
self.model = self.sess.graph.get_tensor_by_name(tensor_name_yhat)
• uWSGI + Flask + Tensorflow API
• tf.saved_model API로 학습한 모델을 protobuf로 export / import
기사 형태 분류 API 구현
27. Ensemble API
• Inferrer API 호출
• 각 모델에 필요한 입력 값 (Feature) 생성
• 기사 형식 분류의 예: 한글 romanization
• 모델 추론 결과 Ensemble 로직 처리
• 메타데이터 서비스의 Gateway
• 공통 기능: authorization, logging 등
역할 및 기능
• spring-webflux로 개발
• 여러 소스(Inferrer API, 기타 Feature 생성을 위한)에서 정보를 취합
• 병렬-비동기 처리 구조의 이점
구현
Image: pexels.com
29. Message Flow Control
-NEWS TOPIC- -TAGS TOPIC-
Filtering
Invoke
Ensemble
Post-
process
Produce
Message Flow Control
•
• message parsing & filtering
• Ensemble API ,
•
•
역할 및 기능
30. Message Flow Control
Apache Nifi
• Data Flow 개발이 간단
(다양한 데이터 source, sink 지원)
• 각 처리 단계별로 in/out 처리량과 데이터 모니터링
(Data provenance)
• nifi-registry와 연동하면 Data Flow 형상 관리 가능
특징
31. Metadata Flow
Ensemble
API
Ensemble
API
Inferrer API
Inferrer API
Inferrer API
Inferrer API
Inferrer API
Inferrer API
-NEWS TOPIC- -TAGS TOPIC-
{ “title”: “오늘의 날씨”,
“contents": “오늘 전국 날씨는”
}
req:
{ “news”: “oneulyinalssioneulyi
jeongug ” }
{ “tagGroup”: “news”,
“tagKey”: “news-type”,
“value”: 0 }
res:
{ “valueName": “model403”,
“valueType”: “List”,
“values”: [ 0.7, 0.1, 0.2 ] }
기사 형태 분류 사례
CMS
Filtering
Post-
process
Produce
Invoke
Ensemble
33. 향후 과제
• 딥러닝 모델 품질 관리
• 오분류 사례 수집 및 모델 재학습
• (현재는 시간별 분류 결과량 Trend 모니터링)
• 다양한 메타데이터 추가
• 기사 내용의 특징 분석
• 기사 내 사진, 차트, 인포그래픽 분석
• 음성 뉴스 및 동영상을 활용한 다양한 실험