- bag of words and Tf-idf2024년 10월 01일
- SiJun-Park
- 작성자
- 2024.10.01.:58
bag of words는 가장 간단하지만 효과적이면서 널리 쓰이는 방법이다.
이 방법은 구조와 상관없이 단어의 출현 횟수만 세는 텍스트를 담는 가방이여서 간단하지만. 단어의 순서가 완전히 무시된다는 큰 단점이 존재한다.
하지만 Tf-idf방법은 말뭉치의 다른 문서보다 특정 문서에 자주 나타나는 단어에 높은 가중치를 주는 방법이다.
이번에는 영화 리뷰 감성 분석의 텍스트를 다루는 실습을 하는데 이때 의미 없는 단어나 너무
빈번하게 사용되어 유용하지 않은 단어를 제외하는 불용어 처리를 해준다.
이떄 차원이 높아 차원을 축소하는 차원축소 방법을 사용한다.
이때는 관련성이 낮고 중복되거나 불필요한 정보를 담은 차원을 버리고 중요한 차원만 선택하는 것은 특징 선택이라고 하며, 원래 특징값을 변형하여 새로운 특징값을 생성해 차원을 축소하는 방법이 존재한다.
정리를 하면 영화 리뷰 감성 분석의 텍스트를 이용하여 불용어를 제거하고 차원을 축소한 뒤 bag of words와 tf-idf의 차이를 확인하는 실습을 진행한다.
가장 먼저 리뷰의 train과 test의 파일을 로드를 하여 줍니다.
그 다음 텍스트를 읽어보면 등 여러가지 쓸모없는게 존재를 하니 삭제를 해줍니다
불용어를 제거하기 위하여 ENGLSISH_STOP_WRODS를 import해주고, CountVectorizer를 명시된 대로 파라메터를 넣어주고 학습을 시켜 줍니다.
min_df는 단어장에 포함 되기 위한 다큐먼트 수의 최소빈도/ 비율이고, stop_words는 영어용 stop
word가 사용이 된다.
차원 축소를 위해 고차원인 array를 2차원으로 A와 B를 줄여줍니다.
1-nearest neighbor classifier를 하기 위해 k값을 1로하여 학습을 시켜줍니다.
여기 까지가 bag of words를 구현을 하였고, 그 다음에는 Tfidvectorizer입니다.
Bag of words랑 동일하게 작성을 해주고 정규화를 L2 정규화를 시켜 주고 학습을 시켜줍니다.
똑같이 2차원으로 차원을 축소 시켜줍니다.
1-nearest neighbor classifier를 하기 위해 k값을 1로하여 학습을 시켜 주었습니다.
결과
Bag of words는 51.13%, tf-idf는 53.2%로 tf-idf가 bag of words보다 더 정확도가 높았습니다.
그 이유를 생각을 해보니 bag of words는 단어의 순서가 완전히 무시된다는 큰 단점이 있다는 것이
생각이 났습니다.
Tf-idf는 BOW 특성 추출과 tf-idf 변환을 수행을 하기 때문에, 즉 자주 나타나는 단어에 높은 가중치를 주고 L2 정규화를 하였기 때문에 BOW 방법보다는 조금 더 높은 정확도가 나올 것이라고 생각을 합니다.
만약에 ti-idf 파라메타를 다르게 바꾸면 어떻게 될까 궁금해서 추가를 해보았습니다.
Stop_words와 l2를 넣어줬을 경우
결과는 약 57%가 나왔습니다.
BOW와 같이 Min_df를 5까지 추가를 한 후
약 57.1%가 나왔습니다.
다음글이전글이전 글이 없습니다.댓글