[AI부트캠프]Distributed Representation

🏆 학습 목표

단어의 분산 표현(Distributed Representation)

  • 원-핫 인코딩의 개념과 단점에 대해서 이해할 수 있습니다.
    분포 기반의 표현, 임베딩이 무엇인지 설명할 수 있습니다.

Word2Vec

  • CBoW와 Skip-gram의 차이에 대해서 설명할 수 있습니다.
    Word2Vec의 임베딩 벡터를 시각화한 결과가 어떤 특징을 가지는지 설명할 수 있습니다.

fastText

  • OOV 문제가 무엇인지에 대해 설명할 수 있습니다.
    철자(Character) 단위 임베딩 방법의 장점에 대해 설명할 수 있습니다.


🔥Worm up

word2vec

딥러닝에 텍스트 넣을 수 없음 -> 숫자로 변환

thank you love you 👉 thank(1) you(2) love(1)

  1. 원핫인코딩
    편하지만 차원이 넘 커지고, 유사도 판별 불가
  2. embedding
    차원 작고 유사도(비슷한 위치에 있는 단어) 얻을 수 있음
  3. skipgram

    "king brave man
    queen beatutiful woman"

🌈Class

분포가설

: 비슷한 위치의 단어들은 비슷한 뜻을 가진다.

word2vec

  • CboW
    -주변 단어에 대한 정보를 기반으로 중심 단어의 정보를 예측하는 모델
    -중심단어를 레이블로, 문맥단어를 입력으로 하는 분류
    -주위 단어를 활용해 중간의 타겟 단어를 맞춤

    주변 단어 ___ 주변 단어

  • Skipgram
    -중심 단어의 정보를 기반으로 주변 단어의 정보를 예측하는 모델인지
    -중심단어를 입력으로, 문맥단어를 레이블로 하는 분류
    -중심 단어를 활용해 주위 단어 맞춤

    __ __ 중심단어 ___ ___

  • 학습량, 성능: Skipgram > CboW

word2vec 학습구조

  • 입력: 원핫코딩된 단어벡터
  • 은닉: 임베딩 벡터의 차원 수
  • 출력: 단어 개수만큼의 노드

(+) sub-samplin, nagative-sampling 추후학습

임베딩 벡터 시각화 : 의미적, 문법적 구분, 나라-수도 관계 나타낼 수 있음.

fastText : 단어의 의미보다는 문법적인 관계에 더 비중을 둠(synthetic > sementic)

임베딩 벡터 문제 : 새단어, 신조어 반영 어렵나..?

fasttext
OOV(out of vocab) 해결


👀QnA

  1. i found good stores.
    i found bad stores.
    => 문법이 같아서 같이 취급할 가능성 있음, 다른 문장들 corpus가 크다면 구별할 수 있을지도

  2. 강의노트에서 구글 뉴스 말뭉치 학습으로부터 단어간 유사도를 도출했는데, 학습되는 말뭉치가 달라지면 성능도 달라지나요?
    -weight -> 머신러닝 말뭉치였으면 가중치로 학습/ 일반적이라면 무게로 학습
    편향되게 corpus를 수집하면 의미가 다르게 학습될 수 있음
    씨보우보다 스킵그램 모델을 쓰고, 일반적인 데이터를 쓰는 편이 성능 좋음

  3. padding
    a. 길이가 같지 않고 적거나 많을 때 일정한 길이로 맞춰 줄 때 사용
    b. [a, b, c][e, f, g, h, i] > [a, b, c, 0, 0][e, f g, h, i]

  4. word2vec의 단점을 보완한 fastText는 단어의 의미보다는 구조적 유사도를 바탕으로 예측하는 방법인데 제 생각은 자연어 처리에서 유사도를 예측하는 본질이 의미적으로 어떤단어와 유사한지를 알아보는게 목적이라고 생각하는데
    그럼 실제로 사용할 때는 먼저 word2vec으로 먼저 유사도를 예측해보고 만약 없는단어라고 keyerror가 나면 fastText를 쓰는 방향으로 순서를 잡아도 될까요?
    a. word2vec 문맥 정보 학습할 수 있습니다.
    b. vocab에 있으면 의미정보 학습함
    BUT 왜 fastText쓰냐면
    c. OOV가 발생한 단어는 구조적으로 의미 유추 가능

  5. 그러면 word2vec이나 fasttext는 stemming이나 lemmatization은 적용하지 않는 건가요?
    a. Stemming, lemmatization -> 자연어 토큰화
    b. 토큰 -> 임베딩

  6. night noon fight morning에서 noon을 가장 다르다고 뽑은 이유
    a. 의미론적으로 학습을 하긴 했으나
    b. 형태론적으로 학습이 좀 더 중심이기 때문에 noon

  7. lemmatization을 하게 되면 사전의 기본형으로 변경이 되는데, fastText가 여러 변형형으로 n-gram학습이 가능한가?
    a. 어떻게 사용하느냐에 따라 다름

  8. 임베딩 벡터를 사용하여 문장 분류를 수행하기가 이진분류인가요? 코드를 보니까 시그모이드 함수 출력하던데
    a. 기본적으로는 분류임
    b. class -> 이진분류라서 시그모이드 쓴 거임
    c. 문제가 다중분류면 다중분류 쓰면 됨

  9. 임베딩 벡터의 차원을 어떻게 설정하는가?
    a.단어가 5개 있고 3차원으로 임베딩(사용자가 정하는거)하면 (3x5) weight 나옴

  10. 말뭉치에 포함된 단어에 대해서 유사도를 word2vec방법과 fastText 방법으로 실행하게 디면 성능은 word2vec이 더 좋을 것 같다는 생각인데 맞을까요?
    a. 언어마다 다릅니다.
    b. 문법적, 구조적으로 봣을 땐 -> fastText
    c. 의미적 -> word2vec

❔QUIZ

  1. 분포가설
    -유유상종 = 비슷한 위치에 있는 단어, 비슷한 뜻을 가진다.

  2. Word2vec
    a. cbow : 주변단어 -> 중심단어 예측
    b. skip-gram : 중심단어 기반 -> 주변단어 예측
    c. 리소스, 성능 : skip-gram > cbow
    d. 문제점 : OoV(Out of Vocab)
    e. 임베딩 벡터
    1. 가중치 행렬
    f. 임베딩 벡터 차원
    1. 은닉층의 노드 수

  3. fastText
    a. 철자 단위 임베딩
    b. 장점 : 말뭉치에 들어있지 않은 것도 임베딩 벡터 구할 수 있음

📚Assignment

pad_sequence의 역할

This function transforms a list (of length num_samples) of sequences (lists of integers) into a 2D Numpy array of shape (num_samples, num_timesteps).
num_timesteps is either the maxlen argument if provided, or the length of the longest sequence in the list.

> sequence = [[1], [2, 3], [4, 5, 6]]
> tf.keras.preprocessing.sequence.pad_sequences(sequence)

array([0, 0, 1],
      [0, 2, 3],
      [4, 5, 6], dtype=int32)
Tokenizer의 인스턴스를 만들면서 num_words 파라미터를 이용해서 단어의 개수를 제한했습니다.
가장 자주 사용되는 num_words-1 개의 단어가 고려됩니다.

tokenizer = Tokenizer(num_words = 100, oov_token="<OOV>")
Tokenizer의 oov_token 인자를 사용하면 미리 인덱싱하지 않은 단어들은 ‘<OOV>’로 인덱싱됩니다.

tokenizer의 word_index 속성은 단어와 숫자의 키-값 쌍을 포함하는 딕셔너리를 반환합니다.

#texts_to_sequences() 메서드는 텍스트 안의 단어들을 숫자의 시퀀스의 형태로 변환합니다.

 #Sequential 클래스를 사용해서 인공신경망의 각 층을 순서대로 쌓을 수 있습니다.
 
 #임베딩은 단어에 대한 토큰을 고차원 공간의 벡터로 매핑 (mapping)하는 방법

좋은 웹페이지 즐겨찾기