반응형

 

배울 점이 많은 강의가 있어서 추천드리며, 시리즈로 글을 쓰고자 합니다.

 

비정형 데이터 분석 5/11 Feature Extraction t-SNE

 

https://youtu.be/JXeViICwR6A

 

 

키워드 및 핵심 내용

 

Feature extraction 2가지 방법

- LSA

- t-SNE

 

t-SNE

- SNE (Stochastic Neighbor Embedding)

고차원의 데이터를 저차원으로 변환할 때 개체 간의 거리를 확률적으로 정하기

 

- Symmetric SNE

어떤 개체를 기준으로 할지에 따라 거리가 달라짐 -> 양쪽의 평균

 

- Crowding problem & t-SNE

normal distribution -> t-distribution -> 꼬리가 두꺼워짐 -> 웬만히 가까운 점들 이외는 멀리 배치

Crowding problem : 저차원으로 변환할 때 완벽하게 거리 보전은 불가능하다고 보고 오차를 줄이는 방향으로 학습

알고리즘

1. 개체를 임베딩 공간에 랜덤 배치

2. 각 개체에 대해 원래 공간에서의 거리가 가까우면 끌어당기고 멀면 민다

3. 모든 개체에 대해 반복하면 끝

 


[t-SNE 추가자료]

https://bcho.tistory.com/1210

 

PCA 기반 차원 감소의 문제점

PCA의 경우 선형 분석 방식으로 값을 사상하기 때문에 차원이 감소되면서 군집화되어 있는 데이터들이 뭉개져서 제대로 구별할 수 없는 문제를 가지고 있다.

 

 

출처  https://www.youtube.com/watch?v=NEaUSP4YerM

이 그림은 2차원에서 1차원으로 PCA 분석을 이용하여 차원을 줄인 예인데, 2차원에서는 파란색과 붉은색이 구별이 되는데, 1차원으로 줄면서 1차원 상의 위치가 유사한 바람에, 두 군집의 변별력이 없어져 버렸다.

 

t-SNE

 

이런 문제를 해결하기 위한 차원 감소 방법으로는 t-SNE (티스니라고 읽음) 방식이 있는데, 대략적인 원리는 다음과 같다.

먼저 점을 하나 선택한다. 아래는 검은색 점을 선택했는데, 이 점에서부터 다른 점까지의 거리를 측정한다.

 

다음 T 분포 그래프를 이용하여, 검정 점(기준점) 을 T 분포 상의 가운데 위치한다면, 기준점으로부터 상대점까지 거리에 있는 T 분포의 값을 선택(위의 T 분포 그래프에서 파란 점에서 위로 점성이 올라가서 T 분포 그래프상에 붉은색으로 X 표가 되어 있는 값) 하여, 이 값을 친밀도 (Similarity)로 하고, 이 친밀도가 가까운 값끼리 묶는다.

 

이 경우 PCA처럼 군집이 중복되지 않는 장점은 있지만, 매번 계산할 때마다 축의 위치가 바뀌어서, 다른 모양으로 나타난다.

단 데이터의 군집성과 같은 특성들은 유지되기 때문에 시각화를 통한 데이터 분석에는 유용하지만, 매번 값이 바뀌는 특성으로 인하여, 머신러닝 모델의 학습 피처로 사용하기는 다소 어려운 점이 있다.

 

출처: https://bcho.tistory.com/1210?category=555440 [조대협의 블로그]

 


[이은아님 강의 모음]

https://www.youtube.com/playlist?list=PLGAnpwASolI0vViZItiP90nWI_s9m91Av

 

이은아님 머신러닝 자연어처리 - YouTube

 

www.youtube.com

 


 

 

 

반응형
반응형

 

배울 점이 많은 강의가 있어서 추천드리며, 시리즈로 글을 쓰고자 합니다.

 

비정형 데이터 분석 4/11 Feature Selection

 

https://youtu.be/Zd9WYBZZso8

 

 

키워드 및 핵심 내용

 

차원축소(Dimensionality Reduction)

- Feature Selection

- Feature Extraction

 

Feature Selection

- Feature를 가공 없이 선택해서 사용

 

Feature Selection 지표

 

F1 (데이터의 밸런스가 맞지 않을 때 즉 각 class 비중이 차이가 날 경우 사용)

- Recall = TP / (TP + FN) : 긍정문서 중 해당 Term 등장 횟수

- Precision = TP / (TP + FP) : 해당 Term 이 나타난 문서 중 긍정문서의 개수

- Harmonic Mean(조화평균) : 큰 값에 페널티 -> 작은 값의 비중 높임

- F1 Score = 2 x ( Precsion x Recall ) / ( Precision + Recall )

- F1 단점 : 긍정문서를 잘 판독하는 단어에 높은 점수, 상대적으로 부정문서를 판독하는 단어에 낮은 점수

 

IG (Information Gain)

- 분류기에 의해서 얼마나 정보가 발생했는지로 판단

- Entropy(무질서의 정도) -> 정보 -> Entropy 낮아짐

- 단어(feature)의 등장에 의해 전후 Entropy의 차이가 클수록 그 단어(feature)에 높은 점수

 

X2 (Chi(카이)-squared Statistic)

- 해당 단어의 출현 여부와 긍정, 부정 분류가 통계적으로 완전히 독립적이라면 기댓값을 구할 수 있다는 아이디어

- X^2으로 나온 결괏값이 크다는 것은 우리가 가정한 독립성의 가정에 적합하다는 것을 의미한다.

 

BNS (Bi-Normal Separation)

- 잘 안 쓰임

 

PR, OddR, OddN / Acc, AccR / DF

 


[Feature Selection 추가 자료]

 

https://blog.naver.com/jamiet1/221419434072

 

1. Feature Selection vs Feature extraction

둘 다 차원 감소를 하는 방법이다.

- Feature selection : 변환 없이 원래 있는 d개 feature 중 m개만 뽑아 쓰겠다는 것

- Feature extraction : d개 feature를 m 차원 공간 벡터로 변환시키는 것

 

2. Feature Subset Selection(#FSS)

정확도가 높은 목적함수 J(Y)를 찾는 것

 

 

왜 feature extraction 안 하고 FSS를 할까?

1) feature를 획득하기 어렵거나 비싼 경우

test 해야 하는 feature는 너무 많은데 final 선택은 한 개... 막 이런 경우

2) 내 classifier에서 의미 있는 rule을 추출하고 싶은 경우

project 할 때, feature들이 사라질 가능성도 있으니까

3) feature가 숫자가 아니라 test나 모양일 경우

 

feature를 줄이면

1) 일반화 성능이 올라간다.

2) 복잡도와 실행시간이 줄어든다.

 

3. Search strategy and objective function

feature를 어떻게 선택해볼까?

목적함수는 뽑아낸 것이 용도에 맞게 잘 뽑아냈는지를 판단해야 한다.

 

 

1) Filter : feature, 클래스 간 정보를 이용한다

- 클래스 간 거리... (유클라드, 멘하탄)

- separability... (LDA 고윳값)

- 상관관계... 상관관계의 여부를 따져본다

- 정보이론

 

1-1) 선형 관계 : correlation coefficient를 이용한다

 

 

Pic : feature i와 클래스 label 간의 correlation coefficient

Pij : feature i, j 간 correlation coefficient

 

1-2) 비선형 관계 : 상호 정보량 I를 사용한다.

상관관계는 선형에서만 가능하니까.

 

 

I(Ym, C) : feature 벡터와 클래스 label 간 상호 정보량으로 클래스 불확실성의 양.

H(.) : 엔트로피 함수

 

상호 정보량이 0 이면 독립이니까 변별 불가능하다.

상호정보량이 큰 걸 선택한다.

 

 

가중치를 넣어서 빼준다.

 

장점 1 : 계산이 빠르다. 데이터셋에 대한 반복 계산 없다. training 빠름.

장점 2 : 일반화. 데이터의 고유 형태를 평가하기 때문에 어떤 형태의 분류기가 와도 좋은 성능을 가진다.

단점 : large subset을 고르는 경향이 있다. 목적 함수 자체가 단조로워서... 모든 feature를 선택해버리기도 한다. user가 선택할 feature의 수를 직접 골라줘야 함.

 

2) Wrapper : classifier를 사용한다.

cross-validation이나 resampling 같은 것

매번 인식기 모델을 훈련 후 cross-validation 해준다.

 

장점 1 : 정확도.

장점 2 : 일반화 능력. 오버 피팅을 피하는 메커니즘을 통해 상승!

단점 1 : 느린 실행 속도. subset마다 classifier training

단점 2 : 부족한 일반화. classifier의 평가 함수에 달려있다.

즉, 목적함수에서 선택한 분류기의 성능에 따라 일반화 정도가 갈린다.

 

[출처][패턴인식] sequential feature selection|작성자Karen

 


[허민석님 강의] 다중 분류 모델 성능 측정 (accuracy, f1 score, precision, recall on multiclass classification)

https://youtu.be/8DbC39cvvis

 


[IG, X2 추가 자료]

http://freesearch.pe.kr/archives/1324

 

Feature Selection - from __future__ import dream

Machine Learning을 하기 전에 수가지의 후보 Feature 셋중에 쓸만한 것들을 골라내는 작업을 한다. 이 작업이 필요한 이유는 쓸데없는 noise feature를 추가할 경우 실험셋에서만 적합한 classifier가 나올 ��

freesearch.pe.kr

확률적인 단점 때문에 chi-square 방법이 feature 셋을 작게 선정했을 때 성능이 좋지 않다고 한다.

예를 들어 spam class에 erlang이 한번 나왔다고 그것을 스팸 확률을 100으로 주는 건 문제가 있는 것과 비슷하다.

 

저런 저빈도 고확률의 feature들이 다 선택이 되고 난 다음에 선택되는 고빈도 중확률 feature들과의 조화로 인해 feature 셋이 추가될수록 성능은 나아진다고 한다.

물론 위의 단점을 보완하기 위한 Roinson의 희소 확률 보정식 같은 게 있긴 하지만 이런 카이제곱 방법의 단점은 알아두는 게 좋을 거 같다.

 

Mutual Information 방법은 feature 선정 초반에 정확도가 높아지다가 셋이 추가될수록 점점 하강하는 곡선을 탄다.

따라서 feature 셋의 크기가 작게 선정이 되어야 되는 경우라는 Mutual Information 방법이 더 나을 거란 생각을 해본다.


[이은아님 강의 모음]

https://www.youtube.com/playlist?list=PLGAnpwASolI0vViZItiP90nWI_s9m91Av



 

 

반응형
반응형

- 글자를 컴퓨터로 처리하기 위해서는 숫자로 변환해야 한다. 인코딩

- 각자 의미를 가지는 단어들을 그 의미가 사라지지 않도록 적절한 (차원)공간을 찾고 그 공간에 단어를 배치하는 것이 임베딩

- (차원)공간에 배치되면 그 위치 정보가 벡터

- 적절한 (차원)공간을 찾았다면 인접(의미가 비슷), 벡터 연산([왕] - [남자] + [왕비] = [여자]) 등 의미를 가지게 됨


[출처] https://blog.naver.com/2feelus/221985553891

인공신경망(딥러닝)의 Embedding 이란 무엇일까? (1/3) | 작성자 IDEO

Deep Learning에서 자주 등장하는 Embedding에 대해서 알아보도록 하겠습니다. (원글이 존재합니다)

Embedding을 위키피디아에서 찾아보면 다음과 같이 정의 되어있습니다.

'수학에서 embedding(혹은 imbedding)이란 하나의 사례안에 포함된 수학적 구조의 한 예로,

모집단의 성격을 보존하면서도 모집단과는 다른 형태의 소집단으로 매핑(mappig) 되는 것' 이라고 볼수 있습니다.

만약에 부모집단의 형태나 성격을 잘 보존할수 있는 소집단이 만들어 질수 있다면, 공간과 계산량이 적어져서 효율적인 계산이 이루어지는 효과를 얻을수 있을 것입니다.

인공 신경망에서의 Embedding은 어떤 의미를 가질까요?

인공신경망은 최근 몇년간 이미지 분석부터 자연어 처리및 시계열 예측까지 그 활용범위가 크게 확장되어왔습니다.

이중 큰 성공사례중 하나가 바로 embedding이라고 할수 있는데요, 그것은 바로 이름 성별 지역등의 분리된 이산변수(discrete variable)가 연속적인 벡터로 표현될수 있도록 했다는 점입니다. deep learning이 embedding기법이 만들어지면서 자연어 번역이나 범주(category)형 변수에 vector화가 가능하게 된것이죠.

이 글에서는 인공신경망의 임베딩에 대해서 설명하고, 왜 우리가 그것들을 사용하고 싶은지 어떻게 학습될수 있는지를 배워보려고 합니다.

위키피디아의 모든 책들을 Vector화 할수 있을까?

이글에서는 책 추천 시스템을 만들기 위해서, 위키피디아상의 모든 책들을 벡터로 만들어 볼겁니다. 이 시도를 통해서 어떻게 Embedding이 되는지 볼거에요.

Embeddings

임베딩은 이산된(범주형의)값을 연속적인 숫자로 구성된 벡터로 만드는것으로 볼 수 있습니다.

특히 인공신경망에서는 임베딩은 원래 차원보다 저차원의 벡터로 만드는 것을 의미하는데요, 원래 차원은 매우많은 범주형 변수들로 구성되어있고 이것들이 학습방식을 통해 저차원으로 대응되게 됩니다. (인근에 모여있는 것들끼리 그룹화)

인공신경망의 임베딩은 수천 수만개의 고차원 변수들을 몇백개의 저차원 변수로 만들어 주고, 또한 변형된 저차원 공간에서도 충분히 카테고리형 의미를 내재하기 때문에 유용합니다. (차원축소)

인공 신경망의 임베딩은 3가지의 주요 용도가 있습니다.

1. 가장 가까운 이웃정보를 찾도록 해준다. 이것이 유저의 관심사나 클러스터 카테고리에 대해서 추천을 하도록 도와줍니다.

2. 머신러닝의 지도식학습(Supervised Learning)의 입력값으로 임베딩을 사용할 수 있습니다.

3. 카테고리간의 개념과 관련도를 시각화 해주는 용도로 사용합니다.

책 추천 프로젝트관점에서 볼때, 임베딩 방식으로 37,000개의 책서평을 각각 50짜리 벡터로 만드는 것입니다.

더우기 임베딩이 학습되면서 책들은 유사한 책들끼리 임베딩 공간상에서 서로 가까이 위치 되게 됩니다.

One Hot Encoding의 한계

One Hot encoding 이란 하나의 범주형 데이터를 하나의 공간에 할당하는 것입니다. 주 절차는 특정 카테고리를 Vector상의 여러 공간중 하나에 할당하는 것이지요. 카테고리에 포함되면 1로 표시하고 포함되지 않으면 0으로 표시합니다. 이런 One Hot 방식은 두가지의 큰 단점이 있습니다.

1. 높은 카디널리티 (High-cardinality) 변수 : 카테고리성 변수가 범위가 너무 큰경우. 이런 값이 벡터로 변환되면 차원 관리가 어렵다.

2. 대응된 값이 완전히 무식방 방식으로 연결 : 비슷한 카테고리라고 할지라도, 벡터공간상에 전혀 관련성이 없이 위치된다.

첫번째 문제는 많이 알려져 있다. 각각의 카테고리가 추가될때마다 우리는 하나의 one-hot 방식으로 encoding된 vector공간하나를 추가해야 한다.

책이 37,000개면 37,000차원의 백터가 필요하다. 어떤 ML머신도 이렇게 큰 벡터를 학습하기는 어렵다.

두번째 문제 또한 제한적인 셩격이 있다 : one-hot 인코딩은 벡터공간상에 서로 다른 개체정보를 가까지 위치시킬수가 없다. 만약 벡터간의 유사도를

cosine 거리를 통해 확인한다면, one-hot방식에서는 항상 유사도가 0이 나오게 될것이다.

One-hot encoding 방식에서는 "전쟁과 평화"와 "안네 카레리나"(모두 톨스토이 작품)는 "전쟁과 평화"와 "은하수를 여행하는 히치하이커를 위한 가이드"보다 가깝게 위치할수 가 없다.

# One Hot Encoding Categoricals

books = ["War and Peace", "Anna Karenina",

"The Hitchhiker's Guide to the Galaxy"]

books_encoded = [[1, 0, 0],

[0, 1, 0],

[0, 0, 1]]

Similarity (dot product) between First and Second = 0

Similarity (dot product) between Second and Third = 0

Similarity (dot product) between First and Third = 0

이상적으로는 아래처럼 가까운 책들끼리 유사도가 높게 나와야겠죠.

# Idealized Representation of Embedding

books = ["War and Peace", "Anna Karenina",

"The Hitchhiker's Guide to the Galaxy"]

books_encoded_ideal = [[0.53, 0.85],

[0.60, 0.80],

[-0.78, -0.62]]

Similarity (dot product) between First and Second = 0.99

Similarity (dot product) between Second and Third = -0.94

Similarity (dot product) between First and Third = -0.97

다음 시간에는 One-hot encoding의 관련성 부족을 극복하기 위해, 위키피디아의 책과 링크정보를 이용해 Book Embedding을 만드는 과정을 살펴보도록 하겠습니다.


[출처 1] https://kh-kim.gitbook.io/natural-language-processing-with-pytorch/00-cover-5/02-dimension-reduction

[출처 2] https://medium.com/qandastudy/mathpresso-%EB%A8%B8%EC%8B%A0-%EB%9F%AC%EB%8B%9D-%EC%8A%A4%ED%84%B0%EB%94%94-15-%EC%B0%A8%EC%9B%90-%EC%B6%95%EC%86%8C-dimensionality-reduction-76b13460506f

차원의 저주(Curse of dimensionality)

차원이 증가하면 그것을 표현하기 위한(그 공간을 가득 채우기 위한) 데이터 양이 기하급수적으로 증가한다는 것입니다.

데이터가 부족하면 대부분 공간이 비어있는 희소성 문제가 발생. 그리고 대부분 데이터들이 뚝뚝 떨어져 있어서 군집화가 어려움.

차원 축소

높은 차원에서 데이터를 표현하는 과정에서 희소성 문제가 많이 나타남. 따라서 같은 정보를 표현할 때는 더 낮은 차원을 사용하는 것이 중요합니다.

데이터의 의미를 제대로 표현하는 특징을 추려내는 것

대부분의 상황에서 차원의 크기는 특징의 개수를 나타내고

특징(feature)이 너무 많으면 학습이 어렵기 때문에 더 좋은 특징만 가지고 사용하겠다는 것입니다.

주성분 분석 (PCA)

대표적인 차원 축소 방법으로는 주성분 분석principal component analysis(PCA)이 있습니다.

3차원에서 2차원, 다시 1차원으로 PCA를 수행하는 예

이와 같이 고차원high-dimension의 데이터를 더 낮은 차원으로 표현할 수 있습니다. 주로 특잇값 분해singular value decomposition(SVD)를 통해 주성분을 분석할 수 있습니다. 이때 축소를 위한 주성분은 다음과 같은 조건을 만족합니다.

주성분의 조건

고차원에서 주어진 데이터들을 임의의 주성분 고차원 평면(초평면)hyperplane에 투사했을 때 투사점들 사이가 서로 최대한 멀어져야 합니다. 즉, 투사점들의 분산이 최대가 되도록 합니다.

또한, 고차원 평면으로 투사할 때 원래 벡터와 고차원 평면상의 투사된 거리가 최소가 되어야 합니다. ???

주성분분석데이터의 분포 가장 잘 표현하는 성분을 찾아주는 것입니다.

데이터 분포와 그들의 주성분 — Wikipedia

위의 그림에서 x, y 축보다 화살표방향의 두 축이 이 데이터를 더 잘 표현하는 것(주성분)을 알 수 있습니다.

주성분은 통계학적으로 데이터들의 분산이 가장 큰 방향 벡터를 말합니다.

(분산 - 데이터가 평균에서 얼마나 떨어져 있는가를 의미)

주성분 분석을 통해 고차원의 데이터를 더 낮은 차원으로 효과적으로 압축할 수 있습니다. 하지만 앞에서 언급했듯이 실제 데이터(점)의 위치와 고차원 평면에 투사된 점의 거리가 생길 수 밖에 없습니다. 이는 곧 정보의 손실을 의미합니다. 특히 주성분은 직선 또는 평면이므로, 이러한 손실은 불가피하게 나타납니다. 이 과정에서 너무 많은 정보가 손실된다면 효율적으로 정보를 학습하거나 복구할 수 없습니다. 따라서 높은 차원에 표현된 정보를 지나치게 낮은 차원으로 축소하여 표현하기는 어렵습니다. 특히 데이터가 비선형적으로 구성될수록 더욱 어려워집니다.

매니폴드 가설

이때 하나의 가설을 통해 차원 축소에 더 효율적으로 접근해볼 수 있습니다. 높은 차원에 존재하는 데이터들의 경우, 실제로는 해당 데이터들을 아우르는 낮은 차원의 다양체manifold 역시 존재한다는 매니폴드 가설manifold hypothesis입니다.



3차원 공간에 기묘한 모양으로 분포한 샘플들이 2차원 매니폴드에 속하는 모습

이와 같이 3차원 공간에 분포한 데이터를 아우르는 소용돌이 모양의 구부려진 2차원 매니폴드가 존재할 수도 있습니다. 이런 매니폴드를 찾아 2차원 평면에 데이터 포인트들을 맵핑할 수 있겠지요. 그러한 매니폴드를 찾을 수 있다면 앞서 살펴본 주성분 분석처럼 데이터를 고차원 평면에 선형적으로 투사하며 생긴 손실을 최소화할 수 있을 것입니다.

3차원 공간상의 최단경로와 2차원 매니폴드 공간의 최단경로가 다르다

매니폴드 가설에 따르면 또 하나의 흥미로운 특징이 있습니다. 앞서 그림에서 볼 수 있듯이, 고차원상에서 가까운 거리에 있던 데이터 포인트들일지라도, 매니폴드를 보다 저차원 공간으로 맵핑하면 오히려 거리가 멀어질 수 있다는 것입니다. 그리고 저차원의 공간상에서 가까운 점끼리는 실제로도 비슷한 특징feature을 갖는다(군집화 가능하다)는 것입니다. 즉, 저차원의 각 공간의 차원축은 고차원에서 비선형적으로 표현될 것이며, 데이터의 특징을 각각 표현하게 될 것입니다.

예를 들어 다음 그림과 같이 MNIST 데이터를 2차원의 숨겨진 저차원low-dimensional latent space에 표현한다고 가정합니다. 빨간색으로 표시된 각 샘플은 2차원 공간에서는 사람이 인지하는 특징과 비슷한 특징을 갖는 위치와 관계에 있겠지만, 원래의 데이터 차원인 784차원의 고차원 공간에서는 전혀 다른 거리와 관계를 지닐 것입니다.

MNIST 데이터를 2차원 공간에 표현했을 때 두 샘플의 위치

딥러닝이 잘 동작한 이유

아마도 딥러닝이 훌륭한 성능을 내는 이유를 여기서 찾을 수 있을 것입니다. 대부분의 경우 딥러닝이 문제를 풀기 위해 차원 축소를 수행하는 과정은, 데이터가 존재하는 고차원상에서 매니폴드를 찾는 과정입니다. 주성분 분석(PCA)과 같이 다른 선형적인 방식에 비해 딥러닝은 비선형적인 방식으로 차원 축소를 수행하며, 그 과정에서 해당 문제를 가장 잘 해결하기 위한 매니폴드를 자연스럽게 찾아냅니다. 이것이 바로 딥러닝이 그토록 성공적으로 동작하는 이유일 것으로 예상합니다.

아직 증명되지 않은 가설이기 때문에 확언할 수는 없습니다. 하지만 대부분의 연구가 실제 이 가설에 기반하여 이루어지고 있으며 성과를 내고 있습니다.

3차원 데이터를 입력으로 받아 1차원의 이진 분류를 수행할 때

오토인코더

자연어 처리에서 단어를 표현하기 위한 차원 축소를 본격적으로 다루기에 앞서, 오토인코더autoencoder에 관해 이야기해보겠습니다. 오토인코더는 다음과 같은 구조를 가진 딥러닝 모델 입니다.

전형적인 형태의 오토인코더

고차원의 샘플 벡터를 입력으로 받아 매니폴드를 찾고, 저차원으로 축소하는 인코더를 거쳐 병목bottle-neck 구간에서의 숨겨진hidden 벡터로 표현합니다. 그리고 디코더는 저차원의 벡터를 받아, 다시 원래 입력 샘플이 존재하던 고차원으로 데이터를 복원하는 작업을 수행합니다. 복원된 데이터는 고차원 상의 매니폴드 위에 위치하게 될 겁니다.

이때 고차원의 벡터를 저차원으로 압축한 후 다시 복원하는 과정에서, 오토인코더는 병목의 차원이 매우 낮기 때문에 복원에 필요한 정보만 남기고 필요 없는 정보는 버려야 합니다. 좁은 병목구간을 통과하기 위해서는 복원에 필요 없는 정보부터 버려질 것입니다. 따라서 이 구조의 모델을 훈련할 때는 복원된 데이터와 실제 입력 데이터 사이의 차이를 최소화하도록 손실 함수를 구성합니다.

이때 정보량이 낮은 정보부터 버려질 것입니다.

고차원(3차원)에서 저차원(2차원)으로 투사할 때의 정보 손실(복원 오류)

하지만 고차원에서 저차원으로 데이터를 표현하면서 손실이 따를 수 있으므로, 훈련이 완료된 모델일지라도 복원된 데이터는 실제 입력과 차이가 있을 수 있습니다.

오토인코더를 사용하여 이전 장에서 TF-IDF 등을 활용해 계산한 희소 단어 특징 벡터를 입력으로 넣고 같은 출력값을 갖도록 훈련했을 때, 오토인코더의 병목 계층 결괏값을 덴스 단어 임베딩 벡터로 사용할 수 있을 것입니다.

단어 임베딩

대표적인 word2vec, word2vec의 단점을 보완한 GloVe

[출처] https://eda-ai-lab.tistory.com/428

임베딩 기법들

· One Hot Encoding

· TF-IDF

· LSA

· Word2Vec

· Glove

· FastText

One Hot Encoding

· 개념 : 각 단어에 Index를 부여하는 방식으로 표현하는 단어의 Index에 1을 넣고 그렇지 않은 곳 에는 0을 넣는 방법

· 장점 : 사용하기 매우 쉬움. pandas의 get_dummies함수나 sklearn의 preprocessing.OneHotEncoder을 사용하면 됨

· 단점 : 단어의 의미를 전혀 이해하지 못함. 단어의 개수가 많아지면 차원의 길이가 매우 커지는 문제가 생기고 Sparse 하게(대부분 0으로 채워지는) 벡터가 구성됨.

TF-IDF

· 개념 : 단어의 빈도와 역 문서의 빈도를 사용하여 단어에 가중치를 부여하는 방식

· 장점 : 어떤 단어가 중요한 단어인지 직관적인 해석이 가능.

· 단점 : 문맥에 대한 고려를 해주지 않음 (단어의 의미가 포함되지 않음)

LSA

· 개념 : 기존의 원핫인코딩이나 TF-IDF의 경우 단어의 의미를 고려하지 못하는 단점을 해결한 방법

· 장점 : 단어의 잠재적인 의미를 고려

· 단점 : 새로운 정보에 대한 업데이트가 어렵고 단어-문서 간의 유사도를 계산하기 어려움 (차원이 축소되어서 단어 간의 의미 파악이 힘듦. 후에 Glove에서 이를 지적하고 해결)

Word2Vec

Difference between SkipGram and CBOW training architectures

· 개념 : 기존의 원핫인코딩이나 TF-IDF의 경우 단어의 의미를 고려하지 못하는 단점을 해결한 방법으로 중심 단어와 주변 단어 간의 관계를 통해서 임베딩 하는 방법

· 방법

· CBOW : 주변에 있는 단어들을 가지고, 중간에 있는 단어들을 예측하는 방법

· Skip-Gram : 중심의 단어로 주변에 있는 단어들을 예측하는 방법

· 장점 : 단어들의 유사도를 계산하기에 임베딩 된 벡터 자체가 단어의 의미를 포함함. (Dense Representation이기에 적은 차원으로 대상을 표현할 수 있고 일반화 능력을 갖추고 있음). 온라인 방식으로 모델에 데이터가 공급될 수 있으며 전처리가 거의 필요하지 않으므로 메모리가 거의 필요하지 않음

· 단점 : 사용자가 지정한 윈도우(주변 단어 몇 개만 볼지) 내에서만 학습/분석이 이뤄지기 때문에 말뭉치 전체의 공기 정보(co-occurrence)는 반영되기 어려움(Glove에서 지적한 단점). 데이터가 충분히 많아야 학습이 잘 됨(아래와 같이 데이터가 적은 경우 학습이 잘 안 됨). 카테고리 수가 너무 많으면(어휘가 많으면) softmax함수를 사용하면 모델을 학습하기가 매우 어려움, 이를 해결하기 위해 negative sampling 같은 방법이 도입

Glove

· 개념 : LSA, Word2Vec의 문제점을 개선한 모델로 “임베딩 된 단어 벡터 간 유사도 측정을 수월하게 하면서도 말뭉치 전체의 통계 정보를 좀 더 잘 반영”

· 방식 : Co-occurrence 가 있는 두 단어의 단어 벡터를 이용하여 co-occurrence 값을 예측하는 regression 문제를 품

· 장점 : 벡터 공간에서 하위 선형 관계를 포착하도록 단어 벡터를 적용 보통 Word2Vec보다 성능이 좋음. 단어와 단어보다는 단어 쌍과 단어 쌍 사이의 관계를 고려하여 단어 벡터에 좀 더 실용적인 의미 추가. "the"와 같은 무의미한 stop words에 가중치를 낮게 줌

· 단점 : 계산 복잡성이 높고 메모리를 많이 필요로 함. 특히, 동시 발생 행렬과 관련된 하이퍼 파라미터를 변경하는 경우 행렬을 다시 재구성해야 하므로 시간이 많이 걸림. 반대 단어 쌍을 분리하는 방법. 예를 들어, "양호한"및 "나쁜"은 일반적으로 벡터 공간에서 서로 매우 가깝게 위치하므로 정서 분석과 같은 NLP 작업에서 단어 벡터의 성능이 제한(Word2Vec도 동일한 문제를 안고 있음)

FastText

Model architecture of fastText, where L (in L1) represents layer and O (in O1) operation.

· 개념 : Facebook에서 개발한 word embeddings과 text classification 용도의 라이브러리로 294개의 언어에 대해 학습된 모델을 가지고 있음. (Word2vec이 영어에만 잘되는 것에 비해 FastText는 많은 언어에 대해서도 잘된다는 장점이 있음). 기본적인 모델은 Word2vec의 확장판으로 구성 단어에 대한 벡터를 생성(포함된 문자의 하위 문자열로 구성된 벡터로 만들어짐, 이를 통해 word2Vec은 어휘가 없는 단어를 볼 경우 아무것도 모르지만, fast Text는 어느 정도 모방을 함)

· 장점 : n-grams에서도 유연함. 어휘가 없는 단어를 볼 경우 아무것도 모르지만, fast Text는 어느정도 모방을 함. 동시 등장 정보를 보존

· 단점 : Supervised learning으로 학습하는데 많은 양의 데이터가 필요.



반응형

+ Recent posts