민팽로그

10월 6일 언어 지능 실습 본문

머신러닝&딥러닝

10월 6일 언어 지능 실습

민팽 2021. 10. 6. 21:54

'apple'이라는 단어는 문맥에 따라 사과가 되기도, 회사가 되기도 함. 사람은 이러한 차이를 쉽게 인식할 수 있지만 기계가 이해하기는 어려움. 따라서 단어를 수치적으로 표현하여 기계가 이해할 수 있도록 Word Embedding 해야 함.

쉽게 말해서 Word Embedding은 텍스트를 수로 표현한 것! 같은 문자라고 하더라도 의미에 따라 다른 수치로 표현할 수 있음. (단어를 사전을 사용하여 매핑하고 이를 벡터로 만드는 것)

 

자연어 처리 관련 용어
  • Document(문서)
  • Corpus(말뭉치): 텍스트(문서)의 집합
  • Token(토큰): 단어처럼 의미를 가지는 요소
  • Morphemes(형태소): 언어에서 의미를 가지는 최소단위
  • POS(품사): 명사, 동사 등
  • Stopword(불용어): I, my, me, 조사, 접미사와 같이 자주 나타나지만 실제 의미에 큰 기여를 하지 못하는 단어들
  • Stemming(어간 추출): 어간만 추출하는 것(ex. running, runs, run -> run)
  • Lemmatization(음소표기법): 앞뒤 문맥을 보고 단어를 식별하는 것

 

Word Embedding

1. Frequency based Embedding             2. Prediction based Vector

 

Frequency based Embedding

1) BOW(Bag of words)

문서를 자동으로 분류하기 위한 방법. 주어진 말뭉치에서 사용된 각각의 단어에 인덱스를 매겨 사전처럼 만듦 -> 입력된 문서의 각 단어가 해당 단어 사전에서 해당 인덱스에 얼마나 자주 나타나는지 표시하는 식으로 입력된 문장을 분석

ex.

학습 말뭉치: "It was the best of times, it was the worst of times, it was the age of wisdom, it was the age of foolishness"

Word Index
it 1
was 2
the 3
best 4
of 5
times 6
age 7
widdom 8
foolishness 9

 

2) Count Vector

말뭉치(Corpus)에 여러 문서들(Documents)가 있다고 할 때, 각 문서마다 고유의 토큰(Token)을 세어 이를 행렬로 나타내는 방법 -> 행은 각각의 문서를 나타내고 열은 각각의 고유 토큰을 나타냄

ex. 

D1: He is a lazy boy. She is also lazy.

D2: Nera is a lazy person.

Number of Tokens: ['He', 'She', 'lazy', 'boy', 'Nera', 'person']

 

  He She lazy boy Nera person
D1 1 1 2 1 0 0
D2 0 0 1 0 1 1

 

3) TF-IDF(Term Frequency-Inverse Document Frequency)

많이 알려진 방법 중 하나로, 각각의 문서에서 단어의 수를 세는 것뿐만 아니라 전체 말뭉치(Corpus)에서 단어의 수도 함께 세는 방법. 즉, 특정 단어가 문서 내에 얼마나 자주 등장하는지를 나타내는 TF(단어 빈도)와 어떤 단어가 문서 전체 집합에서 얼마나 많이 있는지를 나타내는 IDF(역문서 빈도)의 곱으로 TF-IDF의 값을 구함.

D1 Term Count D2 Term Count
This 1 This 1
is 1 is 2
about 2 about 1
Messi 4 TF-IDF 1
  • TF = (특정 문서에서 단어가 나타난 수) / 특정 문서에 있는 전체 단어의 갯수

       D1에서 This의 TF = 1/8

       D2에서 This의 TF = 1/5

       D1에서 Messi의 TF = 4/8

  • IDF = log(말뭉치에서의 전체 문서의 수 / 말뭉치에서 해당 단어가 나타난 문서의 수)

       This의 IDF = log(2/2) = 0

       Messi의 IDF = log(2/1) = 0.301

 

-> D1에서 This의 TF-IDF = (1/8) x 0 = 0

-> D1에서 Messi의 TF-IDF = (4/8) x 0.301 = 0

 

Word2Vec

입력 벡터를 전부 원핫인코딩한 후 은닉계층, 출력계층을 통과했을 때 계산된 가중치 값이 단어가 수치로 임베딩 된 값이 됨. 

  • CBOW(Continuous bag-of-words): 전체 텍스트로 하나의 단어를 예측하는 것으로, 작은 데이터 세트일 수록 유리함
  • Sip-Gram: 타겟 단어들로부터 원본 단어를 역으로 예측하는 것으로, CBOW와는 반대로 컨텍스트-타겟 쌍을 새로운 발견으로 처리하고 큰 규모의 데이터셋을 가질 때 유리함

 

Word2Vec 실습 준비(구글 제공 파일 사용)

GoogleNews-vectors-negative300.bin.gz - Google Drive

 

GoogleNews-vectors-negative300.bin.gz

 

drive.google.com

위 링크를 통해 pretrained 가중치 값들을 다운받을 수 있음(관련문서)

 

실습 코드
#아래 코드는 필요 시 사용
#pip install gensim

import gensim
#모델 로드
model = gensim.models.KeyedVectors.load_word2vec_format('/content/drive/MyDrive/Colab Notebooks/언어지능3기/GoogleNews-vectors-negative300/GoogleNews-vectors-negative300.bin.gz', binary=True)
len(model['university'])

model.most_similar(positive=['university'], topn = 3)
model.most_similar(positive=['woman', 'king'], negative=['man'], topn = 1)
model.most_similar(positive=['Paris', 'Germany'], negative=['Berlin'], topn = 1)

 

 

실습 파일

10월6일.ipynb
0.00MB
05_Pre_Trained_Word_Embeddings_강사님예제파일.ipynb
0.04MB

'머신러닝&딥러닝' 카테고리의 다른 글

성능 향상을 위한 데이터 스케일링  (0) 2021.10.31
10월 1일 언어 지능 실습  (0) 2021.10.02
optimizer  (0) 2021.10.01
9월 30일 언어 지능 실습  (0) 2021.10.01
9월 29일 언어 지능 실습  (0) 2021.09.29
Comments