본문 바로가기

SeSAC 금융데이터 분석가/자연어 처리

10/27 목

728x90

1. SoyNLP

지난번 배웠던 koNLPy의 형태소분석기로 토큰화가 잘 되지 않는 신조어를 

응집 확률(cohesion probability)과 브랜칭 엔트로피(branching entropy)를 기반으로 

단어에 점수를 부여해서 토큰화를 할 수 있도록 지원하는 SoyNLP 패키지를 배웠다!

강사님이 진행하신 코드와 거의 유사하고, 기법과 용어에 대한 설명이 자세하게 나온 페이지가 있어, 역시 참고하였다.

 

- 응집 확률(cohesion probability)

: 왼쪽부터 순서대로 문자를 추가하면서 각 문자열이 주어졌을 때 그다음 문자가 나올 확률을 계산하여 누적곱을 한 값. 값이 높을수록 해당 문자열 시퀀스가 하나의 단어로 등장할 가능성이 높아짐

 

- 브랜칭 엔트로피(branching entropy)
: 만약 하나의 단어를 중간에서 끊으면 다음에 나올 글자는 쉽게 예측이 가능하다. 즉, 여러 가지 글자 중 특정한 하나의 글자가 확률이 높다. 따라서 엔트로피 값이 0에 가까운 값으로 작아진다.

 

- Accessor Variety
: 특정 문자열 다음에 나올 수 있는 글자의 종류만 계산한다. 글자의 종류가 많다면 엔트로피가 높아질 것이라고 추정할 수 있다.

 

- L-tokenizer
: 한국어의 경우 공백(띄어쓰기)으로 분리된 하나의 문자열은 ‘L 토큰 + R 토큰' 구조인 경우가 많다. 왼쪽에 오는 L 토큰은 체언(명사, 대명사)이나 동사, 형용사 등이고 오른쪽에 오는 R 토큰은 조사, 동사, 형용사 등이다. 여러 가지 길이의 L 토큰의 점수를 비교하여 가장 점수가 높은 L단어를 찾는다.

 

- 최대 점수 토큰화(max score tokenizing)

: 띄어쓰기가 되어 있지 않는 긴 문자열에서 가능한 모든 종류의 부분 문자열을 만들어서 가장 점수가 높은 것을 하나의 토큰으로 정한다.

 

출처

 

cf. 그 외 한국어 전처리를 위한 패키지들: PyKoSpacing(띄어쓰기 교정), Py-Hanspell(맞춤법 교정)

 

2. 다양한 단어 표현 방법

국소 표현 방법(Local Representation)_Count Based_

2-1. Bag of Words(BoW)

1) 각 단어에 고유한 정수 인덱스르 부여함(단어 집합 생성)

2) 각 인덱스의 위치에 단어 토큰의 등장 횟수를 기록한 벡터를 만듦

from sklearn.feature_extraction.text import CountVectorizer

 

2-2. 단어문서행렬(Document-Term Matrix, DTM = Term Document Matirx, TDM)

비정형 데이터인 텍스트를 표 형태로 정형화하여 다양한 통계 기법 적용 가능하고, 처리가 단순하지만
어순과 맥락을 무시하는 것이 단점

 

- 희소 행렬(sparse matrix)

단어 문서 행렬에서 대부분의 값은 0. 용량을 아끼기 위해 0을 빼고 저장하는 압축을 사용

 

- 희소 행렬 압축 방식

1) Coordinate list

: 0이 아닌 값을 (행, 열, 값) 형식으로 저장

2) Compressed Sparse Row

: 값, 열 번호, 행(값에서 각 행의 시작과 끝 인덱스르 저장하여 행 번호를 압축)을 별로도 저장. 빈 행이 없고, 한 행에 여러 개의 값이 들어갈 경우 압축 효율이 높음. 행렬의 한 행의 값을 빠르게 뽑을 수 있음. 사이킷런에서 단어 문서 행렬을 만들 때 사용.

 

행은 Non-zero 값의 위치를 차례대로 저장한 벡터에서 새로운 행이 시작하는 위치가 몇 번째인지를 넣은 정보이므로, 각 값에 대한 위치(행, 열 좌표)를 먼저 그리면 쉽게 이해할 수 있음. 각 행에 몇 개의 값이 들어 있는지는 인접한 원소들을 서로 빼면 구할 수 있음.

 

2-3. TF-IDF(Term Frequency-Inverse Document Frequency)

단어 빈도에 적절한 가중치(TF와 IDF를 곱한 값)를 줌으로써 특정 단어가 무의미하게 반복되는 것을 보정함.

상대적으로 적은 문서에 나오면서 특정 문서에 자주 나온 단어에 가중치 줌.

 

- TF: 단어(Term)가 등장한 횟수(Frequency). 각 단어가 등장한 문서의 수. 단어 빈도


- IDF: 특정 단어가 등장한 문서(Document)의 빈도(Frequency)의 역수(Inverse). 총 문서 수를 df로 나눈 값. 역문서 빈도

 

여러 문서에 자주 나오면 문서빈도(df) 상승, 역문서빈도(idf) 하락.

문서 간이 차이가 중요한 상황에서는 idf가 높은 단어가 좋은 단어.

from sklearn.feature_extraction.text import TfidfVectorizer

 

3. 단어구름(Wordcloud)

 

4. 텍스트 전처리

728x90

'SeSAC 금융데이터 분석가 > 자연어 처리' 카테고리의 다른 글

11/2 수  (0) 2022.11.10
10/28 금  (0) 2022.11.01