Colab으로 하루에 하나씩 딥러닝

자연어 전처리_3.임베딩_2) 횟수 기반 임베딩 본문

딥러닝_개념

자연어 전처리_3.임베딩_2) 횟수 기반 임베딩

Elleik 2022. 12. 13. 21:51
728x90

횟수 기반 임베딩

  • 단어가 출현한 빈도를 고려하여 임베딩하는 방법
  • 대표적으로 카운터 벡터와 TF-IDF가 존재

카운터 벡터(Counter Vector)

  • 문서 집합에서 단어를 토큰으로 생성하고 각 단어의 출현 빈도수를 이용하여 인코딩해서 벡터를 만드는 방법
  • 토크나이징과 벡터화가 동시에 가능
### 코퍼스에 카운터 벡터 적용

from sklearn.feature_extraction.text import CountVectorizer
corpus = [
    'This is last chance.',
    'and if you do not have this chance.',
    'you will never get any chance.',
    'will you do get this one?',
    'please, get this chance'
]
vect = CountVectorizer()
vect.fit(corpus)
vect.vocabulary_

코퍼스에 카운터 벡터를 적용한 결과

### 배열 변환

vect.transform(['you will never get any chance.']).toarray()

배열로 변환한 출력 결과

### 불용어 제거한 카운터 벡터

vect = CountVectorizer(stop_words=["and","is","please","this"]).fit(corpus) # stop_words를 사용하여 is, not, an 같은 불용어 제거 
vect.vocabulary_

불용어를 제거한 카운터 벡터 결과


TF-IDF(Term Frequency-Inverse Document Frequency)

 

  • TF(단어 빈도): 문서 내에서 특정 단어가 출현한 빈도를 의미
  • IDF(역문서 빈도): 
    • DF(문서 빈도): 한 단어가 전체 문서에서 얼마나 공통적으로 많이 등장하는지 나타내는 값 
    • 특정 단어가 모든 문서에 등장하는 일반적인 단어(a, the)라면, TF-IDF 가중치를 낮출 필요가 있음
    • DF 값이 클수록 TF-IDF의 가중치 값을 낮추기 위해 DF의 값에 역수를 취함, 이 값이 IDF
  • 스무딩(smoothing):
    • 전체 문서에 특정 단어가 발생하는 빈도가 0이라면 분모가 0이 되는 상황이 발생. 
    • 이를 방지하고자 분모에 1을 더해 주는 것 
  • 사용 예시
    • 키워드 검색을 기반으로 하는 검색 엔진
    • 중요 키워드 분석
    • 검색 엔진에서 검색 결과의 순위를 결정 
### TF-IDF를 적용한 후 행렬로 표현

from sklearn.feature_extraction.text import TfidfVectorizer
doc = ['I like machine learning', 'I love deep learning', 'I run everyday']
tfidf_vectorizer = TfidfVectorizer(min_df=1)
tfidf_matrix = tfidf_vectorizer.fit_transform(doc)
doc_distance = (tfidf_matrix * tfidf_matrix.T)
print("유사도를 위한", str(doc_distance.get_shape()[0]),'x',str(doc_distance.get_shape()[1]),'행렬을 만들었습니다.')
print(doc_distance.toarray())

TF-IDF를 적용한 후 행렬로 표현한 결과

참고: 출처: 서지영, 『딥러닝 텐서플로 교과서』, 길벗(2022)