본문 바로가기
개발일기/Seminar

2018 ifkakao

by 유주원 2018. 9. 5.

오랜만에 KAKAO에서 개발자 컨퍼런스를 개최했다. 바로 if kakao


등록부터 사람들로 바글바글 하다.



KEYNOTE는 신정환 CTO와 김병학 AI장이 맡았다.




만약에 카카오가 한다면?? 

이 주제가 메인인 것 같다. 카카오가 한다면 세상을 이렇게 바꿀 수 있다. 이런 의미인가?


대부분 AI 관련된 이야기가 주를 이뤘다. 

1. KAKAOi가 작년에 출시되었고 이어서 카카오 미니가 출시되었다.

2. 카카오 미니는 처음 발화 인식 실패율이 12%나 됐었는데 훈련을 통해 5.9%까지 낮췄다.

3. 카카오 오픈 빌더가 오픈했다. 처음에는 15개의 도메인으로 시작했지만 지금은 40개의 도메인을 갖추었다. 또한 오픈빌더를 통해 개발 시 카카오톡과 함께 카카오미니도 연동할 수 있다.

4. KAKAOi의 직접적인 성장도 이룰 것이다. 크게 자동차와 집을 타겟으로 하고 있으며, 카카오내비에 KAKAOI 이식은 올해 내에 완료될 예정이다. 현대차와 파트너쉽도 체결하였으며, gs건설, 포스코와도 파트너쉽을 체결하였다.




1 Session : 텐서플로로 OCR 개발해보기 : 문제점과 문제점과 문제점.

- 모종훈, 오형석




일단 학습 모델을 만들기 위해서는 많은 양의 학습데이터를 필요로 하는데 OCR의 경우 이러한 학습 데이터를 합성을 통해 만들 수 있다는 사실을 처음 알았다.

또한 텐서플로우 개발시 테스트케이스를 넣는 것이 개발하는데 보다 효율적이라는 것을 모델이 죽은 예를 통해 잘 설명해 주었다.

텐서플로우 디버깅은 대부분 tf.print를 사용하였으며, tf.print의 경우 그래프에 print 노드를 추가하기 때문에 실제 값을 확인할 수 있다.

또한 텐서플로우에서의 unittest의 경우, 결과 값이 항상 같게 나타나지는 않는다. 왜냐하면 w의 값이 random initialization을 하기 때문에 똑같은 output이 나타날 수가 없다. (w를 고정하면 되긴 하지만... 그게 의미가 있을지는...)

텐서플로우에서의 unittest는 데이터 demension check 용도로만 활용하도록 하자.


OCR 모델의 경우는 CNN과 LSTM의 조합이라고 설명하고 있다.



위의 그림과 같이 CNN을 돌린 후 그 결과를 RNN LSTM cell에 넣고 마지막에 softmax로 결과 값을 가져오는 구조인 듯 하다.

CNN의 경우 일정 특정 영역의 특징만 담을 수가 있는데, RNN을 통해 이미지 전체의 특징 데이터도 담을 수가 있었다고 설명하고 있다.


아래의 그림처럼 CNN의 경우 특정 영역의 데이터 값만 담고 있는데 RNN을 통해 전체 데이터의 특징도 유추해 볼 수 있다고 한다.

m의 경우 해당 영역에서의 특징 데이터는 l로 인식할 수가 있는데 시퀀셜한 인풋을 통해 이를 m으로 유추해 낼 수 있다고 말하고 있다.


또한 loss 함수를 CTC 알고리즘을 사용했다고 말하고 있다. CTC알고리즘은 특정 영역을 정한 다음 해당 영역의 글자를 인식한다. 만약 공백이라면 앱실론으로 표기한다. 이렇게 인식이 완료되면 반복 글자는 합치고 앱실론은 제거해서 글자를 인식한다.



그럼 loss는 어떻게 구하는거지?? 잘은 모르겠는데 해당 글자가 발생할 수 있는 전체 경우의 수를 구한 후 이걸로 확률값을 구하는 것 같다. (자세히 모르겠음...)



CTC나 LSTM말고 다른 방법도 써봤다고 하는데 (self attension) 성능이 더 안나왔다고 한다.

질문으로는 다음과 같은 질문이 나왔다.

1. 성능 평가 도구로는 어떤 걸 사용 했나? 

-> 내부 평가 도구를 사용했으며, 좀 더 정확한 평가 도구가 필요할 것 같다.

2. LSTM을 빼고 돌렸을 때와 넣고 돌렸을 때의 성능 차이?

-> LSTM을 빼고 돌려보지 않아서 잘....

3. Label과 이미지 사이즈는 얼마로 줬는지?

-> Label과 font는 랜덤 생성한 후 합성 해서 만들었고, 이미지의 경우 높이는 32로 고정했고 너비는 랜덤을 줬다.




2 Session : 카카오의 광고지능

- 정부환



이번 세션의 주제는 왜 이 광고가 나에게 노출되는지를 알려주기 위함이라고 한다.

일단 사용자가 어떤 웹페이지에 접속하면 해당 페이지에서는 이러한 사용자가 접속했으니 각 DSP에 비딩을 해달라고 요청을 한다. 각 DSP별 비딩 결과를 보고 가장 합리적인 광고를 선택하게 된다.

합리적인 선택 중의 하나로 PTR(이 사용자가 해당 광고를 클릭할 것인지에 대한 확률)을 들 수가 있으며 일단 들었을 땐 logistic regression이라고 했으니 다항 회귀에 weight는 negative log likelihood + L2 regualarization을 이용해서 값을 구한다고 한다.




질문

1. 사용자 특징을 찾을 때, 일일이 테스트해보고 특징 데이터로 삼는지?

-> 어려운 문제이긴 하나 일일이는 아니고 LDA 등과 같이 topic model을 한다면 topic 별로 특징데이터 테스트를 한다.

2. 사용자별로 특징 데이터가 다를까? (뚱뚱한 사람, 날씬한 사람 등)

-> 그렇지는 않다.

3. 어느 정도가 되어야 충분한 광고 수인지?

-> 현재 광고의 수는 수만 건이며, 타켓팅을 할경우에는 수천건으로 준다. 이 수천건을 기준으로 랭킹이 이루어진다.

4. 사용자 특징을 고를 때 감성적인 측면까지 이용하는지? (날씨나 온도)

-> 그렇지는 않다. 하지만 context awareness를 활용하고 있긴 하다. (ex 파리바게트 주변을 지날때는 파리바게트 광고를 보여줌)




중간 밥 타임!


코엑스는 정말 관광지가 맞는 것같다. 별마당 도서관? 도 처음 가보고, 말 많던 삐에로 쇼핑도 구경해 봄 ㅋㅋ



3 Session : Unify data and model using Apache S2Graph and GraphQL

- 윤도영



이번 세션은 그래프 모델에 관심이 많아서 듣게 되었다. 

발표자는 사용자 메타데이터(사용자, 영화, 음악) 과 사용자 활동 데이터 (누가 어디서 무엇을 했는지)를 그래프 모델로 만들어서 보다 효율적으로 데이터를 활용하자는 취지로 해당 프로젝트를 만들게 되었다고 한다. 현재는 아파치 인큐베이팅

메타데이터는 vertex로 쓰이고 사용자 활동은 edge로 쓰이게 된다.




또한 graphQL을 쓰면 모델과 데이터 간의 traffic 낭비를 줄일 수가 있다고 한다. 

movieLens를 이용해서 영화 추천하는 API 만들기를 s2graph를 이용해서 만들어 보기를 추천하고 있다.

  사실 대충 데이터 스키마를 만들고 해당 스키마에 맞게 넣어주면 내부에서 알아서 그래프 형태로 저장이 되고, 모델 같은 경우는 customizing 할 수가 있어서 모델 결과를 output으로 뿌려줄 수도 있다. 정도로 이해 했으며, 보다 정확히 이해하기 위해서는 저 무비렌즈를 한번 해봐야 될 것같다. 

또한 모델 대신 elastic search를 집어 넣게 되면 쿼리 요청도 가능해 진다고 한다.




4 Session : TOROS N2 - lightweight Approximate KNN library

- 김성진


이번 세션은 KNN의 속도 개선을 위한 라이브러리 개발 소개라고 생각하면 될 것 같다. 

일단 KNN을 계산하기 위해 brute force 방식으로 계산하게 되면 상당히 많은 시간이 소요가 된다.

그래서 KNN을 보다 효율적으로 계산하기 위해 나온 라이브러리들이 있다.



Annoy와 nmslib인데 결과적으로 말한다면 nmslib이 성능이 더 좋다고 한다. 

하지만 이번에 발표자는 TOROS N2라는 새로운 라이브러리를 만들었으며 N2와 nmslib을 비교하자면 


TOROS N2

- mmap 지원. (같은 프로세스간 메모리 공유가 가능)

- nmslib에 비해 55% 빠른 인덱스 빌드 속도.

- 하지만 search는 nmslib이 더 빠름.

- HNSW 알고리즘 지원 (이건 nmslib도 지원)


참고로 HNSW 알고리즘에 대해 설명하자면 노드를 크게 3개의 레이어로 나눈 후 최상위 레이어부터 목적지와 가까운 노드를 찾으면서 점차 범위를 줄여나가면서 가까운 노드를 찾아내는 방식을 말한다. 이렇게 하면 full search를 할 필요가 없기 때문에 보다 효율적이라 할 수가 있다.



또한 python lib도 지원하고 있다.



질문 사항으로는 거리 계산 파라미터 값이 따로 있는지를 물어봤는데 현재는 유클리안 디스턴스와 앵귤러 디스턴스(코사인 유사도의 역수)를 사용하고 있다고 하며, K 파라미터의 값을 정하는 문제는 future worker라고 답하고 있다.




5 Session : 딥러닝을 활용한 뉴스 메타 태깅

- 김기도


해당 프로젝트의 목적은 기사 형태를 분류해 내기 위함이다. 즉 사실 위주 기사와 해설 위주 기사 이 두 분류로 구별해 내기를 원한다.

사용 모델은 Character based CNN을 사용해서 모델을 학습했다.

일단 가장 큰 문제가 학습 데이터였는데, 해설 위주 기사가 기사 길이가 더 길 것이라 판단해서 기사 길이를 기준으로 나누었고, 나머지는 전수 검사를 통해 학습 데이터를 만들었다고 한다.

총 학습 데이터는 44만건이며 제목 + 본문을 concat 한 다음 로마자 변환 하고 600 char만 학습에 사용하였다.

사실 기사와 해설기사, 기타의 비율을 10:1:10으로 하였을 때, 전체 정확도는 79.8%였지만 해설 기사는 49%로 나왔다.

그래서 비율을 바꿔서 2:1:2로 바꿔서 다시 학습을 하였고, 전체 정확도는 82,2%, 해설 기사의 경우 62%의 향상을 보였다. (13%면 대단한 듯)


해설 기사의 경우 600char로는 학습 데이터가 모자란 것 같아서 1014char의 모델로 다시 학습을 실행하였고, 81.22%, 해설 기사 : 74.68%의 정확도가 나타났다. 하지만 기타 기사에서의 오탐도 늘어서 결국 600char와 1014char 모델을 앙상블로 결합하기로 한다.

앙상블 모델의 경우 정확도가 83.7% , 해설 기사의 경우 75.9%의 accuracy 성능을 나타냈다고 발표하고 있다.


또한 이렇게 학습한 모델을 기반으로 아래의 방식의 뉴스 메타 태깅 시스템을 구축했다고 발표하고 있다.