자연어 처리에서 특징 추출이란 텍스트 데이터에서 단어나 문장들을 어떤 특징 값으로 바꿔주는 것을 의미한다. 기존에 문자로 구성돼 있던 데이터를 모델에 적용할 수 있도록 특징을 뽑아 어떤 값으로 바꿔서 수치화한다. 텍스트 데이터를 다루는 기법에 대해 알아본다.
세 방법 모두 텍스트를 벡터로 만드는 방법이다.
- CountVectorizer : 단순히 각 텍스트에서 횟수를 기준으로 특징을 추출하는 방법
- TfidVectorizer : TF-IDF 방법으로 텍스트에서 특징을 추출한다.
- HashingVectorizer : 해시 함수를 이용한 텍스트 처리로 실행 시간의 감소
CountVectorizer
단어나 문자의 횟수를 기준으로 특징을 추출한다. 사이킷런의 모듈을 사용해 구현
from sklearn.feature_exraction.text import CountVectorizer
직접 생성한 데이터를 정의해 사용, CountVectorizer 객체 생성
text_data = ['나는 배가 고프다', '내일 점심 뭐먹지','내일 공부 해야겠다','점식 먹고 공부해야지']
count_vectorizer = CountVectorizer()
단어 사전을 만들기 위해 생성한 객체에 fit 함수를 사용해 덱이터를 적용
count_vectorizer.fit(text_data)
print(count_vectorizer.vocabulary_)
>>>
{'나는': 3, '배가': 7, '고프다': 0, '내일': 4, '점심': 9, '뭐먹지': 6, '공부': 1, '해야겠다': 10, '점식': 8, '먹고': 5, '공부해야지': 2}
이제 텍스트 데이터를 실제로 벡터로 만든다. 정의한 텍스트 데이터 중에서 하나를 선택
sentence = [text_data[0]]
print(count_vectorizer.transform(sentence).toarray())
>>>
[[1 0 0 1 0 0 0 1 0 0 0]]
간단하게 텍스트 데이터에서 특징을 추출할 수 있다. 하지만 단순히 횟수만을 특징으로 잡기 때문에 유의미하게 사용하기 어려울 수 있다. 이를 해결하기 위한 TF-IDF 방식의 특징 추출
TfidfVectorizer
TF-IDF 라는 특정한 값을 사용해 텍스트 데이터의 특징을 추출하는 방법이다. TF(Term Frequency) 란 특정 단어 하나의 데이터 안에서 등장하는 횟수를 의미한다. DF(Document Frequency)는 문서 빈도 값으로, 특정 단어가 여러 데이터에 자주 등장하는지를 알려주는 지표다. IDF(Inverse Document Frequency)는 이 값에 역수를 취한 값으로 특정 단어가 다른 데이터에 등장하지 않을수록 값이 커진다.
TF-IDF란 이 두 값을 곱해서 사용하므로 어떤 단어가 해당 문서에 자주 등장하지만 다른 문서에는 없는 단어일수록 높은 값을 가지게 된다. 따라서 조사나 지시대명사처럼 자주 등장하는 단어는 TF 값은 크지만 IDF 값은 작아지므로 이러한 문제점을 해결할 수 있다.
결괏값으로 각 단어의 TF-IDF 값이 나온다.
from sklearn.feature_extraction.text import TfidfVectorizer
tfidf_vectorizer = TfidfVectorizer()
tfidf_vectorizer.fit(text_data)
print(tfidf_vectorizer.vocabulary_)
>>>
{'나는': 3, '배가': 7, '고프다': 0, '내일': 4, '점심': 9, '뭐먹지': 6, '공부': 1, '해야겠다': 10, '점식': 8, '먹고': 5, '공부해야지': 2}
sentence = [text_data[3]]
print(tfidf_vectorizer.transform(text_data).toarray())
>>>
[[0.57735027 0. 0. 0.57735027 0. 0.
0. 0.57735027 0. 0. 0. ]
[0. 0. 0. 0. 0.48693426 0.
0.61761437 0. 0. 0.61761437 0. ]
[0. 0.61761437 0. 0. 0.48693426 0.
0. 0. 0. 0. 0.61761437]
[0. 0. 0.57735027 0. 0. 0.57735027
0. 0. 0.57735027 0. 0. ]]
이처럼 특징 추출 방법으로 TF-IDF 값을 사용할 경우 각 단어의 특성을 좀 더 잘 반영할 수 있다.
'책 > 자연어 처리' 카테고리의 다른 글
텍스트 유사도 (0) | 2022.10.15 |
---|---|
자연어 처리 개요 (0) | 2022.10.14 |
텐서플로 모델 구현 (0) | 2022.10.14 |