본문 바로가기

전체 글418

word2vec으로 영화 추천 하기 word2vec을 검색 엔진에 포팅했는데 이제 이걸 가지고 무엇을 해야 하나 고민을 하던 찰나에 아래의 링크를 발견했다. http://www.slideshare.net/ssuser2fe594/2015-py-con-word2vec word2vec을 이용해서 영화 추천을 해봤다는 발표자료인데 word2vec에 학습시킬 corpus만 잘 조합하면 가능할 것 같아서 나도 한번 해보기로 했다. movieLens 라는 사이트에 들어가게 되면 사용자들이 각 영화에 대해 평점이나 tag를 매겨놓은 데이터를 다운 받을 수가 있다. 나같은 경우엔 다운 받은 파일들 중 movies.csv, ratings.csv 만 가지고 word2vec으로 만들 corpus를 만들어 보기로 했다. movies.csv 같은 경우에는 영화 i.. 2016. 11. 18.
backpropagation 손으로 따라가 보기 들을 때면 '아하~' 하고 이해하지만 자고 일어나면 항상 '왜 저렇게 되지??' 의 대명사가 되었던 backpropagation.. 그래서 직접 손으로 따라가 보기로 했다. target이 되는 방정식은 y = wx의 가장 간단한 1차 방정식.. 원래는 y =3x의 방정식인데, 이를 찾아가는 과정을 backpropagation을 써서 따라가 보기로 했다. 우선 w의 처음 초기 값은 1로 설정한다. 그리고 cost function은 (target - 예측값)의 제곱을 구하는 MSE를 쓰기로 한다. 그럼 이제부터가 관건인데.. 우리가 실제 알고 싶어하는 것은 w 값이 변했을 때 cost function의 변화량이 얼마나 바뀌는가 이다. 왜냐하면 cost function의 변화량이 크다는 것은 아직 정답 값과 .. 2016. 11. 17.
Deview 2016 올해로 9번째를 맞이하는 naver deview 행사. 이번에는 놀랍게도 이해진 의장이 처음 인사말을 해서 놀랐다. (실제 얼굴 처음 봄) ㅋㅋ 그 다음으로 이어지는 송창현 CTO key note Deview 1일차 1. key note 네이버에서 밀고 있는 서비스 - papago : 번역 앱. 뉴럴 알고리즘 적용. - WHALE : 네이버 자체 브라우저. UI적으로 신기한 것 같다. 이미지도 번역해 준다는데?? - 그리고 인공지능 비서 서비스 같은 프로젝트를 진행 중인 것 같다. Amica 라고 부르는 것 같은데 (아무래도 네이버도 알파고 영향을 받은 듯) - 자동차 자율 주행 기술. - 네이버에서 만든 첫번째 로봇 M1. 해당 로봇을 이용해서 실내 지도를 만들 수 있다고 한다. - 오늘 키노트에서 발.. 2016. 10. 24.
Jupyter에서 Matplotlib 한글 적용하기 word2vec을 통해 word 들을 vector로 변환하였고, 이를 그래프로 표현해주어야 한다. (word 간의 분포도를 보고 싶으니깐..) vector는 3차원만 넘어가도 표현하는데 어려움이 많다. 그래서 이를 위해 tsne라는 것을 사용했다. tsne는 vector의 차원을 줄여주는 기법 중의 하나로, 가령 예를 들어 3차원의 벡터 공간에 있는 데이터 들을 2차원으로 옮기지만 그들간의 거리는 충분히 유지하면서 옮겨주는 방법이다. 보다 상세한 설명은 아래 슬라이드 참조.. http://sssslide.com/www.slideshare.net/ssuserb667a8/visualization-data-using-tsne tsne로 좌표 변환하는 python code는 아래와 같이 하면 된다. import.. 2016. 10. 19.
Docker Compose Docker Compose 개요 하나의 docker container에 하나의 서비스만을 돌린다면 아무 문제가 없지만, 만약에 여러개의 docker container를 이용해서 하나의 서비스를 운영하는 것이라면 이야기가 달라진다.매번 각각의 container를 실행시키는 것은 너무나도 귀찮은일 일 것이다. Docker compose는 docker의 여러 container를 운영하고 정의하기 위한 툴이며, compose 파일을 구성함으로써 이러한 서비스들을 사용할 수가 있다. compose는 기본적으로 3가지 스텝을 가지는데, 1. Dockerfile에 app 환경을 정의한다. ( app을 쉽게 재생산하기 위함)2. docker-compose.yml 내에 앱을 구성하기 위한 service를 정의한다.3. .. 2016. 10. 13.
Word2Vec porting python이나 spark 등에서 word2vec을 사용해보기만 했지.. 내가 실제로 소스를 들여다 볼 일은 없을거라고 생각했었는데.. 실제 소스를 까서 porting 작업을 진행해야 하는 우려 사항이 발생했다. 우선 word2vec에 대해 간략하게 설명을 하자면, 가장 단순하게 말해서 word를 vector로 바꿔서 표현해 주는 것이다. 아니 왜??? 그냥 word를 쓰면 안돼?? 실생활에서는 물론 그냥 word를 쓰는게 당연하다. 하지만 컴퓨터는 해당 word에 대한 의미를 전혀 알지 못하기 때문에, 컴퓨터에게 의미 있는 어떤 수치로 알려주기 위해서는 vector 표현으로 주는 게 바람직하다. 그런데 이게.. 아무 벡터나 막 만들어서 주는게 아니라, 비슷한 단어끼리는 비슷한 벡터가 될 수 있도록 학습.. 2016. 9. 30.
realm 적용하기 이 번 프로젝트부터 splite 대신 realm을 적용해 보기로 했다. 적용해서 사용해본 결과 너무 편함!! 일단 코드가 너무 간결해 졌다. 우선 realm을 적용하기 위해서는 아래와 같이 gradle 설정이 필요하다. 프로젝트의 gradle 파일에 아래의 정보를 추가한다. buildscript { repositories { jcenter() } dependencies { classpath 'io.realm:realm-gradle-plugin:1.1.1' }} app의 gradle 파일을 수정한다. apply plugin: 'realm-android' ...dependencies { .... compile 'io.realm:android-adapters:1.3.0' ....} proguard는 따로 설정.. 2016. 8. 7.
HASH TAG 사용하기 요새 SNS들을 보면 해시태그(#blurblurblur~)를 많이 사용하는 것을 볼 수가 있다. 나 역시 이번 앱에 해시태그를 적용해 보기로 한다. 우선 cliackablespan을 상속 받는 클래스를 선언한다. (각각의 hash tag마다 클릭을 가능하게 하기 위함) 해당 클래스에 listener를 달아서 클릭했을 시, 해당 listener로 클릭한 단어를 보내주도록 구현하였다. 그럼 이제 이 클래스를 이용해서 hash tag를 어떻게 쓰는지 살펴보자. 간략하게 함수 기능을 요약하자면, #문자를 가진 단어를 가져와서 해당 단어의 start와 end를 각각 저장한다.이렇게 저장된 tagStart와 tagEnd를 가지고 SpannableString 객체를 만든 후 그 결과 콘텐츠를 textView에 뿌려줌.. 2016. 6. 28.
retrofit 적용하기 기존의 개인 프로젝트였던 '싸다구'에서는 네트워크 통신을 위한 라이브러리를 volley를 사용해왔다. 하지만 이번 '스판다'는 기존 걸 그대로 copy 해서 쓰는 건 성격 상 맞지 않아서 많이들 쓰고 있는 retrofit을 적용해 보기로 했다. 우선 retrofit과 volley의 큰 차이를 두자면 retrofit은 restful api에 좀 더 초점을 둔 방식이라고 할까?retrofit에서는 해당 프로토콜과 그에 따르는 파라미터를 interface로 명시를 해줘야 하는 특징을 가지고 있다. 그럼 이제 retrofit을 한 번 적용해서 데이터를 가져와 보자. 아래와 같이 gradle에 라이브러리를 추가해 준다. retrofit에서는 수신된 JSON을 객체로 자동 변환해주는 GSON도 많이 쓰는데 이것도 .. 2016. 6. 27.