
n-gram Language Models
언어 모델이란, 결국에는 그 다음으로 어떤 단어가 오는 것이 가장 자연스러운지를 확률로 보고 가장 높은 확률의 단어를 선택해서 문장을 구성하는 방식이다. 위 포스트에서는 n…
2025/03/10
Jinsoolve.
Categories
Tags
3월 안에는 꼭...
About
자연어 처리(Natural Language Processing, NLP)의 하위 분야인 감성 분석(sentiment analysis)에 대해서 알아보는 장이다.
영화 리뷰를 읽고 각 리뷰가 긍정인지 부정인지 구별하는 예측기를 구축하자.
모델에 데이터를 주기 전에 모델이 잘 학습할 수 있도록 preprocessing을 해줘야 한다. 다음과 같은 개념을 알고 활용해보자.
BoW 모델을 사용하여 범주형 데이터를 수치로 변경해주겠다.
BoW의 과정은 다음과 같다.
아래의 내용들은 BoW 모델에 대한 지식들이다.
텍스트나 단어 같은 범주형 데이터는 수치 형태로 인코딩해줘야 한다. BoW(Bag-of-Word)를 사용하자.
수로 이루어진 특성 벡터로 나타냄
행: 문서 d, 열: 단어 t -> 값: 문서 d에 단어 t가 몇 개 있는가 = tf(t,d)
즉 tf(t,d)의 행렬을 생성함.
tf-idf(Term Frequency - Inverse Document Frequency)
문서마다 자주 나오는 단어는 중요하지 않을 가능성이 높다. 해당 단어의 가중치를 낮춰주자.
가중치를 낮추는 방법은 아래 처럼 를 곱해주는 것이다.
1을 더해주거나 log를 취해주는 이유는 값을 원하는 범위로 맞추고 싶기 때문이다.
원래는 정규화를 한 후에 idf를 계산해야 하지만 사이킷런의 TfidfTransformer에서는 tf-idf 자체를 L2 정규화한다.
이모티콘을 제외하고 구두점 같은 필요없는 문자를 제거해준다.
여기서는 정규표현식으로 했으나 파이썬의 HTML 파서 모델이 더 다양한 기능을 제공한다.
문서를 토큰 즉, 단어로 나누는 가장 간단한 방법은 공백이지만 너무 대충이라 다른 방법을 찾아보자.
어간 추출 방법인 Porter stemmer 알고리즘을 사용할 수 있다. nlkt라이브러리에 구현되어 있다. 어간은 핵심 단어요소로 running에서 어간은 run이 된다.
어간 추출 알고리즘은 초기 알고리즘인 Porter 말고도 발전된 Snowball, Lancaster 등이 있다.
다만 어간 추출은 약간의 오류가 있는데, thus -> thu를 추출하는 경우가 그러하다. 이러한 오류를 없애고 정확하게 추출하는 알고리즘을 표제어 추출이라고 하는데 이는 계산이 어렵고 비용이 많이 든다.
실전에서는 어간추출과 표제어추출의 성능 차이가 크지 않기 때문에 어간추출을 많이 사용한다. (한글은 조사와 어미가 발달되어 있어 표제어 추출방식이 적합하다)
문장의 구조에 중요한 역할을 하지만 의미는 크지 않는 불용어(stop-word)를 제거할 때가 있다. 예시로는 is, and, has, like가 있다. 이미 tf-idf를 통해 가중치 값이 많이 낮았지만 이를 미리 제공된 불용어 리스트를 적용시켜 해결한다.
데이터 전처리를 끝냈으니, 이제 모델링을 해보자.
이제 전처리(빈도 수 가중치 조절, 텍스트 정제, 토큰 나누기 등)을 마쳤으니 로지스틱 회귀 모델에 넣어 훈련시키자.
(각 단어의 값) -> (주로 긍정/부정 결과이더라)
NLP는 계산비용이 많고 그로 인한 하드웨어적 한계를 극복하기 위해 외부 메모리 학습(out-of-core learning)을 사용한다.
외부 메모리 학습은 작은 일괄(batch)로 분할아여 메모리에 한 번에 가져오지 않고 순차적으로 학습 시키는 과정이다.
데이터를 한 번에 가져오지 않는 만큼 tf-idf를 사용하기 위한 CountVectorizer와 TfidVectorizer를 사용할 수 없다.
대신 해시 함수를 사용하기 때문에 어휘사전이 필요 없는 HashingVectorizer를 사용한다.
모델은 확률적 경사 하강법(Stochastic Gradient Descent)를 사용한 SGDClassifier를 이용하여 데이터를 학습시켰다.
model1: 전체 데이터, GridSearch, Logistic 모델
model2: batch 데이터, SGD 모델
model1이 model2보다 계산 비용이 훨씬 높음에도 불구하고 성능 차이는 얼마나지 않는다.
online learning은 실시간으로 데이터를 작은 단위로 받아서 학습시키는 것이고
mini-batch learning은 데이터를 미니 배치로 나눠서 각 미니 배치에 대한 손실을 계산하고 이를 기반으로 가중치를 업데이트한다.
online learning보다 mini-batch가 조금 더 오래 걸리지만 성능이 좋은 걸로 알고 있다.
BoW모델을 대체할 수 있는 word2vec 모델도 있다.
word2vec은 신경망을 기반으로 한 비지도 학습 알고리즘으로 단어들간의 관계를 학습한 기법이다.
비지도 데이터에 대해서 사용한다.
예를 들면, 뉴스 기사를 읽고 스포츠, 금융, 세계 뉴스, 정치 등으로 토픽을 분류하는 작업을 말한다.
인기 있는 토픽 분류 모델링 기법인 잠재 디리클레 할당(Latent Dirichlet Allocation, LDA)를 소개하겠다.
LDA는 BoW 행렬을 문서-토픽 행력과 단어-토픽 행렬으로 분리한다. 유일한 단점은 미리 토픽 개수를 정해야 한다는 것이다.
사이킷런에 구현된 LDA를 사용하면 토픽을 구별해낼 수 있다.
언어 모델이란, 결국에는 그 다음으로 어떤 단어가 오는 것이 가장 자연스러운지를 확률로 보고 가장 높은 확률의 단어를 선택해서 문장을 구성하는 방식이다. 위 포스트에서는 n…
2025/03/10
선형 회귀 모델에 대해 알아보자. 보스턴 집 가격 예측 문제를 예시로 들어서 설명하겠다.
2025/01/09
레이블이 없는 데이터들을 분석하여 비슷한 데이터들끼리 그룹으로 묶을 것이다.이를 군집으로 묶는다하여 클러스터링(clustering)이라 한다. - k-평균 알고리즘을 이용하여 클러스터 중심 찾기- 상향식 방법으로 계층적 군집 트리 만들기- 밀집도 기반의 군집 알고리즘을 사용하여 임의 모야을 가진 대상 구분하기
2025/01/09
딥러닝은 인공 신경망을 효과적으로 학습시키기 위한 머신러닝의 하위분야이다. 아래 내용을 소개하겠다.- 다층 신경망 개념- 역전파 알고리즘- 이미지 분류를 위한 다층 신경망 훈련
2025/01/09