본문 바로가기
멋쟁이사자처럼 AI School 8기(fin)/TIL(Today I Learn)

[멋쟁이사자처럼 AI스쿨] TIL(23.3.28) 텍스트 분석, 자연어처리2

by #FF0000 2023. 3. 28.

 

0802 실습

단어-벡터화 결과를 모델로 예측하기

- ‘코로나’라는 단어가 들어가는 문장을 보건으로, 나머지를 교통으로 분류

- sklearn의 featureselection.text의 CountVectorizer 사용하여 df[‘문서’]를 벡터화

- CountVectorizer는 bow(bag of words)라는 벡터화 기법. 단어의 출현빈도만 고려하고 순서는 무시하여 의미를 잃을 수 있다는 단점이 있음.

- DecisionTreeClassifier로 분류하고, 다양한 시각화를 진행함

 

 

0803 실습

KoNLPy 형태소 분석기를 사용해 조사, 어미, 구두점을 제거하고, 모델로 분류하기

- 정규표현식 사용해 한글, 영문, 숫자만 남기고 제거하기

- Okt 클래스를 이용해 형태소 분석하기


morphs → 구문을 형태소로 구문 분석.


nouns → 명사 추출


Pos → 품사 태깅 


norm=True 옵션 → 토큰 정규화 (되나욬 → 되나요)


stem=True 옵션 → 어간 추출 (되나욬 → 되다)

- Kkma class 이용하여 형태소 분석하기
 Okt와 동일하게 morphs, nouns, pos
품사 기준 -> (https://docs.google.com/spreadsheets/d/1OGAjUvalBuX-oZvZ-9tEfYD2gQe7hTGsgUpiiBSXI8/edit#gid=0)

- 어간 추출하기 okt_pos를 이용해 (형태소, 품사)형태의 튜플이 들어간 리스트를 생성하여 조사, 어미, 구두점을 제거하는 함수를 만들어보았습니다!

 

 

0804 실습

차원축소

차원 축소 → 차원의 저주 문제를 해결, 고차원 데이터를 시각화

- PCA 주성분 분석


고차원 데이터 → 저차원 데이터로 환원
데이터 정보의 손실을 최소화

- SVD 특잇값 분해


희소한 행렬에 대해서 주성분을 분석할 수 있음
텍스트 데이터는 희소한 행렬이기 때문에 TruncatedSVD를 사용

 

 

 

 

KoNLPy : Java, C, C++ 등으로 만들어진 형태소 분석 도구, 파이썬에서 사용할 수 있게 해주는 도구.

 

 

 

 

고유벡터(固有vector, 영어: eigenvector 아이건벡터[*])

> 선형대수학에서, 선형 변환이 일어난 후에도 방향이 변하지 않는, 0이 아닌 벡터

 

고윳값(固有값, 영어: eigenvalue 아이건밸류[*])

> 고유 벡터의 길이가 변하는 배수를 선형 변환의 그 고유 벡터에 대응하는 고윳값이라고 한다. 

> 선형 변환은 대개 고유 벡터와 그 고윳값만으로 완전히 설명할 수 있다.

 

 

PCA(Principal component analysis)

고차원 → 저차원으로 환원 데이터의 정보(변동)의 손실을 최소화하면서 2 ~ 3개의 새로운 수치형 변수로 만드는 기법

1) 차원의 저주 해결 - 차원 축소

2) 다중공선성 문제 해결

-> "변수가 너무 많을 때" "데이터(자료) 축약이 필요한 경우", "다중 공선성이 발생할 때", 해결 방안으로 사용

 

 

PCA(주성분 분석) : 희소한 행렬 지원하지 않음

> 0이 많은 희소한 행렬은 SVD사용(특이값 분해)

> 어떤 각도에서 데이터를 바라보고 압축하느냐에 따라 결과가 달라짐.  n_component 파라미터를 이용

 

 

특잇값 분해 SVD(singular value decomposition)

특잇값 분해(Singular Value Decomposition, SVD)는 행렬을 특정한 구조로 분해하는 방식으로, 신호 처리와 통계학 등의 분야에서 자주 사용된다.

특잇값 분해는 행렬의 스펙트럼 이론을 임의의 직사각행렬에 대해 일반화한 것으로 볼 수 있다. 스펙트럼 이론을 이용하면 직교 정사각행렬을 고윳값을 기저로 하여 대각행렬로 분해할 수 있다.

실수나 복소수로 이루어진 체 K의 원소로 구성되는 m × n 행렬 M에 대해, M은 세 행렬의 곱으로 분해할 수 있다.

행렬 M을 이와 같은 세 행렬의 곱으로 나타내는 것을 M의 특잇값 분해라고 한다.

또한 u와 v를 각각 좌측 특이벡터와 우측 특이벡터라 부른다.

 

 

 

TruncatedSVD (LSA 잠재 의미 분석)

> 희소 행렬을 효율적으로 처리

 

 

 

SVD => 이미지, 텍스트 압축 및 토픽모델링(LDA)

PCA => 피처가 많을 때 예를 들어 제조업 데이터

tSNE => 데이터 시각화 할 때 다차원 데이터를 2차원으로 표현하고자 할 때