본문 바로가기
머신러닝딥러닝/머신러닝

[Python] Count Vectorizer & TFIDFvectorizer 자연어처리 - 자연어 벡터로 바꾸기

by orangecode 2022. 11. 30.
728x90

scikit-learn library를 이용하여 자연어 처리를 할 수 있는 대표적인 class인 Count Vectorizer와 TFIDFvectorizer를 알아보고자 한다.

 

scikit-learn의 서브패키지 중 feature_extraction과 feature_extraction.text라는 문서 전처리용 클래스를 제공하고 있다.

 

DicVectorizer 단어의 수를 세어놓은 사전에서 BOW 인코딩 벡터를 만든다
CountVectorizer 모든 문서의 단어 토큰을 생성하고 각 단어의 수를 세어 BOW 인코딩 벡터를 만든다
TFIDFVectorizer CountVectorizer와 비슷하나 TF-IDF 방식으로 단어의 가중치를 조절하여, 문서 구별능력이 뛰어난 단어에게 큰 가중치를 문서구별능력이 떨어지는 단어에게 작은 가중치를 주어 BOW 인코딩 벡터를 만든다.
HashingVectorizer 해시함수(Hash Function)을 이용하여 적은 메모리, 빠른 속도로 BOW 인코딩 벡터를 만든다.

 

※ BOW인코딩이란?

Bag of Words = BOW

- 단어 T1이 문서 Document 안에 없으면 = 0

- 단어 T1이 문서 Document 안에 있으면 = 1

 

Count Vectorizer

CountVectorizer는 문서 내용을 토큰 리스트로 변환하고, 각 문서에서 토큰의 출현빈도를 계산한다. 각 문서를 bow encoding vector로 변환하여 각문서에 많이 사용된 단어(term)들의 개수를 세고 vectoizer 한다.

 

 

 

from sklearn.feature_extraction.text import CountVectorizer
all_codu = [
    'This is the first document.',
    'This is the second second document.',
    'And the third one.',
    'Is this the first document?',
    'The last document?',
]
vect = CountVectorizer()
vect.fit(all_codu)
vect.vocabulary_

먼저 [all_docu]라는 문장 5개가 들어있는 리스트를 만들어준다.

 

문장 5개가 들어있는 리스트를 CountVectorizer()함수에 넣어 fit 해주면, 사용된 각 단어의 개수가 counting이 되어있는 점을 확인할 수 있다.

Count Vectorizer는 stop_wors, max_df, min_df, ngram_range, tokenizer 등 여러 argument를 이용하여 단어들의 counting 조건을 자유롭게 정하여 사용할 수 있다는 특징을 가지고 있다.

 

 

TFIDFVectorizer

 

TFIDF란 Term Frequency Inverse Document Frequency는 인코딩은 단어를 갯수 그대로 카운트하지 않고 모든 문서에 공통적으로 들어있는 단어의 경우 문서 구별 능력이 떨어진다고 보아 가중치를 축소하는 방법이다.

 

단어들의 집합이라고 할 수 있는 문서(d = document)와 단어(t : term)에 대하여 계산한다.

 

- tf(d, t) =  term frequency, 특정한 단어의 빈도수를 말한다.

- idf(t) = Inverse Document Frequency, 특정한 단어가 들어가 있는 문서의 수에 반비례하는 수를 말한다.

 

- n : 전체 문서의 수를 말한다.

- df(t) : 단어 t를 가진 문서의 수를 말한다.

 

from sklearn.feature_extraction.text import TfidfVectorizer

tfidv = TfidfVectorizer().fit(all_docu)
tfidv.transform(all_docu).toarray()

 

 

Hashing Trick

countvectorizer를 실행할 때 처리할 문서의 크기가 엄청 커지면 속도가 느려지거나 메모리가 부족하여 실행히 불가능할 수 있다. 이럴 경우 Hashing Vectorizer를 이용하여 해시 함수를 사용하여 단어에 대한 인덱스 번호를 생성하기 때문에 사용 메모리와 실행 시간을 절약할 수 있다.

 

 

참고 블로그

https://datascienceschool.net/03%20machine%20learning/03.01.03%20Scikit-Learn%EC%9D%98%20%EB%AC%B8%EC%84%9C%20%EC%A0%84%EC%B2%98%EB%A6%AC%20%EA%B8%B0%EB%8A%A5.html

 

Scikit-Learn의 문서 전처리 기능 — 데이터 사이언스 스쿨

.ipynb .pdf to have style consistency -->

datascienceschool.net

 

반응형

댓글