최근들어 유튜브(Youtube)의 "오늘도 알 수 없는 유튜브 알고리즘이 나를 이 영상으로 끌고왔다" 라는 댓글이 밈처럼 퍼져서 추천의 상징처럼 되어가고 있지만 추천시스템을 만드는 사람에게는 넷플릭스(Netflix)를 떠올리지 않을 수 없다. 퀀텀 이론(Quantum Theory) 넷플릭스는 콘텐츠를 추천하는 것으로 큰 재미를 보았지만 어느 순간 추천의 한계를 느끼게 되었다. 이를 극복하기 위해 자체적으로 만든 퀀텀 이론(Quantum Theory)라는 것을 만들어 콘텐츠를 분류하였다. 더이상 분류할 수 없을 정도로 쪼개는 양자(Quantum) 단위로 7만 6000여개의 자체적인 장르를 만든 후 내부적으로 평가하는 과정을 통해서 영화별로 수많은 분류 태그를 만들고 데이터베이스를 만들었다. 이렇게 엄청난 ..
이진화(binarization) 이진화는 숫자의 값을 0 혹은 1의 값으로 변환하는 것을 말한다. 대표적으로 활용되는 것으로 0~255의 값을 0-1의 흑백 값으로 변환하는 이미지 이진화가 대표적이며, 그외에도 데이터를 압축하기 위해서도 활용이 된다. 이진화를 만들기 위해서는 기준값(threshold)가 필요한데 이 기준값보다 높으면 1, 낮으면 0의 값을 세팅하는 어찌보면 매우 간단한 기능이라 할 수 있다. 충분히 개인이 펑션등을 만들어서 이진화를 구현할 수 있지만 여기서는 사이킷런(Sci-kit)에서 제공하는 전처리(preprocessing) 라이브러리로 이진화 기능을 사용해보도록 한다. 이진화 예제 from sklearn import preprocessing X = [[-1,2,3],[-0.2,0...
롬복(Lombok)이 사실은 호불호가 상당히 많이 갈리는 유틸리티이고, 같이 프로젝트를 진행할 때 롬복을 사용 안해본 사람들이 있다면 더욱 문제가 발생할 수 있는 기능이고 git 등에 공유하기도 힘들어서 적극적으로 추천하는 기능은 아니지만 롬복을 사용하는 추세가 증가하다보니 설정 방법에 대해서 정리해보고자 한다. 우선 롬복이라는 것은 단순히 라이브러리만 세팅해서 되는 기능이 아니다. 그렇게 간단했었다면 롬복을 비선호할 이유도 없었을 것이다. 롬복(Lombok) 이란? 우선 롬복을 사용하는 사람들은 게터(Getter), 세터(Setter) 등을 편리하게 만들어주기 때문에 사용한다고 하지만 필자는 이것이 뭐가 불편한지 모르기 때문에 왜 이것이 편리한지를 되묻고 싶다. Getter, Setter 만들때 수동으..
개발자가 접근하기 쉽고, SI가 아니라 솔루션 업체나 회사 전산실이나 IT부서 같은 곳에 근무하게 된다면 별도의 디자이너가 붙지 않고 부트스트랩(bootstrap) 등을 이용해서 직접 디자인을 선택하고 만들어야 되는 경우가 많다. 예를 들어 소수가 사용하는 관리기의 경우 웹디자이너가 붙으면 공수(Man Month, M/M)가 많이 들 뿐만 아니라 이미 부트스트랩으로 만들어진 디자인들이 훌륭해서 디자이너가 붙는다고 해서 심미적이나 기능적으로 뛰어나다 장담할 수 없기 때문이다. 현재는 관리기 뿐만 아니라 서비스를 하는 페이지에도 부트스트랩을 받아서 커스터마이징을 하는 경우도 상당히 많은데 이미 웹개발과 부트스트랩 프로젝트는 떼려야 뗄 수 없는 프로젝트가 되어 버렸다. 부트스트랩(Bootstrap) 부트스트랩..
모멘텀(Momentum) 모멘텀이란 물리학에서 쓰이는 용어인 운동량, 동력을 뜻하며 이를 옵티마이저 개념에 적용한 것이 모멘텀 옵티마이저이다. 우선 모멘텀을 이해하기 위해서는 이전에 등장한 경사하강법 계열들을 이해해야 하는데 이 개념이 나온 이유가 바로 경사하강법 특히 확률적 경사하강법(Stochastic Gradient Descent, SGD)에서 나온 개념이기 때문이다. SGD의 지그재그로 움직이며 최적화되는 것을 해결하기 위해서 나왔으며 너무 왔다갔다 해서 지역 최소값(local minimum)에 갇혀 빠져나오지 못하는 경우가 많은데 이를 위해 관성과 가속도 넣어서 지그재그가 아니라 한 방향으로 좀 더 이동할 수 있게 한 것이다. 현재 이동하는 방향과는 별개로 과거에 이동을 했었던 방향을 기억하여 ..
추천시스템의 개념 추천 시스템(Recommender System)에 대한 정의는 다음과 같이 정의 할 수 있다. 사용자의 행동 데이터와 대상 데이터(ex: 상품, 영화 등등)를 분석하여 사용자의 현재 상황에 가장 적절한 대상 데이터를 추천하는 시스템 적절한 추천을 만들기 위해서 수많은 사람들이 연구를 해왔고, 한 사이트내에서는 적게는 하나부터 많게는 몇백개(혹은 천개 이상일수도)의 알고리즘이 존재하기도 한다. 미국을 대표하는 FANG(Facebook, Amazon, Netflix, Google) 기업들 중, 추천 서비스를 매우 적극적으로 활용하는 기업이 아마존(Amazon)과 넷플릭스(Netflix)이고 특히 넷플릭스=추천서비스라는 기업으로 알려지게 되면서 그동안 국내에서도 등한시 했던 추천에 대한 연구..
바로 이전 포스팅에서는 형태소 분석기별 가장 중요한 명사를 추출하는 성능(속도 측면)을 비교해 봤습니다. 품사 태깅(pos-tagging)은 우리가 흔히 형태소 분석기라는 말과 동의어로 생각하는 기능으로 명사만 추출하는게 아니라 문장의 모든 품사를 분석하게 됩니다. 명사만 추출하는 것은 사실 어렵지 않습니다. 단어안에 명사를 그냥 찾으면 그만이니까요. 하지만 pos-tagging은 한국어 문법을 제대로 이해해야 하고, 분석 방법과 퀄리티에 따라 속도에 큰 영향을 주게 됩니다. 즉, 명사만 추출하는 것으로 속도가 오래 걸리지 않지만 대다수 pos-tagging 작업으로 인해서 형태소 분석기가 오래 걸리게 되는 것이죠. 예를 들어, 자모 단위로 분리해서 분석을 한다면 상당히 큰 cpu 자원을 사용할 수도 있..
최근 konlpy 사이트에 적혀 있는 형태소 분석기의 분석 속도와 실제로 느꼈던 kolnpy의 개별 형태소 분석기의 성능이 맞지 않는 것 같아서 비교적 용량이 많은 문장을 기반으로 형태소 분석기의 성능을 체크해보려고 합니다. 실험에 사용된 형태소 분석기는 총 3종인 코모란(Komoran), 꼬꼬마(Kkma), Okt(Open korean text)이며 꼬꼬마는 분석속도가 나쁜 것이 체감이 날 정도로 좋지 않지만 코모란과 okt의 분석 속도도 예상 밖인것 같아서 제대로 시간을 체크하고자 하였습니다. 공통코드 import urllib.request import time from konlpy.tag import Okt from konlpy.tag import Komoran from konlpy.tag impo..
데이터의 레이블(Label)들을 보면 숫자로 되어 있어서 그대로 사용할 수 있는 데이터가 있는 반면 대다수는 문자열 형태로 되어 있어서 한번 변환을 거쳐야 되는 경우가 많다. 레이블의 경우 의미가 없는 숫자보다는 문자형태로 되어 있어야 의미를 파악하기 쉽고 나중에 데이터를 검증하기도 용이하면 더 나아가 가시화(Visualization)등을 할 때에도 유리하다. 이 레이블을 숫자로 변경하는 방법은 우리가 직접 코드를 짜도 되고 크게 어려운 기술이 아니지만 이미 라이브러리(Library)가 존재하고 있는 상태이기 때문에 굳이 힘들게 짤 필요는 없을 것 같다. 이렇게 문자열 데이터를 숫자 형태로 레이블을 변환해주는 것을 레이블 인코딩이라고 하는데 사이킷런(scikit learn, sklearn)에서는 레이블 ..
사망선고가 내려졌는데 영원히 죽지 않고 계속 떠돌아 다니는 사람이 있다고 하면 믿을 것인가? 그러나 아직도 멀쩡히 죽지 않고 살아있는 사람이 있는데 바로 흑인 여성인 헨리에타 랙스(Henrietta Lacks)이다. 헨리에타 랙스(Henrietta Lacks) 1940년대에 실험에 쓰였던 세포들은 며칠 채 생존하지 못했기 때문에 과학자들은 실험을 진행하는 것보다 세포를 살리는 것에 더 많은 시간을 할애했었다. 1951년 미국 볼티모어에서 흑인 여성 헨리에타 랙스는 아랫배 통증을 느껴 존스홉킨스 병원을 찾았으나 자궁 경부암을 진단받았고 8개월 후에 사망을 하였다. 헨리에타의 사망 후 그녀의 종양 샘플에서 채취된 암세포는 연구원의 실험실로 보내졌고 그 실험실은 인간 세포를 배양하는 실험이었다. 인간의 세포는..
현재 가장 많이 사용되는 딥러닝(Deep Learning) 기반의 분산 표현(distributed representation) 워드임베딩(Word Embedding, 자연어를 기계가 이해할 수 있는 숫자 벡터 값으로 변경하는 기술)은 Word2vec이라 할 수 있다. Word2Vec 임베딩 기술은 단순하지만 성능이 우수해서 많이 사용되는데 치명적인 문제점도 존재한다. 바로 주어지는 단어(Corpus, 말뭉치)를 기반으로 학습을 진행하며 존재하지 않던 단어를 던졌을 때 에러가 발생하는 등 만능적인 모습을 보여주지 않는다. 당연히 학습 안된 단어는 나오지 말아야 되는거 아니냐? 할 수 있겠지만 이 문제를 해결하기 위한 방식이 연구되고 있었고, 페이스북(Facebook)에서 이를 보완하는 언어 모델이 등장한다..
확률적 경사하강법은 대표적이고 인간에게 아담과 같은 존재인 경사 하강법(Gradient Descent, GD)에게서 파생된 최적화 알고리즘(Optimizer, 옵티마이저)이다. 일단 본 포스팅에 앞서 경사 하강법에는 Mini Batch Gradient Descent도 있지만 보통 mini batch를 SGD를 포함시켜서 mini batch의 특징도 SGD로 설명 하였다. 경사 하강법의 단점과 확률적 경사하강법의 원리 그러나 GD에게는 치명적인 단점이 있는데 바로 한스텝 내딛을 때마다 전체 데이터를 이용하는 단점이 있다. 이를 등산으로 비교하자면, 내가 한걸음 옮길 때마다 지도랑 나침반보고 갈길 정한다는 것과 같다. 대충 들어도 엄청 비효율적인것 같지만 반면에 성능자체는 꽤 괜찮게 나올 수 있다는 것도 대..