기본 콘텐츠로 건너뛰기

워드임베딩(Word Embedding)

단어를 임베딩 층의 입력으로 사용하기 위해서 입력 시퀀스의 각 단어들은 모두 정수 인코딩이 되어있어야 합니다. 워드임베딩 변환 과정 어떤 단어 → 단어에 부여된 고유한 정수값 → 임베딩 층 통과 → 밀집 벡터 임베딩 층은 입력 정수에 대해 밀집 벡터(dense vector)로 맵핑 하고 이 밀집 벡터는 인공 신경망의 학습 과정에서 가중치가 학습되는 것과 같은 방식으로 훈련 됩니다. 그리고 이 밀집 벡터를 임베딩 벡터 라고 부릅니다. 정수를 밀집 벡터 또는 임베딩 벡터로 맵핑하는 이유는 무엇일까요? 임베딩 테이블은 단어 집합의 크기만큼 행을 가지므로 모든 단어는 고유한 임베딩 벡터를 가집니다. 즉, 단어의 정수 인덱스는 임베딩 테이블에 대해서 Lookup을 수행하므로 고유한 임베딩 벡터를 결과 를 냅니다. 위의 그림에서는 임베딩 벡터의 차원이 4로 설정되어져 있습니다. 그리고 단어 great은 정수 인코딩 과정에서 1,918의 정수로 인코딩이 되었고 그에 따라 단어 집합의 크기만큼의 행을 가지는 테이블에서 인덱스 1,918번에 위치한 행을 단어 great의 임베딩 벡터로 사용합니다. 이 임베딩 벡터는 모델의 입력이 되고, 역전파 과정에서 단어 great의 임베딩 벡터값이 학습됩니다. 파이토치에서는 임베딩 벡터를 사용하는 방법이 크게 두 가지가 있습니다.  임베딩 층(embedding layer)을 만들어 훈련 데이터로부터 처음부터 임베딩 벡터를 학습하는 방법 사전에 훈련된 임베딩 벡터(pre-trained word embedding)들을 가져와 사용하는 방법 관련 소스는 다음 GIT에서 참고할 수 있습니다. Reference Source https://github.com/ynebula/NLP/blob/master/Word_Embedding/WordEmbedding.ipynb 감사합니다. Reference https://wikidocs.net/64779 https://wikidocs.net/64904
최근 글

[워드임베딩-Word Embedding]워드투벡터(Word2Vec)

분산 표현(Distributed Representation) 희소 표현(sparse representation) - 원-핫 벡터 표현 방법은 각 단어간 유사성을 표현할 수 없다는 단점이 있습니다. 이를 위한 대안으로 단어의 '의미'를 다차원 공간에 벡터화하는  분산 표현(distributed representation) 이 이용됩니다. 그리고 이렇게 분산 표현을 이용하여 단어의 유사도를 벡터화하는 작업은 워드 임베딩(embedding) 작업에 속하기 때문에 임베딩 벡터(embedding vector) 라고 하며, 저차원을 가지므로 바로 앞의 챕터에서 배운 밀집 벡터(dense vector) 에도 속합니다.  분산 표현(distributed representation) 방법은 기본적으로 '비슷한 위치에서 등장하는 단어들은 비슷한 의미를 가진다'라는 분포 가설(distributional hypothesis) 이라는 가정 하에 만들어진 표현 방법입니다. 강아지란 단어는 귀엽다, 예쁘다, 애교 등의 단어가 주로 함께 등장하는데 분포 가설에 따라서 저런 내용을 가진 텍스트를 벡터화한다면 저 단어들은 의미적으로 가까운 단어가 됩니다.  Example)  Sparse 표현 강아지 = [ 0 0 0 0 1 0 0 0 0 0 0 0 ... 중략 ... 0] Dense 표현  강아지 = [0.2 0.3 0.5 0.7 0.2 ... 중략 ... 0.2] 즉, 희소 표현은 고차원에 각 차원이 분리된 표현 방법이었다면, 분산 표현은 저차원에 단어의 의미를 여러 차원에다가 분산하여 표현합니다. 이런 표현 방법을 사용하면 단어 간 유사도를 계산할 수 있습니다. Word2Vec에는 CBOW(Continuous Bag of Words)와 Skip-Gram 두 가지 방식이 있습니다. CBOW(Continuous Bag of Words) CBOW는 주변에 있는 단어들을 가지고, 중간에 있는 단어들을 예측하는 방법입니다. 예문 : "The fat cat s

RuntimeError: expected device cuda:0 but got device cpu

[에러 원인] GPU에 CPU로 선언된 텐서가 올라갔을때 발생하는 에러입니다. 이는 GPU텐서와 CPU 텐서가 연산할 때 발생합니다. 즉 GPU에 로드한 텐서는 GPU에 load된 tensor끼리만 연산이 가능하다.  [해결법] 다음과 같이 b를 GPU 텐서로 선언합니다. 감사합니다.

소프트맥스 함수(Softmax Function)-크로스엔트로피(Cross Entropy)

소프트맥스 함수(Softmax Functioin) 소프트맥스 함수는 분류해야하는 카테고리(클래스)의 총 개수를 k라고 할 때, k차원의 벡터를 입력받아 각 클래스에 대한 확률을 추정 합니다. k차원의 벡터에서 i번째 원소를 zi, i번째 클래스가 정답일 확률을 pi로 나타낸다고 하였을 때 소프트맥스 함수는 pi를 다음과 같이 정의합니다.  분류하고자 하는 클래스가 k개일 때, k차원의 벡터를 입력받아서 모든 벡터 원소의 값을 0과 1사이의 값으로 값을 변경하여 다시 k차원의 벡터를 리턴합니다 소프트맥스 함수의 특징 총 합은 1 레이블 카테고리(클래스)의 수만큼 차원을 가지는 벡터 다중 클래스 분류(Multi-class Classification) 세 개 이상의 카테고리(클래스)에서 답을 고르는 문제를 다중 클래스 분류(Multi-class Classification)라고 합니다. 소프트맥스 회귀는 다중 클래스 분류(Multi-Class Classification)에 사용됩니다. 즉, 3개 이상의 카테고리에서 정답을 찾을때 사용합니다(이진 분류(Binary Classification)는 로지스틱 회귀를 이용). 예제) 붓꽃 품종 분류하기 문제 꽃받침 길이, 꽃받침 넓이, 꽃잎 길이, 꽃잎 넓이라는 4개의 특성(feature)로부터 setosa, versicolor, virginica라는 3개의 붓꽃 품종 중 어떤 품종인지를 예측하는 다중 클래스 분류 문제입니다.  p1(virginica일 확률),p2(setosa일 확률),p3(versicolor일 확률) 각각은 1번 클래스가 정답일 확률, 2번 클래스가 정답일 확률, 3번 클래스가 정답일 확률을 나타내며 각각 0과 1사이의 값으로 총 합은 1이 됩니다. 소프트맥스 함수  적용 식붓꽃 품종 분류 행렬로 표현하기 크로스 엔트로피(Cross Entropy) 함수  소프트맥스 회귀에서는 비용 함수로 크로스 엔트로피 함수를 사용 합니다. 크로스 엔트로피 식은 다음과 같습니다. yj: Label, yj는 원-핫 벡터의 j

[pip install]distutils.errors.DistutilsPlatformError: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": https://visualstudio.microsoft.com/downloads/

안녕하세요 이번 포스팅은 pip를 설치하면서 발생하는 에러를 해결하는 방법에 대해서 알아보겠습니다. 개발 환경 OS: Windows 10 python: Python 3.8.0 pip: pip 19.3.1 저는 아래 두 개 라이브러리를 설치하면서 위와 같은 에러가 발생했습니다. pip install tensor2tensor  pip install konlpy 참고로 첫 번째 라이브러리는 transformer 모델을 설치하는 명령어이고 두 번째는 형태소 분석을 위한 라이브러 입니다. [Error Message] ERROR: Command errored out with exit status 1: command: 'c:\users\ynebu\appdata\local\programs\python\python38\python.exe' -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\Public\\Documents\\ESTsoft\\CreatorTemp\\pip-install-b27rktjo\\gevent\\setup.py'"'"'; __file__='"'"'C:\\Users\\Public\\Documents\\ESTsoft\\CreatorTemp\\pip-install-b27rktjo\\gevent\\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"&#

RuntimeError: Only Tensors of floating point dtype can require gradients

단위 테스트 중 에러가 발생하여 내용을 정리합니다. [Source] a = torch.tensor([1, 2], requires_grad=True) [Error Message] RuntimeError Traceback (most recent call last) in ----> 1 a = torch.tensor([1, 2], requires_grad=True) RuntimeError: Only Tensors of floating point dtype can require gradients 에러 문구를 한국말로 번역하면 다음과 같습니다. RuntimeError: Only Tensors of floating point dtype can require gradients floating point dtype 텐서만 gradients가 필요합니다. 문제점은 gradient를 지원하는 텐서의 타입은 floating인데, 텐서를 선언할 때 값을 torch.int32인 1, 2로 대입한게 문제였습니다. 미분한 결과는 소수점으로 나오니 어찌보면 당연한 내용입니다.  [Resolve] 다음은 해결 방법입니다. tensor를 선언할 때 floating 타입으로 선언하면 해결 됩니다. 참고로 둘 중 하나만 floating 타입으로 설정해도 tensor는 floating 타입으로 만들어 집니다. 또는 dtype=torch.float32을 별도로 선언해도 됩니다. a = torch.tensor([1., 2], requires_grad=True) # 하나만 torch.floating으로 선어 a = torch.tensor([1, 2.], requires_grad=True) # 하나만 torch.floating으로 선어 a = torch.tensor([1., 2.], requires_grad=True) a = torch.tensor([1, 2], dtype=torch.float32, requires_grad=True) #

TypeError: 'module' object is not callable

json파일을 읽어 데이터를 파싱하는 프로그램을 작성하는 중 다음과 같은 에러가 발생하면서  module object를 호출할 수 없습니다. import os import json import tqdm with open( os.path.join("/files/predictions_.json"), "r", encoding="utf-8" ) as reader: input_data = json.load(reader) for entry in tqdm(input_data): print(entry, input_data[entry]) [Error Message] TypeError: 'module' object is not callable [Resolve] tqdm import 하는 부분의 문제였습니다. tqdm 클래스의 파일명은 tqdm이므로 패키지 명을 from으로 선언해야 합니다. tqdm을 import 하기 위해서는 다음과 같이 선언해야 합니다. from tqdm import tqdm 감사합니다.