본문 바로가기

분류 전체보기

(12)
React - 시작! 드디어 6학기가 끝났다 os가 너무 배우기 싫었지만 하다 보니 재밌기도 하고 컴퓨터 동작에 대해서 깊이 있게 알게 되었던 것 같다. 드디어 빨리 배우고 싶었던 리액트! 그리고 방학에 해야할 프로젝트도 리액트로 만들기로 하기도 했고! 아무튼 이제 리액트의 세계로 들어가려고 한다 리액트를 시작하기 전에 먼저 브라우저란 무엇인지 그리고 chrome 브라우저와 nodejs에서 쓰이는 자바스크립트 엔진 V8에 대해서 공부 해야겠다. (이번에 배운 os 지식이 도움이 될까...?) 브라우저 브라우저는 사용자가 요청한 자원을 서버에 요청하고 브라우저에 렌더링해주는 응용프로그램이다. 응용프로그램이므로 사용자의 머신의 os위에서 수행된다. 사용자가 브라우저를 통해서 요청하는 자원은 주로 html, css, js로 웹페이..
자연어처리(5) - Word2Vec 들어가기전에 다시 처음으로 돌아가서 우리는 문서를 분석할때 가장 먼저 하는 일은 토큰화해서 쪼개는 일이였다. 쪼개고 나면 우리는 단어 사전을 가지게 된다. 우리는 그 단어 사전에 있는 단어들을 컴퓨터가 특정 연산을 할 수 있도록 뭔가 수치화해야한다. one-hot-encoding이라는 방법이 있었는데 one-hot-encoding은 단어사전에서 특정 단어의 인덱스를 통해서 벡터로 표현만 해줄 뿐이지 각 단어들간의 관계( 유사도 등)는 전혀 담을 수가 없다. ( 총 5개 단어들을 가지는 단어사전에서 3번째 단어를 [ 0 0 1 0 0 ] 로 인코딩 하는 방식 ) 위와 같은 단순한 인코딩으로는 단어의 의미를 녹여내는 것에 문제가 있고 sparse 하기 때문에 메모리의 낭비가 심하므로 embedding이 필요..
자연어처리 스터디기록(3)-딥러닝 정리 개인적으로 공부한 것을 정리한 내용이므로 틀린 곳이 있을 수 있습니다 자연어처리 모델들을 본격적으로 보려고 하기 시작하니까 필연적으로 머신러닝/딥러닝에 대한 이야기들이 나오기 시작했다. 웹개발에 집중하다보니 전에 공부했던 딥러닝 내용들을 많이 잊어버렸는데 다시 떠올려봐야겠다. 문제해결 패러다임의 변화!! 기존에는 "문제해결"이라고 하면 알고리즘을 많이 떠올렸다. 알고리즘이란 어떠한 문제를 해결하는 정확한 일련의 방법들이다. 이렇게 알고리즘이라고 정의할 수 있으려면 몇가지 필요조건들이 있다. 1. 입력 2. 출력 3. 명확성 4. 유한성 5. 실현가능성 위의 조건들을 통해 다시 정리하자면 알고리즘은 입력과 출력을 만들기 위해 유한번 실행되는 명확하고 실현가능한 명령들의 나열이라고 정의할 수 있을 것이다. ..
Spring +STOMP+SOCKJS 채팅 구현(STOMP 작동방식) STOMP stomp는 http에 모델링된 frame 기반의 단순한 메세징 프로토콜이다. frame기반이라고 했는데 frame의 구조는 다음과 같다 COMMAND header1 : value1 header2 : value2 Body^@ STOMP - client 클라이언트는 메세지를 보내기 위해 SEND 명령을 사용하거나 수신 메세지에 관심을 표현하기 위해 SUBSCRIBE 명령을 사용할 수 있다. SEND, SUBSCRIBE 같은 명령을 사용하려면 destination 이라는 헤더를 필요로 하는데 destination 헤더는 어디에 메세지를 전송할지 그리고 어디에서 메세지를 구독할지를 알려주는 헤더이다. 위의 로그는 필자가 직접 채팅을 구현했을때 콘솔에 로그를 찍어본건데 실제로 클라이언트가 SUBSCR..
자연어처리 스터디(4)- neural language model NPLM(Neural Probabilistic Language Model) 앞서 "단어가 어떤 순서로 쓰였는가"의 철학으로 만든 모델 n-gram 모델의 문제점은 바로 n을 크게 하면 할 수록 많은 단어들의 history를 확인해야 하는데 만약 예측단계에서 들어온 단어가 history에 등장하지 않은 단어라면 굉장히 자연스러운 문장이 자연스러울 확률이 0이 나오는 대참사가 일어나게 되는 문제점이였다. 정리하면 학습 데이터에 존재하지 않는 n-gram이 포함된 문장이 나타날 확률을 0으로 매긴다 n을 5이상으로 설정하기 어렵기 때문에 문장의 장기 의존성을 포착해내기 어렵다. 단어/문장 간 유사도는 고려조차 하지 않는다. neural net을 쓰기 이전에는 smoothing( 작은 상수를 더해서 0이 안나오..
Docker 개념 배경 물리적인 서버 컴퓨터 하나의 공간을 할당하거나 여러개의 서버들의 Orchestration을 위해 컨테이너 개념으로 서버의 의존성/포트 설정/어플리케이션 등등의 모든 환경을 컨테이너 안에 담아서 이삿짐 옮기듯이 하나의 서버 공간의 분리,서버의 증설, 클라우드 서버 이용 등등의 경우에 도커 컨테이너를 사용할 수 있다 예를 들어 git,tomcat,nodejs,mysql 등등을 다운 받아놓은 환경을 다른 컴퓨터에서 사용하고 싶다면 도커 이미지/컨테이너를 이용하면 정말 간편하게 그 환경을 그대로 불러와서 사용할 수 있다. 제한 Linux Base 64 bit OS only 즉 도커를 window os에서 사용하려면 virtual box등을 이용해서 리눅스 환경위에서 실행 해야한다 앞으로 사용할 도커 용어들..
자연어처리 스터디 기록(2)-임베딩의 의미 벡터가 어떻게 의미를 가지는가 컴퓨터가 자연어를 처리하는 과정의 본질은 결국은 계산일뿐이다. 다만 여기서 계산이란 자연어를 임베딩한 벡터를 이용한 계산을 의미한다. 그렇다면 자연어의 의미를 어떻게 임베딩에 함축시킬 수 있을까 자연어의 통계적 정보를 임베딩에 넣는 방법이 있다. 이때 통계정보는 크게 3가지가 있다. 백오브워즈/언어모델/분포 가정 백오브워즈 가정 언어 모델 분포 가정 내용 어떤 단어가 많이 쓰였는가 단어가 어떤 순서로 쓰였는가 어떤 단어가 같이 쓰였는가 대표 통계량 TF-IDF - PMI 대표 모델 Deep Averaging Network ELMo, GPT Word2Vec 백오브워즈(bag of words) 가정 "bag"은 집합을 의미한다. 집합이기때문에 원소의 순서는 당연히 고려되지 않는..
자연어처리 스터디 기록(1)-임베딩 임베딩이란 자연어처리 분야에서 임베딩이란 사람이 쓰는 자연어를 기계가 이해할 수 있는 숫자의 나열인 벡터로 바꾼 결과 혹은 그 과정 전체를 의미한다. 단어나 문장을 각각 벡터로 변환해서 벡터공간으로 끼워 넣는다. 이 "끼워넣는다"라는 의미에서 임베딩이라는 이름이 붙었다. 임베딩의 예시로는 단어의 빈도를 벡터로 사용한 경우이다. 아래 표는 특히 단어-문서 행렬[Term-Document-Matrix] 이라고 한다 메밀꽃 필 무렵 운수 좋은 날 사랑 손님과 어머니 삼포 가는 길 기차 0 1 9 8 막걸리 1 2 3 5 선술집 2 8 0 3 위의 표에서 [운수 좋은 날]의 임베딩은 [ 1, 2, 8 ] 이다. [막걸리]라는 단어의 임베딩은 [ 1, 2 , 3, 5] 이다 임베딩의 역할 임베딩은 단어/문장간 관련..