반응형
4.6 TF-IDF로 성능을 높여보자
- TF-IDF: 단어빈도-역문서 빈도
- 카운트 대신 단어의 빈도에 그 단어가 출현한 문서 수의 역수를 곱하는 것
from sklearn.feature_extraction.text import TfidfTransformer
transformer = TfidfTransformer()
transformer
reviews_tfidf = transformer.fit_transform(reviews_cv)
print('#shape of tfidf matrix:', reviews_tfidf.shape) #TF-IDF 행렬의 모양과 카운트 행렬의 모양이 일치하는 것을 확인
#첫 리뷰의 카운트 벡터 중 앞 20개 값 출력
print('#20 count score of the first review:', reviews_cv[0].toarray()[0][:20])
#첫 리뷰의 TF-IDF 벡터 중 앞 20개 값 출력
print('#20 tfidf score of the first review:', reviews_tfidf[0].toarray()[0][:20])
"""
#shape of tfidf matrix: (2000, 1000)
#20 count score of the first review: [6 3 6 3 3 0 2 0 1 0 1 3 2 2 1 0 1 2 3 5]
#20 tfidf score of the first review: [0.13556199 0.06700076 0.14998642 0.0772298 0.08608998 0.
0.0609124 0. 0.03126552 0. 0.03242315 0.09567082
0.06575035 0.06518293 0.03225625 0. 0.0345017 0.06863314
0.10042383 0.16727495]
"""
from sklearn.feature_extraction.text import TfidfVectorizer
tf = TfidfVectorizer(vocabulary=word_features)
reviews_tf = tf.fit_transform(reviews)
source_tf = tf.transform([source]) #코사인 유사도는 카운트 벡터에 대해 계산하므로 벡터로 변환
#transform은 반드시 리스트나 행렬 형태의 입력을 요구하므로 리스트로 만들어서 입력
sim_result_tf = cosine_similarity(source_tf, reviews_tf) #변환된 count vector와 기존 값들과의 similarity 계산
print('#가장 유사한 리뷰의 인덱스:', np.argmax(sim_result_tf[0]))
## #가장 유사한 리뷰의 인덱스: 0
print('#카운트 벡터에 대해 가장 유사한 리뷰부터 정렬한 인덱스:', (-sim_result[0]).argsort()[:10])
print('#TF-IDF 벡터에 대해 가장 유사한 리뷰부터 정렬한 인덱스:', (-sim_result_tf[0]).argsort()[:10])
"""
#카운트 벡터에 대해 가장 유사한 리뷰부터 정렬한 인덱스: [ 0 1110 1570 687 628 112 1712 1393 524 1740]
#TF-IDF 벡터에 대해 가장 유사한 리뷰부터 정렬한 인덱스: [ 0 1110 1393 1570 645 323 1143 628 1676 1391]
"""
※ 해당 내용은 <파이썬 텍스트 마이닝 완벽 가이드>의 내용을 토대로 학습하며 정리한 내용입니다.
반응형
'텍스트 마이닝' 카테고리의 다른 글
BOW 기반의 문서 분류 (2) (0) | 2023.07.01 |
---|---|
BOW 기반의 문서 분류 (1) (0) | 2023.06.30 |
카운트 기반의 문서 표현 (4) (0) | 2023.06.28 |
카운트 기반의 문서 표현 (3) (0) | 2023.06.27 |
카운트 기반의 문서 표현 (2) (0) | 2023.06.26 |