[AI스쿨 7기, 13주차] BOW, 문서단어행렬, TF-IDF, CountVectorizer, max_features, 불용어, 감성분류, 142가지 데이터셋, 자연어 책 추천, 워드 클라우드

hyemin·2022년 12월 13일

멋쟁이사자처럼

목록 보기
46/51

221213 멋쟁이 사자처럼 AI스쿨 7기, 박조은 강사님 강의

✅ 복습

BOW

원핫인코딩을 텍스트 데이터에 적용하면 BOW 가 된다.
순서는 고려하지 않고, 단어들의 출현 빈도에만 집중.
의미가 반대인 문장이 토큰화되면 같은 의미가 될 수 있다.
이것을 보완하기 위해 N-gram 사용

문서 단어 행렬

fit_transform() 하면 문서 단어 행렬을 반환
단어들의 빈도를 행렬로 표현한 것.
각 문서에 대한 BOW 를 하나의 행렬로 만든 것

max_df : 불용어 제거
min_df : 희소한 단어 제거

TF-IDF

  • Term Frequency
    • 특정 단어가 문서 내에 얼마나 자주 등장하는지
  • DF
    • 특정 단어가 등장한 문서의 수(cf. corpus 문장 한 줄, 한 줄)
  • IDF
    • 역문서 빈도. DF 역수, DF에 반비례
  • TF-IDF
    • TF와 IDF 를 곱한 값
    • 자주 등장하는 단어는 중요도가 낮다.
    • 특정 문서에서만 자주 등장하는 단어는 중요도가 높다.
    • 중요한 단어에 가중치를 더 주는 것
    • 등장하는 내용이 추천 시스템과 연결되기도 한다.
    • ex. 아이를 키워서 기저귀를 많이 산다.(기저귀에 가중치)

전처리 기능

feature_extraction.text.CountVectorizer()
feature_extraction.text.TfidTransformer()
feature_extraction.text.TfidVectorizer() : 위의 두 개를 합쳐서 사용

❓ 왜 fit은 train 에만 해줄까? 어떤 대회는 test를 함께 fit 하는 것을 금지하고 있기도 하다.
◾ 현실 데이터는 알 수 없기 때문에
◾ 기준을 train 으로 해주어야 test 도 같은 방법으로 전처리 할 수 있다. train, test 각각 fit을 하게 되면 다른 기준으로 전처리 하게 된다.
◾ 텍스트 데이터를 각각 fit 하게 되면 다른 단어사전으로 전처리 되어 기준이 다르게 된다.

CountVectorizer

token_pattern : 띄어쓰기 기준이 아니라, 정규 표현식으로 컴마나 다양한 방법으로 구분할 수 있다.
analyzer : word, char, char_wb 지정 가능
max_features : 단어를 무한정 만드는 것이 아니라 어디까지 만들것인지

TfidfTransformer

카운트 행렬을(count vertorizer) 정규화된 tf 또는 tf-idf 표현으로 변환

max_features

이미지를 다룰 때는 돈을 쓰지 않고 모델을 내 컴퓨터에서 돌리기 위해 이미지 사이즈, 레이어 개수 등을 조정했다. 텍스트 데이터에서 내 컴퓨터가 힘들어 한다면 여러 방법을 사용할 수 있는데 가장 간단한 방법이 max_features 를 작게 조정하는 것.
비지도학습의 차원축소를 사용하게 되면 데이터를 압축해서 사용할 수도 있다. 그런데 차원축소 과정에서도 메모리 오류가 발생할 수도 있는데 그럴 때 max_features 를 내 컴퓨터가 계산할 사이즈로 적당하게 조정해 주면 로컬 PC로도 어느정도 돌려볼 수 있다. 여기에서 조금 더 조정한다면 min_df, max_df, stop_words 등을 조정해볼 수 있다.

불용어

영어나 많이 사용되는 언어는 불용어가 NLTK, Spacy 와 같은 도구에서 목록을 제공하고 있지만 한국어는 제공하지 않는다.
한국어 전처리 도구에도 띄어쓰기, 맞춤법 검사 등의 다양한 API 가 있다.

✅ 1102 실습파일

  • 이미지 : MNIST, FMNIST, cifar10
  • 텍스트 : IMDB, 영화리뷰 데이터셋, 네이버 영화리뷰 데이터셋

📌 네이버 영화리뷰 감성 분류 : https://wikidocs.net/44249
📌 AI, 빅데이터 활용이 쉬워지는 142가지 데이터셋 https://needleworm.github.io/dataset/
📚 딥러닝을 이용한 자연어 처리 입문https://wikidocs.net/book/2155

  • 전처리 병합
    train['topic_idx'].values
    ordinal encoding 이 되어 있다.

  • concat, merge

  • 문자길이 : 파생변수 만들기

  • 문장길이 displot, heatmap 으로 너무 긴 문장은 없는지 확인

  • 정규표현식

    • [ ]문자 클래스
    • [^ ] 부정
    • ^ 처음
  • 불용어 제거

워드클라우드

❓ 워드클라우드를 개발한 안드레아스 뮐러가 주로 참여한 프로젝트는 무엇이 있을까요?
◾ 사이킷런

❓ plt.imshow() 어디에서 사용했을까요?
◾ CNN

❓ df['title']을 하나의 문장으로 어떻게 만들까?
◾ .join(df['title'])

퀴즈

9/ 10문제

KLUE 데이터 셋에 'title'컬럼 데이터를 공백을 기준으로 나누어 'word_count'라는 단어 길이에 대한 파생변수를 만들고자 합니다. 그렇다면 다음 밑줄에 들어갈 코드로 알맞은 것을 골라주세요.
klue['word_count'] = klue['title'].apply(lambda x : len(x.split())

  • apply, lambda, split

다음 정규표현식의 의미가 잘못된 것을 골라주세요.

  • df["내용"].str.replace("[^ㄱ-ㅎㅏ-ㅣ가-힣 ]", "", regex=True) : "내용"의 데이터에서 한글과 공백인 것만 제외 => 한글과 공백만 남기고 제외

max_df

  • 문서 빈도가 주어진 임계값보다 높은 용어는 무시, 불용어 처리에 효과적

ngram_range

  • ngram_range의 기본값은 (1, 1)입니다.

다음 중 scikit-learn의 feature_extraction의 CountVectorizer의 파라미터 중 max_features에 대한 설명으로 옳지 않은 것을 선택해주세요.

  • 벡터의 shape가 (3, 15)인 데이터를 max_features=10으로 적용후 벡터의 shape를 확인하면 ( 10, 15 )으로 나타난다.
    -> 벡터의 shape가 (3, 15)인 데이터를 max_features=10으로 적용후 벡터의 shape를 확인하면 (3, 10)으로 나타납니다.
    처음 벡터의 shape인 (3,15)의 뜻은 3줄의 텍스트와 15 종류의 단어가 사용되었다는 뜻입니다. 그러므로 feature값은 15가 할당됩니다. max_features로 feature값을 수정하였으므로 feature값은 10으로 할당됩니다.
profile
아직 고쳐나가는 중.

0개의 댓글