주어진 단어가 해당 문서에서 얼마나 중요한가?
- 단어 중요도 표현 방법
- 단어 모음
- N그램 모음
- TF-IDF 벡터
2-1. 단어 모음
- 단어 빈도
- 가정 : 많이 나오는 단어가 중요할 것이다.
from collection import Counter
bag_of_words = Counter(tokens)
bag_of_words.most_common(10) #빈도순 나열
2. 벡터화
- 기준이 필요
- 정규화된 용어 빈도 필요
- 공통 공간안의 위치 고려
- 벡터의 길이 차원 표준화
- 공통 공간을 위한 어휘집, 어휘사전 필요
- 차원을 줄여야 유사도로 비교가 가능함
- 두 문서의 벡터 표현들이 비슷하면 두 문서는 비슷
- 코사인 유사도 (유클리드 내적 공식에서 유도) -1~+1 범위
- 내적을 두 벡터의 길이에 맞게 정규화
- 1 : 모든 차원에서 완전히 같은 방향
- 0 : 두 벡터의 공통점이 없음
3. 지프의 법칙
- 수학적 통계를 바탕으로 밝혀진 경험적 법칙으로 많은 종류의 종보들이
지프 분포에 가까운 경향을 보이는 것을 말함 (지수적으로 감소하는 형태)\
4. 주제의 모형화
- 상대적 중요도 파악
- TF-IDF
- 가정 : 어떤 용어가 한 문서에서만 자주 등장하고 다른 문서에서는 잘 나오지 않는다면,
그 문서에서 그 단어는 중요한 단어일 것임 - 유사도 파악 : 코사인 유사도 / Okapi BM25
- Okapi BM25 : 코사인 유사도 정규화 /평활화
- 가정 : 어떤 용어가 한 문서에서만 자주 등장하고 다른 문서에서는 잘 나오지 않는다면,
from sklearn.feature_extraction.text import TfidfVectorizer
# 토큰화
title_list = df[df['포스트분류']=='원글']['제목'].tolist()
title_vec = []
for i in tqdm.tqdm(title_list):
title_vec.append(" ".join(kkma.nouns(i)))
# tf-idf
vectorizer = TfidfVectorizer(min_df=1)
model = vectorizer.fit_transform(title_vec)
word_list = [i[0] for i in sorted(vectorizer.vocabulary_.items())]
pd.DataFrame(model.toarray(), columns = [word_list])
# cosin 유사도 확인 및 시각화
from sklearn.metrics.pairwise import cosine_similarity
import matplotlib.pyplot as plt
import seaborn as sns
tmp = pd.DataFrame(cosine_similarity(model.toarray()))
plt.figure(figsize=(10,10))
sns.heatmap(tmp) #annot=True, fmt='f'
plt.show();
Source : 파이썬으로 배우는 자연어 처리 인 액션
'* [R_Python] 데이터분석 정리 > [Python] 텍스트마이닝' 카테고리의 다른 글
워드 투 벡터 (Word2Vec) (0) | 2023.02.28 |
---|---|
[자연어처리] 2. 감정 분석 (0) | 2022.12.06 |
[자연어처리] 1. 단어 토큰화 (0) | 2022.12.05 |