-
[Deep Learning] Bag-of-Words(BoW) - CountVectorizer, TF-IDF VectorizerData Science/Machine Learning & Deep Learning 2021. 4. 18. 23:36
머신러닝 모델에 텍스트를 이용하기 위해서는 텍스트를 토큰화한 것을 컴퓨터가 이해할 수 있도록 벡터화 해주어야 합니다.
벡터화 방법 중 BoW( Bag of Words )는 단어의 존재 여부와 그 빈도 정보만을 고려해 벡터화하는 모델입니다.
CountVectorizer
- 단어의 출현 빈도로 여러 문서를 벡터화하는 방법
- 행에 문서, 열에 토큰, 그 값(value)으로 문서에서 토큰의 출현 횟수
- 모든 문자를 소문자로 전환하여 계산
from sklearn.feature_extraction.text import CountVectorizer # Count vectorizer. vect = CountVectorizer(stop_words = 'english', max_features = 20) # fit & transform dtm_vect = vect.fit_transform(df['v2']) dtm = pd.DataFrame(dtm_vect.todense(), columns=vect.get_feature_names()) dtm.head()
TF-IDF Vectorizer
- 다른 문서에 많이 등장하지 않고, 특정 문서에만 등장하는 단어에 가중치를 두고 벡터화하는 방법
- TF(Term Frequency) : 문서에 단어가 등장하는 빈도, 특정 문서에 많이 등장하는 단어를 중요하다고 판단
- IDF(Inverse Document Frequency) : 다른 여러 문서에도 많이 등장하는 단어는 자주 사용 되어 덜 중요하다고 판단
- IDF = log( 총 문서의 개수 / 단어가 출현한 문서의 개수 )
- TF * IDF score : 값 낮으면 중요도 낮은 단어, 값 높으면 중요도 높은 단어로 판단
- 단어별 문장의 연관성을 수치로 나타낸 것
from sklearn.feature_extraction.text import TfidfVectorizer # TF-IDF vectorizer. tfidf = TfidfVectorizer(stop_words='english', max_features=20) # fit & transform # 문서, 단어마다 tf-idf 값 계산 dtm = tfidf.fit_transform(df['v2']) dtm = pd.DataFrame(dtm.todense(), columns=tfidf.get_feature_names()) dtm.head()
< 사용 데이터 >
www.kaggle.com/uciml/sms-spam-collection-dataset
SMS Spam Collection Dataset
Collection of SMS messages tagged as spam or legitimate
www.kaggle.com
'Data Science > Machine Learning & Deep Learning' 카테고리의 다른 글
[Deep Learning] NLP - 어간추출(stemming) & 표제어추출(lemmatization) (0) 2021.04.16 [Deep Learning] NLP - 통계적 트리밍(Trimming) (0) 2021.04.15 [Deep Learning] NLP - 불용어 ( Stop Words ) 처리 (0) 2021.04.15 [Deep Learning] NLP - 텍스트 토큰화 ( Tokenization ) (0) 2021.04.13 [Deep Learning] 손실함수(Loss Function) (0) 2021.04.13