본문 바로가기

IT 기록32

#5 행렬 인수분해(Matrix Factorization) [이전 글]#4 추천 시스템 - 협업 필터링(Collaborative Filtering) 기초 1. 행렬 인수 분해(Matrix Factorization) 행렬 인수 분해는 간단한 임베딩 모델이다. $m$은 User(or query)의 수이고, $n$은 Item의 수인 피드백 매트릭스 $A \in R^{m \times n}$가 주어질 때 모델은 row $i$는 User $i$ 임베딩인 User 임베딩 매트릭스 $U \in R^{m \times d}$와, row $j$는 Item $j$ 임베딩인 Item 임베딩 매트릭스 $V \in R^{n \times d}$를 학습한다. $UV^T$의 내적(Dot Product)이 피드백 매트릭스 A의 근삿값이 되도록 임베딩을 학습한다. $U.V^T$에서 $(i, j)$.. 2020. 3. 8.
클린코드 #0 장인 정신을 익히는 방법! 비전공자로 IT 기업에 취업한 지 어느덧 4년 차가 되었다. 시스템을 운영과 유지보수하면서 개발도 같이 진행했다. 시스템을 운영하면서 보통 다른 사람들이(프로젝트를 진행한) 짠 코드를 보게 되는데, 그 수준이 천차만별이다. 코드를 읽으면 바로 어떤 프로세스를 수행하는지 직관적으로 이해되는 코드가 있다. 반면 대체 왜 이렇게 작성을 했는지 의도를 알 수 없어서 함부로 손대기 두려워지는 코드들도 있다. 그러다 내가 개발한 코드를 한참 뒤에 다시 보면서 '이걸 왜 이렇게 짰을까?'라는 생각을 한 적이 있다. 항상 시간에 쫓기다보니 코드에 대한 고민을 하기보다는 기능이 동작하면 넘어갈 때도 많았다. 나 또한 안 좋은 코드를 양산해내고 있었다. 어떻게 코드를 짜는 게 좋은 것인지 확실히 익히고, 습관을 제대로 들.. 2020. 3. 6.
#4 추천시스템 - 협업 필터링(Collaborative Filtering) 기초 [이전 글] #3 추천시스템 - 컨텐츠 기반 필터링(Content-based Filtering) 1.협업 필터링(Collaborative Filtering) 컨텐츠 기반 필터링의 한계를 해결하기 위해 협업 필터링은 User와 Item간의 유사성을 동시에 사용하여 추천한다. 이를 통해 의외의 추천(serendipitous recommendations)도 가능하다. 즉, 협업 필터링 모델은 유사한 사용자 B의 관심사에 따라 사용자 A에게 Item을 추천할 수 있다. 또한 임베딩은 feature의 수작업(hand-engineering)에 의존하지 않고 자동으로 학습될 수 있다. 2.영화 추천 예시(Movie Recommendation) Training 데이터가 다음과 같은 피드백 매트릭스로 구성된 영화 추천 .. 2020. 3. 1.
#3 추천시스템 - 콘텐츠 기반 필터링(Content-based Filtering) [이전 글]#2 추천 시스템 - 후보 생성(Candidate Generation) 1.콘텐츠 기반 필터링(Content-based Filtering) 개요 콘텐츠 기반 필터링은 Item의 Feature를 사용한다. 사용자의 이전 행동(클릭, 시청, 구매 등) 또는 명시적 피드백(평점, 좋아요 등)을 기반으로 사용자가 좋아하는 것과 유사한 다른 항목을 추천한다. 콘텐츠 기반 필터링을 시연하기 위해 Google Play 스토어의 일부 기능을 직접 설계하고 도출해보겠다. 다음 그림은 각 행이 앱을 나타내고 각 열이 Feature를 나타내는 Feature 매트릭스를 나타낸다. Feature에는 분야(예 : 교육, 캐주얼, 건강), 앱 게시자 및 기타 여러 가지가 포함될 수 있다. 단순화하기 위해 이 Featur.. 2020. 2. 28.
사이드 프로젝트#2 HSK 단어 정리 자동화 1. 문제 상황 중국어 강사인 지인 A씨는 매번 새로운 수업을 맡게 될 때마다 강의 자료를 준비하는데 들어가는 시간이 너무 많다고 토로했다. 특히 강사의 판단은 많이 들어가지 않고, 단순히 반복적으로 해야하는 업무들이 많았다. 그 중 가장 귀찮고 시간을 많이 잡아먹는 업무는 단어의 뜻을 사전에서 찾아 단어장을 만드는 것이다. 약 2,500개의 단어를 사전에 검색하고 성조, 품사, 뜻을 정리하는데 상당한 시간이 소요된다고 하였다. 2. 기획 및 진행 지인 A씨에게 그렇게 단순 반복적인 업무는 요즘 자동화 프로그램으로 해결할 수 있다고 귀띔해주었다. 그리고는 나도 재미있을 것 같아 하나 만들어주겠다고 했다. 나름 오랫동안 HSK를 공부한 경험이 있기 때문에 업무(?) 영역에 대한 이해도는 충분한 편이었다. .. 2020. 2. 10.
사이드 프로젝트#1 OCJP DUMP 앱 만들기 1.기획 OCJP 자격증(Oracle Certified Java Programmer)이란 자바 프로그래밍 언어 활용 능력을 검증하는 자격증이다. 직접 개발한 선 마이크로시스템즈에서 자바 프로그래밍 언어에 관련된 지식을 표준화된 방식으로 검증해 주는 시험인데, 선 마이크로시스템즈가 오라클사로 인수되면서 자격증 명칭이 SCJP에서 OCJP로 변경되었다. 2017년 신입사원 시절 성장에 대한 의욕이 뿜뿜했을 때, 자격증도 취득하면 좋을 것 같아서 업무와 연관된 자격증을 찾아보았다. 그러던 중 JAVA와 관련된 자격증이 있다는 것을 알게 되었고, JAVA 공부도 할 겸 OCJP 자격증 시험을 등록했다.(OCJP 자격증 공부를 아주 정석으로 해야만, JAVA 공부가 될 듯하다. 이 글에서도 나타나지만, 나는 DU.. 2020. 2. 2.
아무리 바빠도, 사이드 프로젝트를 하는 이유 세상에 바쁘지 않은 사람은 없다. 학생도, 직장인도, 주부도 모두 각자의 삶을 살아가느라 바쁘다. 이렇게 바쁜데도 시간을 쪼개서 열심히 '딴짓'을 하는 사람들이 있다. 여기서 '딴짓'이란 사이드 프로젝트(Side project)를 의미한다. 사이드 프로젝트의 사전적 의미는 '생업과 함께 좋아하는 일을 지속적으로 하는 것'이다. 의미만 보면 취미 활동과도 비슷해 보인다. 다만 내가 좋아하는 일을 '기획-진행-평가'와 같이 프로젝트의 형태로 진행하는 것이다. IT 영역에 종사하는 사람들이 사이드 프로젝트를 많이 진행하기는 하지만, 사이드 프로젝트 자체가 IT 영역에 한정되어 있는 것은 아니다. 유튜브 시작하기, 바디 프로필 찍기, 블로그 운영하기 등이 다양한 활동들이 모두 사이드 프로젝트가 될 수 있다. 왜.. 2020. 1. 28.
#2 추천 시스템 - 후보 생성(Candidate Generation) [이전 글]#1 추천 시스템 - 소개 및 배경지식 1.후보 생성(Candidate Generation) 개요 후보 생성은 추천 시스템의 첫 번째 단계이다. Query를 입력하면, 관련된 후보군의 Item 세트를 생성한다. 후보 생성 과정에는 두 가지 대표적인 필터링 기법이 있다. 첫 번째는 Item 간의 유사도를 활용하여 사용자가 좋아하는 Item과 유사한 Item을 추천하는 콘텐츠 기반 필터링(Content-based filtering)이다. 예를 들어, 사용자 A가 고양이 비디오를 보았다면, 다른 귀여운 동물 비디오를 추천하는 방식이다. 두 번째 필터링 기법은 협업 기반 필터링(Collaborative filtering)이다. Query와 Item의 유사도를 동시에 활용하여 추천한다. 사용자 A가 사.. 2019. 6. 30.
#1 추천 시스템 - 소개 및 배경지식 1. 소개(Introduction) 추천 시스템이란 특정 사용자가 특정 시점에 관심을 가질만한 정보(영화, 음악, 책, 뉴스, 이미지, 웹 페이지 등)를 먼저 제시하는 시스템을 말한다. 우리가 일상적으로 접하는 유튜브, 페이스 북, 아마존 등의 다양한 서비스들이 딥러닝을 활용한 추천 시스템의 사례들이다. 이런 추천 시스템을 활용한 서비스들은 단순히 사용자들을 만족도를 높이는데서 그치지 않고, 높은 매출로 이어진다. Netflix 영상 시청의 80%가 추천 시스템에서 비롯된 것(2017년)이고, 아마존의 추천 시스템은 전체 매출의 35%를 발생(2015년)시켰다. 이미지/영상 인식, 자연어 처리 등 화려하고 놀랄만한 기술은 아니지만, 추천 시스템은 비즈니스에 가장 광범위하게 적용이 가능한 실용적인 기술임이.. 2019. 6. 28.