자연어처리(감성분석_머신러닝)

1 minute read

머신러닝을 이용한 감성분석

문서 행렬

  • 비정형데이터 머신러닝은 기본적으로 문서행렬을 이용한다
  • DTM이라고 부른다.

GitHub Logo

  1. 모든 문서에서 나타나는 어휘를 모으고, 일정 빈도 이상이 되는 것들로 컬럼을 만든다.
  2. 각 문서에서 컬럼에 있는 어휘가 있는지 파악하고, 그 빈도를 기록한다.
  3. 빈도는 단순빈도 또는 TF-IDF 값이 될 수 있다.
  4. 각 문서가 어떠한 종류에 속하는지를 기록하여 훈련 데이터를 만든다.

tf-idf

  • TF는 단순히 현재 문서에 출현한 단어의 빈도
  • TF-IDf는 단어빈도*역문서빈도
  • 역문서 빈도(IDF)는 전체 문서의 수를 그 단어가 나오는 문서의 수로 나눈 것 IDF(t) = log(전체 문서수 / t가 나오는 문서수(DF))
  • 특정 단어가 모든 문서에서 많이 나오는 경우 단어들의 IDF 값은 작다.

머신러닝을 이용한 감성분석

훈련데이터와 테스트데이터 분리

    data_text = [line[1] for line in data] # 데이터 본문
    data_senti = [line[2] for line in data] # 데이터 긍부정 부분
    from sklearn.model_selection import train_test_split # 본문과 라벨을 각각 분리
    # 기본값 비율은 7.5 : 2.5,stratify 는 비율을 맞춰준다.
    train_data_text, test_data_text, train_data_senti, test_data_senti = train_test_split(data_text, data_senti, stratify=data_senti)
    # Counter 클래스를 이용해 각 분류가 훈련데이터와 테스트데이터에 같은 비율로 들어갔는지 확인해 본다
    from collections import Counter
    train_data_senti_freq = Counter(train_data_senti)
    print('train_data_senti_freq:', train_data_senti_freq)
    test_data_senti_freq = Counter(test_data_senti)
    print('test_data_senti_freq:', test_data_senti_freq)

행렬 형태로 변환

    from sklearn.feature_extraction.text import CountVectorizer
    vect = CountVectorizer(min_df=5).fit(train_data_text) # 최소 문서 빈도 5이상의 단어만 대상
    X_train = vect.transform(train_data_text) # 행렬 생성
    print("X_train:\n", repr(X_train)) 

머신러닝 알고리즘 적용

    from sklearn.feature_extraction.text import CountVectorizer
    vect = CountVectorizer(min_df=5).fit(train_data_text) # 최소 문서 빈도 5이상의 단어만 대상
    X_train = vect.transform(train_data_text) # 행렬 생성
    print("X_train:\n", repr(X_train)) 

테스트 데이터 입력

    X_test = vect.transform(test_data_text)
    # test_data_senti가 리스트 형태로 되어있으면 행 번호가 있는 시리즈로 바꿔준다.
    y_test = pd.Series(test_data_senti)
    print("테스트 데이터 점수:", lr.score(X_test, y_test))

lr.score는 훈련데이터나 테스트 데이터의 점수를 가르쳐준다.

Leave a comment