[n422]Distributed Representation
■ Key words
ㆍ단어의 분산표현(Distributed Representation)
- one-hot encoding
- embedding
ㆍWord2Vec
- CBoW / Skip-gram
- Word2Vec의 임베딩 벡터 시각화
ㆍfastText
- OOV(Out Of Vocabulary) 문제
- 철자(Chracter) 단위 임베딩
- padding
■ 주요내용
ㆍ단어의 분산표현(Distributed Representation) : 단어 자체를 벡터화 하는 방법 /
분포가설에 기반하여 주변 단어 분포를 기준으로 단어의 벡터표현 결정
- 분포 가설(Distribution hypothesis) : 비슷한 위치에서 등장하는 단어들은 비슷한 의미를 가진다는 가설
- one-hot encoding : 표 형태로 된 데이터를 다룰 때 범주형 요소마다 0/1의 형태로 나타냄 /
각 단어별 1을 지정하므로, 단어 간 유사도를 구할 수 없음(cosine similarity)
- embedding : 단어를 고정 길이, 즉 차원이 일정한 벡터로 표현
ㆍWord2Vec : 분포가설을 기반으로 특정 단어 양 옆에 있는 단어들의 관계를 활용하여 embedding /
단어를 쪼갤 수 없는 단위로 생각함
* 말뭉치(corpus)에 없는 단어(토큰)은 벡터화 불가(OOV)
- CBoW(Continuous Bag-of-Words) : 주변 단어에 대한 정보를 기반으로 중심 단어의 정보를 예측하는 모델
- Skip-gram : 중심 단어의 정보를 기반으로 주변 단어의 정보를 예측하는 모델 /
역전파 관점에서 더 많은 학습을 하기 때문에 특히 데이터가 적을 때 더 좋은 성능을 보임
- Word2Vec의 구조
· 입력층 : one-hot encoding된 단어 벡터
· 은닉층 : embedding 벡터의 차원 수만큼의 노드로 구서오딘 은닉층이 1개인 신경망(300개 차원)
· 출력층 : 단어 개수 만큼의 노드로 이루어짐 / 활성화 함수로 softmax 사용
* 더 적은 계산을 하게 할 수도 있음(Sub-sampling / Negative-sampling)
- Word2Vec의 임베딩 벡터 시각화 : 단어 간 의미적, 문법적 관계(유사도)를 잘 나타낼 수 있음(gensim package)
ㆍfastText : 하나의 단어 안에도 여러 단어들이 존재하는 것으로 간주하여 분석 / 내부단어(subword) 학습
- OOV(Out Of Vocabulary, corpus에 비포함된 모르는 단어) 문제 : 말뭉치에 없는 단어는 분석이 불가하나, 세상 모든 단어를 포함하는 말뭉치는 만들 수 없음 / 빈도가 적은 단어도 과소학습으로 embedding vector 생성 불가
- 철자 단위 임베딩(Chracter level Embedding) : Chracter n-gram을 활용하여 접두사/접미사(단어의 시작/끝)
구분을 위해 <>을 붙이고, 3-6개의 character-level로 잘라서 embedding 적용하는 방법
- 알고리즘이 매우 효율적으로 짜여있어 시간이 상대적으로 그렇게 오래 걸리진 않음
- 철자 단위 임베딩 시각화 : 이미 학습된 두 단어의 철자 간 유사성 확인 가능
- 비슷하게 생긴(character n-gram이 포함된) 단어가 비슷한 단어로 분석됨 / 단어의 의미 보다 결과에 무게
- baseline model : 문장에 있는 단어 벡터를 모두 더한 뒤 평균내어 문장 분류 구하기
- padding(pad_sequence) : 다른 문장의 차원을 통일하는 방법. 일반적으로 0을 추가하여 차원을 통일함.
* GlobalAveragePooling1D : 고정된 크기의 출력벡터 return / 입력되는 행렬(단어 벡터)의 평균을 구함.
ㆍ
-
■ Session note
ㅁ 오전 session
ㆍ철자 단위 fastText 시각화 : 각 문장을 학습한 후 비교한 것인가
- 여러 문장 속에서 학습한 후 각 벡터들을 비교하여 시각화한 것
- fastText도 Word2Vec과 같이 CBoW 혹은 Skip-gram 방법으로 학습하되, 단어를 n-gram으로
구분/벡터화하여 학습
ㆍTF-IDF 단점 : 연산이 많아짐 / 단어 간 유사도를 파악하기 어려움 / 문장에 없는 단어를 만들어 낼 수 없음
ㆍWord2Vec : 분포가설(유유상종, 비슷한 단어끼리 근처에 위치한다)이 기본 가설
ㆍone-hot encoding : 벡터의 cos similarity가 0이 나와 유사도를 확인할 수 없음
ㆍembedding : 단어를 고정 길이의 벡터로 표현
ㆍWord2Vec
- CBOW : 주변의 문맥단어를 활용하여 중심의 타겟단어를 맞추는 것
- Skip-gram : 중심의 타겟단어로 주변의 문맥단어를 맞추는 것. 학습량이 더 많아 성능이 더 좋게 나옴
⇒ 같은 데이터가 있어도 skip-gram의 성능이 더 좋고, 데이터가 적을수록 skip-gram의 성능이 상대적으로 더 좋게 나온다
ㆍ단어의 수가 node의 수를 결정함
ㆍWord2Vec학습시간 줄이기 : sub-sampling / negative-sampling
ㆍ학습 시키기 위해선 많은 corpus가 필요하기 때문에 gensim library에서 이미 학습된 데이터를 가져옴
⇒ 학습량 부족을 피하고, 많은 학습을 위해선 많은 양의 문서가 필요하기 때문
ㆍ신조어, 오타 등은 model의 library에 없어서 오류가 발생함
ㆍskip-gram : n개로 단어를 쪼갠 후 embedding 벡터화하여 학습
* garbage in, garbage out : embedding을 강조하는 이유
ㆍWord2Vec의 한계 : i found good stores / i found bad stores가 정 반대의 의미를 가지지만, Word2Vec에서는 유사성을 높은 것으로 분석하여 보완하는 방법을 개발하고 있음
ㆍfastText에서 CBoW를 통해 문맥을 학습한 경우 의미적 유사성도 학습이 가능하지만, library에 불포함되어 학습할 기회가 없었던 새로운 단어는 구조적으로만 분석하여 유사도를 분석하게 됨
ㆍCBoW와 Skip-gram : 여러 개의 힌트를 가지고 학습하는 CBoW와 중심단어 하나만으로 학습하는 Skip-gram; 시간은 오래 걸리지만, skip-gram이 학습량이 더 많기 때문에 성능이 더 좋을 수밖에 없음; 이미 학습된 library를 활용하므로, skip-gram이 보통 성능이 더 좋음
ㆍ말뭉치에 따라 가중치가 달라져 학습에 따른 성능도 달라질 것으로 예상됨
⇒ 도메인에 따라 자주 쓰이는 단어와 단어의 의미가 달라짐
ㆍ일반적으로 Word2Vec 혹은 fastText는 skip-gram으로 학습된 것
ㆍpadding : 문장의 길이가 다르다 보니 tokenized하여도 token의 길이가 다르기 때문에 ,0을 넣어 길이 혹은 형태를 맞춰주는 작업. 이미지 처리할 때도 적용.
ㆍfastText도 CBoW와 skip-gram 방법으로 학습하기 때문에 문맥정보를 학습할 수 있음
⇒ vocab에 있는 단어라면 의미정보를 이미 학습한 것으로 볼 수 있음
- OOV 발생했을 때 구조적으로 의미를 유추할 수 있도록 보완 작용
ㆍWord2Vec, fastText으로 embedding 하기 전에 stemming 혹은 lemmatization으로 token화 하는
⇒ lemmatization을 반드시 적용할 필요는 없으므로, 미적용 시 fastText에서 n-gram 학습이 가능함
ㆍembedding을 통한 문장 분류가 binary classification인가? : 별개의 문제. 문제의 목적에 따라 다름.
ㆍembedding vector의 차원이 어떻게 결정되는가 / input이 어떻게 결정되는가
⇒ hidden layer node 수(embedding vector의 차원 수)를 정하는 것은 사람이 정하기 나름
ㆍ문맥만 유사성을 비교할 것인지(word2vec), 아니면 문맥과 단어의 구조적인 유사성까지 비교할 것인지(fastText; OOV 해결을 위함)에 따라 사용하는 모델이 달라질 수도 있을 것
- 언어마다 다름
- 문법적, 구조적 분석 : fastText
- 의미적 분석 : Word2Vec
ㅁ 오후 session
ㆍK-digital training 수료기준(혼합훈련과정; 출석)와 code states 커뮤니티 합류 기준(모든 sprint 2점, project 2점 이상 / KDT수료)을 별도로 운영
ㆍ분포가설 : 유유상
ㆍWord2Vec : 분포가설을 근본으로 단어 예측, OOV 문제; 말뭉치에 비포함 된 단어는 오류 발생
fastText : 철자(chrateristic)단위 embedding; 말뭉치에 들어있지 않은 단어도 벡터화 가능
- CBoW : 주변 단어를 기반로 중심 단어 예측
- skip-gram : 중심단어를 기반으로 주변 단어 예측
⇒ resource 차이, skip-gram이 학습을 더 많이 하기 때문에 성능이 더 좋음(데이터가 적을수록 더 유효) / 학습하는 과정
ㆍembedding 벡터 : 가중치 행렬 / 차원 : 은닉층의 node 수
ㆍspam 분류문제에 LabelEncoder 사용 이유 : 이진 분류 문제 → one-hot 사용 시 column이 두 개가 되면 node가 2개가 되어 softmax를 써야 함; sigmoid함수로 node 1개로 만드는 것이 연산이 더 빠르고, 성능도 더 좋음
- 순서가 있는 문제는 ordinal encoder 사용
- label encoder는 순서(위)가 있는 것이 아니라 단순히 label을 달아주는 것
ㆍGlobalAveragePooling1D : feature를 1차원 벡터로 만들기
ㆍgensim : 이미 학습한 library를 불러오는 것
■ 주요함수
ㆍ
■ Reference
ㆍWord2Vec : https://youtu.be/sY4YyacSsLc
ㆍFastText : https://youtu.be/-F_37Kaks6g
ㆍFastText : https://wikidocs.net/22883
위키독스
온라인 책을 제작 공유하는 플랫폼 서비스
wikidocs.net
ㆍPadding : https://wikidocs.net/83544
07) 패딩(Padding)
자연어 처리를 하다보면 각 문장(또는 문서)은 서로 길이가 다를 수 있습니다. 그런데 기계는 길이가 전부 동일한 문서들에 대해서는 하나의 행렬로 보고, 한꺼번에 묶어서 처리 ...
wikidocs.net
ㆍGlobalAveragePooling1D : https://www.tensorflow.org/api_docs/python/tf/keras/layers/GlobalAveragePooling1D?hl=ko
tf.keras.layers.GlobalAveragePooling1D | TensorFlow Core v2.6.0
Global average pooling operation for temporal data.
www.tensorflow.org
ㆍPandas column 추출 : https://zephyrus1111.tistory.com/43
[Pandas] 4. 필요한 열(Column) 추출하기
안녕하세요~ 꽁냥이에요! 데이터의 크기가 클 경우에는 모든 데이터를 다루기보다 필요한 열(Column)을 추출하여 데이터의 크기를 줄인다면 더 빠르게 데이터 분석을 수행할 수 있을 거예요. 이번
zephyrus1111.tistory.com