일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 지도시각화
- implicitData
- ExplicitData
- TensorflowDeveloperCertificate
- json
- pandas
- Python
- jsonl
- Colab
- BloombergMarketConcepts
- Convert
- VScodeNotResponding
- gluonnlp
- str.replace
- numpy.bool
- jsonlines
- session-basedRecommendation
- github2FA
- MatrixFactorization
- 텐서플로자격증
- Visualization
- MySQL
- Cast
- sshtunnel
- decimal error
- wordembedding
- vscode
- iterrows
- DIF_SR
- LatentFactorModel
- Today
- Total
garret
[NLP] Word Embedding 개념 본문
NLP의 word Embedding 공부기록
자연어 처리에서 특징 추출을 통해 수치화할 때 사용하는 언어의 벡터화
Word Embedding : 벡터화의 과정
The curse of dimensionality
데이터 학습을 위해 차원이 증가하면서 학습데이터 수가 차원의 수보다 적어져 성능이 저하되는 현상
차원이 증가할수록 개별 차원 내 학습할 데이터 수가 적어지는(sparse) 현상 발생
Word Embedding의 종류
1. Sparse
one-hot encoding : 공간적 낭비 발생, 단어 의미 표현 못함
2. Dense
단어빈도 기준으로 벡터화
1) CountVectorizer : 각 텍스트에서 횟수 기준으로 특징 추출
2) TfidVectorizer : TF-IDF 이용해 텍스트 데이터의 특징 추출
- TF : Term Frequency, 특정 단어가 글 안에서 나오는 횟수
- IDF : Inverse Document Frequency, 특정 단어가 여러 글에 얼마나 자주 나오는지
단어의 특징과 유사도 나타내기
Word2Vec
1) CBow : 어떤 단어를 문맥안의 주변 단어들을 통해 예측
→ 이러한 임베딩은 input을 manifold 하는 과정에도 사용가능
- input layer : 주변 단어들을 one-hot 벡터로 만들어 입력값으로 사용
- hidden layer : 가중치 행렬을 one-hot 벡터에 곱해서 n-차원 벡터 만들기
- output layer : 만들어진 n-차원 벡터를 모두 더해 더한 개수로 나눠 평균 n-차원 벡터 만들기
- optimize : n-차원 벡터에 다시 가중치 행렬을 곱해서 one-hot 벡터와 같은 차원의 벡터로 만들고 실제 예측하려고 하는 단어의 one-hot 벡터와 비교해서 학습
2) skip-gram : 어떤 단어를 가지고 특정 문맥 안의 주변 단어들을 예측
Keras의 embedding
무작위로 초기화된 상태에서 정수로 오는 word를 정해진 크기의 벡터로 바꿔서 다음 레이어로 넘기고, 학습단계에서는 역전파되는 기울기를 바탕으로 해당 word의 임베딩 값 조정, 즉 주변 문맥을 반영하지 않는다.
임베딩
keras.layers.Embedding(input_dim, output_dim,
embeddings_initializer='uniform', embeddings_regularizer=None,
activity_regularizer=None, embeddings_constraint=None,
mask_zero=False, input_length=None)
예시
model = Sequential()
model.add(Embedding(1000, 64, input_length=10))
# 모델은 (batch, input_length)의 크기를 가진 정수 행렬만 인풋으로 전달받습니다.
# 인풋 내 가장 큰 정수(다시 말해 단어 색인)는
# 999(어휘목록 사이즈)보다 커서는 안됩니다.
# 현재 model.output_shape == (None, 10, 64), 여기서 배치 차원은 None입니다.
input_array = np.random.randint(1000, size=(32, 10))
model.compile('rmsprop', 'mse')
output_array = model.predict(input_array)
assert output_array.shape == (32, 10, 64)
인수
- input_dim : 정수 >0, 어휘목록의 크기, 최대 정수 index +1
- output_dim: 정수 ≥0, 밀집 임베딩의 차원
- embeddings_initializer: 임베딩 행렬의 초기값 설정기
- embeddings_regularizer: 임베딩 행렬에 적용되는 정규화 함수
- embeddings_constraint : 임베딩 행렬에 적용되는 제약 함수
- mask_zero: 인풋 값 0을 마스크 처리해야 할 특수 “패딩”값으로 다룰 것인지 여부
- input_length: 인풋 시퀀스의 길이로 불변해야 함.
keras의 Embedding layer 소스코드
class Embedding(Layer):
def __init__(self,
input_dim,output_dim,embeddings_initializer='uniform',embeddings_regularizer=None,activity_regularizer=None,embeddings_constraint=None,
mask_zero=False,input_length=None,**kwargs):
self.input_dim = input_dim
self.output_dim = output_dim
self.embeddings_initializer = initializers.get(embeddings_initializer)
self.embeddings_regularizer = regularizers.get(embeddings_regularizer)
self.activity_regularizer = regularizers.get(activity_regularizer)
self.embeddings_constraint = constraints.get(embeddings_constraint)
self.mask_zero = mask_zero
self.supports_masking = mask_zero
self.input_length = input_length
self._supports_ragged_inputs = True
@tf_utils.shape_type_conversion
def build(self, input_shape):
self.embeddings = self.add_weight(
shape=(self.input_dim, self.output_dim),
initializer=self.embeddings_initializer,
name='embeddings',
regularizer=self.embeddings_regularizer,
constraint=self.embeddings_constraint)
def call(self, inputs):
out = embedding_ops.embedding_lookup(self.embeddings, inputs)
return out
Autoencoder와 Manifold
: 고차원의 데이터를 저차원으로 옮길 때 데이터를 잘 설명하는 집합의 모형
고차원의 데이터 밀도는 낮지만 이들의 집합을 포함하는 저차원의 subspace가 있다. 저차원의 manifold를 벗어나는 순간부터 급격히 밀도가 낮아져 이미지를 잘 설명하지 못한다. 높은 차원에서 낮은 차원으로 변환하는 것을 embedding이라고 하며 이에 대한 학습과정을 Manifold Learning이라 한다.
input data의 고차원 데이터는 scarce한 밀도를 가지고 있으므로 encoder에서 manifold과정을 통해 저차원의 데이터로 만들어 원래의 데이터를 잘 설명하는 manifold를 찾는 것이 목적
decoder로 latent variable을 원래의 data로 만들어주게 되면 label로 다시 input data를 사용할 수 있으므로 지도학습이 가능해진다.
Reference
Auto Encoder란? - Manifold와 차원 축소
이번 글에서는 Auto Encoder를 공부하면서 익힌 내용들을 정리한다. Auto Encoder는 Encoder와 Decoder의 구조로 되어있는데 PCA와 같은 차원 축소가 그 목적이었다. 그러므로 사실 핵심은 Encoder에서 Latent var
simpling.tistory.com
Embedding 이란 무엇인가 이해하기
인간의 언어(자연어)는 수치화되어 있지 않은 데이터이기 때문에 머신러닝, 딥러닝 기법을 바로 사용할 수가 없다. (수치화되어있는 데이터의 예로는 Mnist나 꽃의 종류처럼 숫자로 분류가 가능
simpling.tistory.com
https://keras.io/ko/layers/embeddings/
Embedding Layers - Keras Documentation
[source] 임베딩 keras.layers.Embedding(input_dim, output_dim, embeddings_initializer='uniform', embeddings_regularizer=None, activity_regularizer=None, embeddings_constraint=None, mask_zero=False, input_length=None) 양의 정수(색인)를 고정된
keras.io
'AI' 카테고리의 다른 글
[NLP] Recurrent Neural Network, 순환신경망 개념 (0) | 2023.05.19 |
---|---|
[LGBM] LightGBM 개념정리 (0) | 2023.01.14 |