2015. 9. 22. 09:41ㆍ개발일기/Seminar
올해도 어김없이 DEVIEW에 참여했다.
작년에는 선착순 등록 방식이었다면, 올해에는 추첨방식으로 바뀌었는데 운 좋게도 난 2일차 당첨!!
'올해도 DEVIEW는 날 버리지 않았어!'
코엑스에 도착하자 마자 얼른 신원확인을 마치고, 1세션을 들으러 갔다.
1 세션은 네이버 검색과 데이터 마이닝 세션이었다.
1세션 : 네이버 검색과 데이터 마이닝
발표자이신 최재걸님은 네이버에서 10년간 데이터 마이닝을 했다고 한다. 10년간 일을 하면서 연관 검색어, 랭킹 시스템, LDA, 실시간 검색어 등을 개발하였는데 이에 대한 시행착오를 사례로 발표를 진행하였다.
연관 검색어는 Apriori algorithm을 이용하여 개발을 진행하였다.
Apriori 알고리즘은 빈번하게 발생하는 항목들간의 연관 관계를 파악하여 규칙을 생성해주는 알고리즘으로 연관 검색을 하는 분야에서는 쉽고 간편하여 많이 사용하고 있다고 한다.
초창기에 네이버 검색에 연관검색을 Apriori 알고리즘으로 변경하였는데, 이용율이 점점 하락했다고 한다.
그 이유를 곰곰히 따져보니 1000명이 이용했을 경우 5명으로부터 나온 결과를 마치 1000명 모두에 대한 결과로 해석했기 때문에 그 결과 품질이 당연히 안좋았고 이용자 추세가 감소하는 결과를 낳았다.
여기서 데이터 마이너가 되기 위한 첫번째 자격 요건이 나오는데 바로 기술을 완벽히 이해하고, 그 기술을 적용했을 시 어떤 서비스 결과가 발생할지를 예측할 수 있어야 한다는 것이다.
또한 랭킹 시스템을 개발하면서 trueskill이란 기술을 사용했다고 한다. (자세히 trueskill이 어떤 기술인지는 잘 모르겠음)
어찌됐건 적용했는데 역시 품질 저하가 발생했다. 문제를 찾다가 결국 통계 분야 전문가의 도움을 구했는데, 기술 특성상 분산이 작게 측정되는 경향이 발생할 수 있기 때문에 오류가 발생할 수 있다는 의견을 들었다고 한다.
여기서 두 번째 자격 요건이 다른 분야에 대해서도 잘 알고 있어야 한다는 것이다.
LDA(Latent Dirichlet Allocation)이란 topic modeling을 할 때 사용하는 기술을 개발했는데, 결국에는 사용하지 못했다고 한다.
기술보다는 어디어 어떻게 쓸지 목적을 먼저 가지는게 중요하다.
과거 네이버에서 만든 실시간 검색어 같은 경우에는 지금 현재 뜨고 있고 많이 사용하고 있는 kafka, storm, cep들을 전혀 사용하지 않고 있다. 이 말인 즉, 기술이 없어도 서비스는 만들수 있다. 기술이 서비스를 좌지우지 하지는 않는다를 나타낸다.
협력 필터라고 해서 사용자가 어떤 음악을 찾으면 그 음악과 유사한 종류를 음악을 찾아주는 서비스를 개발했다. 해당 알고리즘을 동일하게 영와 추천에도 사용했는데 그 결과가 매우 저조한 사용율을 나타냈다.
음악 같은 경우엔 추천 음악에 내가 과거에 들었던 음악을 다시 추천해주어도 되지만 영화는 과거에 본 영화를 다시 추천받을 필요가 없기 때문에 사용율이 떨어진 것이다.
해당 서비스를 개발하기 위해서는 그 분야의 도메인을 잘 알고 있어야 한다.
마지막으로 현재 개발 중인 realtime 서비스에 대한 소개를 들었다.
지금 막 sns에 올라온 내용, 사용자들이 가장 많이 본 동영상, 지금 현재 교통상황, 현재 뉴스 등의 실시간 정보를 웹페이지 하나에서 다 볼 수가 있었다.
질문이 있었는데, 사용자가 sns에 물론 가장 최근 사진을 올리기도 하지만 과거의 사진도 올리는데 이런건 어떻게 판별하느냐였는데 이에 대한 명확한 해답은 지금 찾는 과정이라고 한다.
내가 생각해도 참 어려운 문제인 것 같다.
2세션 : 대화시스템 서비스 동향 및 개발 방법
요새 머신러닝 공부 중인데 큰 도움이 될 것 같아 참여하게 되었다.
대화 시스템 동향이 쉬리나 링크등의 스마트폰에서 점차적으로 로봇에서 사물로 임베드 되는 상황이라고 한다.(Amazon echo, Cognitoys, jibo 등)
간략하게 대화시스템 구성을 살펴보면, 크게 음성인식 -> 자연어 이해 -> 대화 관리 -> 자연어 생성 -> 음성 합성으로 나눌 수가 있다.
음성인식은 사용자 음성을 인식해서 텍스트로 변환해주는 작업을 한다.
자연어 이해는 텍스트로 변환된 자료를 key:value 쌍으로 변환을 해주는 형태이고,
대화 관리는 시스템에서 어떤 대답 결과를 추출해야 하는지를 생성한다.
마지막으로 자연어 생성 및 음성 합성은 대화 관리를 통해 나타난 결론을 자연어로 생성한 후에 음성 합성 과정을 거쳐서 사용자에게 표현한다.
대화 시스템을 구성하기 위해서는 몇가지 주의해야할 사항이 있는데, 첫번째로 대화 도메인 범위를 줄이는게 정답셋을 맞출 확률이 높아진다. 예를 들어 사용자가 물어보는게 날씨, 시간 등등 어떤 도메인인지 파악할 수 있다면 정답을 맞추는게 훨씬 수월하다.
두번째는 사용자가 인터스텔라라고 물어보고 또 다시 감독은? 이렇게 물어봤다면, 두번째 감독이 인터스텔라 감독을 물어본다는 것을 파악해야 한다. 이를 생략 복원이라고 하는데 이러한 생략 복원이 잘 되어야 한다.
세번째는 중의성 해결. 사용자가 만약 걸스테이라고 물어보고 또 다시 민아라고 물어봤다면 시스템은 걸스데이와 민아가 관련이 있다는 것을 파악해야 한다. 만약 민아라고 물어봤는데 aoa 민아를 답변하면 틀린 답을 답변한 것이 될 것이다.
대화 문맥을 이어 나가는 방법으로 여러가지가 소개되었다.
- FSA 방법 : 순서도를 만들어 놓고 사용자 질문에 해당하는 답을 flow chart 따라 가듯이 하는 방법.
- Frame을 이용하는 방법 : 순서도 대신 key value 형태의 테이블을 이용하는 방법. 우선 순위가 높은 답변 형태로 시스템이 하나씩 사용자에게 질문을 던진다. ex) <비행기 예약이라면> 도착지는? 날짜는? 동반인수는?
- Agenda 기반 방법 (CMU RavenClaw): Tree 형태로 대화 문맥이 구성되어 있고, 네이버에서는 이와 비슷한데 트리가 아닌 그래프로 구성이 되어 있다.
- 강화학습을 이용하는 방법 : 사용자가 대화에 성공했을 경우 +1점, 실패했을 경우 -1점을 부여해서 낮은 점수의 path는 그 비율을 낮추는 방법이다. 관련 알고리즘으로 markov decision Process와 Partially Observable MDP가 있는데 일반 MDP는 사용자 입력이 명확한 경우 사용하고, 사용자 입력이 모호할 경우에는 Partially Observable MDP를 사용한다.
대화 시스템을 만들면서 어려웠던 점은 사용자가 어떤 대화를 할지 감이 안잡하기 때문에 테스트가 어렵다. 그래서 가능한 빨리 프로토타입을 만들고 계속 작업 해나가면서 기능 추가하고 프로토타입 개선하는 방향으로 개발을 진행했다고 한다.
또한 테스트 역시 수동 평가를 하기 때문에 결과를 판단하기가 모호한 어려움도 있었다고 한다.
3세션 : 슈퍼컴퓨팅과 데이터 어낼리틱스 프레임워크, 그리고 UNIST의 빅데이터 처리 프레임워크
이번 세션은 슈퍼컴퓨팅 동향과 UNIST에서 사용하는 빅데이터 처리 프레임워크 발표였다. UNIST는 DHT(Distributed hash table)기반의 빅데이터 프레임워크를 사용하고 있었는데, 약간 카산드라와 비슷한 방식인 것 같았다. 서버를 링 구조로 연결하고 각 서버에서 다른 서버로 ping을 날려서 죽었을 경우에는 노드에서 제외시키고... 그런 방식들이 카산드라와 비슷한것 같다.
이후엔 해당 서버 동작 방식과 라우팅 테이블 방식, 서버 노드를 찾는 방법 등에 대한 설명이 이루어졌다.
4세션 : Storm과 Elasticsearch를 활용한 로깅 플랫폼의 실시간 알람 시스템 구현
서비스의 근간이라고 할 수 있는 로그 정보. 이러한 로그 정보들을 각 서비스마다 따로 관리하고 사용하는 것이 아니라 공용적으로 사용할 수 있도록 하나의 플랫폼으로 만든 게 바로 로깅 플랫폼이다.
발표자는 이러한 로깅 플랫폼을 elastic search와 storm을 이용하여 구성하였다.
기존 네이버 알람 시스템은 5분마다 풀링을 돌리며 알람을 확인하는 시스템이었는데, 우선 실시간이 보장되지 않는다는 단점이 있었다. 또한 로그 수집 서버와 알람 서버가 1:1로 메시지를 주고 받기 때문에 알람 서버를 확장할 시 수집 서버의 재시작이 필수라는 단점도 가지고 있었고, 수집 서버와 알람 서버가 따로 존재하기 때문에 관리의 불편함을 안고 있었다.
이를 보완하기 위해 storm과 elastic search를 사용하였다고 한다.
storm은 분산 스트리밍 처리 프레임워크로써, java 또는 clojure로 구성할 수 있다. 또한 메시지 전송을 보장한다.
elastic search는 lucene 기반의 분산 검색 엔진으로 Percolator라는 기능을 통해 알람의 문맥 매칭을 가능하게 해준다.
percolator + stream process를 통해 실시간으로 알람을 전송할 수가 있다.
또한 elastic search 쿼리를 알람 질의어와 동일하게 사용할 수 있기 때문에 쿼리의 통일성을 맞출수가 있다.
5세션 : Implementing Deep Learning using cuDNN
요새 한창 관심을 가지고 있는 분야이기 때문에 많은 관심을 가진 세션이다.
cuDDN이라고 nVidia에서 제공하는 sdk인듯 싶다. 써보지는 않았는데 C++로 되어 있으며, 기존 caffe등에서 제공하는 많은 layer들이 cuDDN에서도 역시 제공되는 것 같다.
convolution layer -> fully connection layer -> softmax layer 등의 과정을 거쳐 의료 영상을 찾아내는 것에 대한 발표가 이루어졌는데, 아직 Deep learning에 대해 그리 많이 알고 있지 못해서 거의 발표자 내용을 이해하지 못했다.
6세션 : Netflix 빅데이터 플랫폼 + Apache Spark 통합 경험기
yarn에 spark를 올리고 이걸 amazon s3와 연결하는 과정에서 생기는 많은 이슈들과 버그들에 대한 사례 발표 위주의 소개를 하였다. 결과적으로 안써봐서 무슨 소리를 하는 것인지 도통 모르겠다. -_-;;
Deep learning on spark를 들을껄 그랬나;; nexfilx란 키워드에 꽃혀서...
이번 deview는 정말 못알아듣는 발표 내용 투성이었다. 아 많이 들어보기만 했지 실제 사용을 안해보고 운영도 안해보니 도통 따라 갈수가 없다는 생각을 절실히 했다.
역시.. 실전이 중요함.