one-hot 인코딩 : 배열이 너무 길어지고 효율성이 떨어져서 임베딩 기법 사용
1. 빈도 벡터화
단어를 의미하는 단어 벡터가 아닌, 하나의 문장을 의미
sklearn에서 제공하는 counvectorizer 객체 사용
from sklearn.feature_extraction.text import CountVectorizer
import pandas as pd
df = pd.read_csv('./data/sentence2_tag.csv').dropna()
## max_df : 해당 확률 이상으로 빈도가 많은 토큰을 제외
#내가 설정한 빈도 이상으로 등장하는 토큰 제외
## min_df: 해당 확률 이하로 빈도가 적은 토큰을 제외
#내가 설정한 빈도 이하로 등장하는 토큰 제외
cvec = CountVectorizer(max_df=0.9, min_df=10) #인스턴스 가져옴
cvec.fit(df['text_tag']) # 토큰생성 (띄어쓰기 기반) / fit시켜줌
#여기 들어가는 df[]구조는 문장단위로 문장이 여러개 들어있는 리스트가 들어가야 함
#문장 하나가 벡터로 변환됨
names = cvec.vocabulary_ # vocabulary 변수에 접근하여 토큰셋 확인
print(len(names))
print(names)
결과) 1891개의 토큰이 나옴
X = cvec.transform(df.loc[:100,'text_tag']) # 인코딩
x = X.toarray()
#toarray로 만들어서 넣어줌
x.shape
(101, 1891)
# (샘플갯수(문장갯수), 총 단어의 갯수(벡터의 수, 즉 토큰갯수))
import numpy as np
np.sum(x, axis = 0)[812]
배열에서 sum함수를 이용해서 쭉 더해줌
→ 내가 가지고있는 토큰에 대한 전체 빈도수를 알 수 있음
자주 등장하는 키워들은 높은 숫자가 나옴
특정 키워드
names['선물']
812
선물은 812가 키값임을 알수 있음
선물의 인덱스 가져옴
import numpy as np
np.sum(x, axis = 0)[812]
16
총 16번 나옴
2. TF-IDF 벡터화
특정토큰(단어)의 중요도를 나타내는 수치
1에 가까울수록 중요
TF(단어빈도) X IDF(역문서빈도)
from sklearn.feature_extraction.text import TfidfVectorizer #tfid
tfvec = TfidfVectorizer(max_df=0.9, min_df=10)
tfvec.fit(df['text_tag']) # fit함수로 텍스트 뭉치 넣어줌 /토큰생성 (띄어쓰기 기반)
names = tfvec.vocabulary_ # 토큰셋 확인
print(len(names))
print(names)
X = tfvec.transform(df.loc[:5,'text_tag']) # 인코딩
x = X.toarray()
print(x.shape)
print(x[0])
x[3,812]
0.20958416714400754
import pandas as pd
store_df = pd.read_csv('./data/sentence2_test.csv')
store_df
'데이터 분석 > 키워드 분석' 카테고리의 다른 글
[이론] 텍스트 시각화 - 워드 클라우드 (1) | 2025.01.22 |
---|---|
[이론] 텍스트 시각화 - 빈도 & TF-IDF 그래프 (1) | 2025.01.22 |
[이론] 바이트페어 변환 (2) | 2025.01.21 |
[이론] 형태소 분석 (2) | 2025.01.21 |
[이론] 텍스트 클렌징 (3) | 2025.01.21 |