앞장에서 word2vec의 구조를 배우고 CBOW모델을 구현했다. 하지만 말뭉치에 포함된 어휘 수가 많아지면 계산량도 커져, CBOW모델을 계산 시간이 너무 오래 걸린다는 단점이 있다. 그래서 이번 장의 목표는 word2vec의 속도 개선으로, 단순한 word2vec에 아래 두 가지 개선사항을 추가할 것이다. 1) Embedding이라는 새로운 계층 도입 2) 네거티브 샘플링이라는 새로운 손실 함수 도입 앞 장의 CBOW모델은 단어 2개를 맥락으로, 하나의 단어(타깃)를 추측한다. 이 때 입력 측 가중치(Win)와의 행렬 곱으로 은닉층이 계산되고, 다시 출력 측 가중치(Wout)와의 행렬 곱으로 각 단어의 점수를 구한다. 그리고 이 점수에 소프트맥스 함수를 적용해 각 단어의 출현 확률을 얻고, 이 확률을..
Data Science 검색 결과
앞 장에서는 '통계 기반 기법'으로 단어의 분산 표현을 얻었는데, 이번 chapter 3에서는 더 강력한 기법인 '추론 기반 기법'을 살펴보자. 추론 과정에 신경망을 이용하는데, 여기서 그 유명한 word2vec가 등장한다. 3.1 추론 기반 기법과 신경망 단어를 벡터로 표현하는 방법은 크게 '통계 기반 기법'과 '추론 기반 기법'이다. 두 기법 모두 분포 가설이 배경이고, 이번 절에서는 추론 기반 기법의 이점을 설명한다. 그 다음 word2vec 전처리를 위해 신경망으로 '단어'를 처리하는 예를 보자. 3.1.1 통계 기반 기법의 문제점 통계 기반 기법은 주변 단어의 빈도를 기초로 단어를 표현했다. 구체적으로는 단어의 동시발생 행렬을 만들고, 행렬에 SVD를 적용하여 밀집벡터(단어의 분산 표현)를 얻었..
2.1 자연어처리란 한국어와 영어 등 평소에 쓰는 말을 자연어(natural language)라고 한다. 자연어 처리(natural language processing)를 문자 그대로 해석하면 '자연어를 처리하는 분야'이고, 쉽게 말해 '우리의 말을 컴퓨터에게 이해시키는 기술이자 분야'이다. 우리의 말은 일상생활에서도 느끼지만, 의미나 형태가 유연하게 바뀔수도 있고 때론 같은 의미의 문장도 여러 형태로 표현되며 세월이 흐르면서 새로운 말이나 새로운 의미가 생겨나거나 사라질 수 있다. 이렇게 언어라는 것이 모호하고 중의적이기 때문에 컴퓨터에게 자연어를 이해시킨다는 것은 매우 어려운 일이기 때문에, 이러한 일들을 할 수 있다면 수많은 사람에게 도움을 줄 수 있다. 2.1.1 단어의 의미 우리의 말은 '문자'..
조건에 맞는 데이터 선택하기(boolean indexing) x % 2 == 0을 사용해 데이터들을 boolean형태로 바꿔준다. even_mask라는 변수에 조건 대입 원래있던 변수인 x에 대괄호를 사용해 x[even_mask]를 사용하면 해당 조건에 True인 값들만 다시 ndarray 형태로 나타내준다. 변수를 생략하고 x[조건]을 사용해도 바로 나타낼 수 있다. 다중조건 사용해서 데이터 선택하기 앞서는 단일조건에 해당한 이야기이다. 다중조건을 사용할 경우가 많은데, numpy에서는 and, or, not같은 논리 연산자 사용이 불가능하다. 그래서 and - & , or - |(엔터키 위에 원화 shift)로 대체하여 사용할 수 있다. 마찬가지로 조건을 가로로 묶고(중요), 연산 기호를 사용하여 다..
기본 사칙연산하기(더하기, 빼기, 곱하기, 나누기) 기본적으로 numpy의 연산은 python에서 연산과 비슷한 개념을 갖고 있다. 단 주의해야할 점은 행렬의 갯수가 같아야 한다. m x n 의 데이터 형태면 연산할 데이터의 형태가 모두 같아야 한다. (broadcasting을 활용해 예외도 나올 수 있다. broadcasting은 다음에 알아보도록 하자) - np.add(x, y) -> 더하기 연산 : 이와 같은 내장함수 형태로 계산을 가능하고, x + y와 같이 연산해도 같은 값이 나온다. - np.substract(x, y) = x - y -> 빼기 연산 - np.multiply(x, y) = x * y -> 곱하기 연산 - np.divide(x, y) = x / y -> 나누기 연산 통계함수 활용..
원하는 데이터 값(들) 가져오기 인덱싱(원하는 요소 추출, 차원축소의 기능) 1차원 데이터에서 값 가져오기 numpy에서 인덱싱은 파이썬 리스트의 인덱싱과 비슷한 원리이다. [ ]를 사용하여 값을 추출해온고, 항상 첫 번째 값은 0부터 시작이다. - 변수명[n] -> n+1번째 값을 가져온다. - 변수명[-1] -> 마지막 값을 가져온다. - 변수명[n] = 값 -> 원하는 위치에 값을 저장하여 데이터를 바꿀 수도 있다. 2차원 데이터에서 값 가져오기 2차원 데이터는 행과 열이 있느 데이터이다. (수학에서 x, y 좌표평면과 비슷한 개념이고 선형대수의 행렬이랑 같은 개념이다) - 변수명[m, n] -> m+1번째 행, n+1번째 열을 가져온다. (마찬가지로 0부터 시작이여서 그렇다) - 변수명[m] ->..
최근댓글