목록전체 글 (89)
코딩세상
- fastText 앞서 설명한 word2vec의 사진으로 이미지에 있는 단어들을 바탕으로 "엘리스는" 이라는 단어를 추론할 수 있지만, 제시된 문장처럼 새로운 문장을 넣을 시 학습 데이터 내 존재하지 않았던 단어 백터는 생성할 수 없습니다. 이를 미등록 단어문제, out-of-vocabulary라고 합니다. 그렇다면 위 문제를 어떻게 해결할 수 있을까요? 앞에서 모델을 학습 시킬 때 단어 단위로 단어 임베딩 벡터를 학습시키는 것이 아닌 각 단어를 문자 단위로 나누어서 단어 임베딩 벡터를 학습시켜서 문제를 해결할 수 있습니다. 위에서 설명한 것 처럼 단어를 문자 단위로 나누어 단어 임베딩 벡터를 학습시키게 될 경우 위 사진처럼 학습 데이터에 존재하지 않았던 단어의 임베딩 벡터 또한 생성이 가능해지게 됩니..
앞서 우리는 단어들이 인공지능에서 학습되기 위해 변환시키는 방법인 임베딩에 대해 배웠습니다. 그렇다면 이렇게 임베딩 된 단어는 어떻게 인공지능에서 학습되게 될까요? 이번 내용에서는 그것에 대해 알아보겠습니다. - word2vec 위 그림은 신경망(Neural Network)을 통해 단어 임베딩 벡터를 학습하고 문장에서 빈칸으로 뚫려있는 단어를 신경망이 추론하여 완성시켜주는 과정을 그림으로 나타낸 것입니다. 이미지 분류에서 각각의 은닉층이 가중치를 학습하고 해당 가중치를 바탕으로 결과값을 도출 해냈던 것처럼 wrod2vec 역시 각 단어의 벡터가 해당 단어가 입력으로 주어졌을 때 계산되는 은닉층의 값을 사용합니다. 그렇다면 직접 코드를 통해 어떻게 단어들이 임베딩되고 앞서 배웠던 내용들을 적용시킬 수 있는..
- 컴퓨터 - 언어 컴퓨터는 텍스트를 포함하여 모든 데이터를 0과 1로 처리합니다. 앞서 우리가 이미지 분류에 대해서 배울 때 이미지를 1차원으로 변형하여 이 때의 결과가 여러 라벨 중 가장 가중치가 높은 라벨의 결과값으로 나왔던 것처럼 자연어의 기본 단위인 단어 역시 수치형 데이터로 표현하는 것이 중요합니다. - 단어 임베딩 그래서 위 그림처럼 단어들을 연속형 벡터로 표현하는 방법을 단어 임베딩이라고 합니다. 위 두개의 문장을 비교할 때 도시와 주인의 이름, 동물의 종류가 다르지만 문맥은 어느정도 비슷하다는 것을 알 수 있습니다. 이럴 경우 각각의 단어들은 유사한 의미를 지니게 됩니다. ' 위 그림처럼 각각의 단어들을 임베딩하여 벡터로 나타내고 이를 좌표로 표현할 때 서로 비슷한 문맥을 가진 단어들끼리..
- 모델링을 위한 데이터 탐색 및 전처리 앞서 기본적인 머신러닝 및 딥러닝 모델 학습 과정을 진행할 때 구현하고자 하는 목표에 맞게 데이터를 탐색하고 해당 데이터 내의 이상치를 제거하고, 올바르게 학습 할 수 있도록 정규화를 진행하는 등 기본적인 데이터의 준비 과정이 있었습니다. 그렇다면 자연어 처리에서는 어떻게 데이터를 준비하고 가공해야할까요? 자연어 처리에서는 텍스트가 곧 데이터 이므로 모델에 맞는 텍스트 데이터를 탐색하고 데이터 내의 필요없는 단어들(특수기호, 단어 정규화(이, 그, 저, 어느 와 같은 조사 제거) 등 앞서 보았던 데이터 전처리와 비슷한 맥락으로 진행되게 됩니다. - Tokenization 텍스트를 전처리 하는 과정 중 우리는 각 텍스트를 단어 별로 나누는 토큰화(tokenizati..
- 자연어 처리란? 자연어 처리(Natural Language Processing, NLP)는 컴퓨터를 통해 인간의 언어를 분석 및 처리하는 인공지능의 한 분야입니다. - 자연어 처리의 적용 사례 자연어 처리는 문서를 분류한다던지, 문서 내에서 원하는 키워드를 추출하거나, 감정을 분석하는 등 여러 분야에서 사용되고 있습니다. - 자연어 처리 + 딥러닝 그렇다면 우리는 자연어를 처리하기 위해 딥러닝을 어떻게 사용할 수 있을까요? 시간이 지날수록 자연어 처리에서 학습 가능한 데이터의 양은 기하급수적으로 증가하고 있습니다. 이전에는 하드웨어적 요소가 많이 발달하지 못해 연산 처리 속도의 한계가 있었지만 최근에는 연산 처리 속도의 발전으로 인해 자연어 처리 또한 더욱 복잡한 머신러닝 알고리즘을 적용할 수 있게 ..
- LeNet(1990) LeNet는 이미지 분류용 CNN 중에 조상격으로 CNN초기에 CNN의 기본 구조를 잘 하였습니다. LeNet은 CNN을 처음으로 개발한 얀 르쿤(Yann Lecun) 연구팀이 1998년에 개발한 CNN 알고리즘의 이름이다. 우편번호를 인식하기 위해 개발한 모델이며, LeNet-5 버전까지 개발되었습니다. - AlexNet(2012) LeNet 개발 이후 CNN 분야에서 획기적인 모델이 나오지 않다가 2012년 ImageNet Challenge에 등장한 AlexNet이 기존 모델의 성능을 큰 폭으로 상회하며, CNN을 한번 더 발전 시키는 계기가 되었습니다. 이 때 처음으로 CNN 모델에 ReLU 활성화 함수를 적용하였고 딥러닝 모델 학습에 GPU를 활용하였습니다. 이후로 사실상..
문제 설명 두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요. 제한사항 1 ≤ left ≤ right ≤ 1,000 입출력 예leftrightresult 13 17 43 24 27 52 입출력 예 설명 입출력 예 #1 다음 표는 13부터 17까지의 수들의 약수를 모두 나타낸 것입니다. 수 약수 약수의 개수 13 1, 13 2 14 1, 2, 7, 14 4 15 1, 3, 5, 15 4 16 1, 2, 4, 8, 16 5 17 1, 17 2 따라서, 13 + 14 + 15 - 16 + 17 = 43을 return 해야 합니다. ..
문제 설명 단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다. 재한사항 s는 길이가 1 이상, 100이하인 스트링입니다. 입출력 예 s return "abcde" "c" "qwer" "we" import math def solution(s): answer = '' if len(s)%2 == 1: answer = s[ math.floor(len(s)/2)] else: num = len(s)//2 answer = s[num-1:num+1] return answer [코드 설명] 이번 문제는 문자열의 가운데 글자를 가져오는 문제로써, 문자열이 홀수 일 때는 중앙의 글자 하나를 가져오고 짝수일 경우에는 가운데 두 글자를 가져와야합니..
- Convolutaional Layer 앞서 지금까지 사용한 커널들은 학습이 가능한 커널이었습니다. 즉, 커널 행렬의 각 값들이 퍼셉트론에서 배웠던 가중치(Weight)가 되게 됩니다. 이러한 커널들로 이루어진 Layer를 Convolutional Layer라고 부릅니다. -> CNN 모델은 이러한 Layer 들이 쌓여서 구성됩니다. - Layer 역할 CNN 모델은 이미지가 가지는 특정 Feature를 뽑아내도록 커널을 학습시킵니다. 앞서 배웠던 것처럼 커널의 모양에 따라 처리되는 이미지가 달랐던 것처럼 커널에 따라 추출하는 Feature를 다르게 학습시켜 이미지의 여러가지 정보를 뽑아낼 수 있게 합니다. 여기서 Feature는 이미지 내의 대각선, 원형, 색조 등등이 해당됩니다. - Stride 이..
문제 설명 array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요. divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요. 제한사항 arr은 자연수를 담은 배열입니다. 정수 i, j에 대해 i ≠ j 이면 arr[i] ≠ arr[j] 입니다. divisor는 자연수입니다. array는 길이 1 이상인 배열입니다. 입출력 예 arr divisor return [5, 9, 7, 10] 5 [5, 10] [2, 36, 1, 3] 1 [1, 2, 3, 36] [3,2,6] 10 [-1] 입출력 예 설명 입출력 예#1 arr의 원소 중 5로 나누어 떨어지는 원소는 5와 10입니다. 따라..