본문 바로가기

머신러닝

[빅데이터] word2vec 모델 적용시키기 - 유튜브 스팸 데이터 분석해보기(2)

728x90

지난시간의 pandas dataframe과 같은 유튜브 스팸 데이터이다.

저번엔 이상한 \ufeff를 떼고, 중복된 content(댓글)을 제거해서 데이터프레임을 재구성했다.

 

이번시간엔 문장을 토큰화시켜서 단어화된 리스트에 word2vec 모델을 적용해서 word embedding을 시도해 보고자 한다.

 

문장의 토큰화는 다음과 같이 진행한다.

from nltk.tokenize import word_tokenize 

commentlist=[]

for sentence in x_data:

  word_tokens = word_tokenize(sentence)

  result = []

  for w in word_tokens:

    result.append(w)

  commentlist.append(result)

commentlist

preprocessing은 따로하지 않았다. 데이터를 제공한 논문 왈 스팸 데이터에 preprocessing을 적용시키면 spam classifier의 정확도가 떨어진다는 이유 때문이었다.

 

다음은 토큰화된 리스트를 가지고 word2vec을 돌려볼 차례이다.

다음과 같이 단 한줄로 모델을 돌릴 수 있으며, 각각의 파라미터는 다음과 같은 의미를 가진다.

from gensim.models import Word2Vec

model = Word2Vec(sentences=commentlist, size=100, window=5, min_count=0, workers=4, sg=0)

 

size = 워드 벡터의 특징 값. 즉, 임베딩 된 벡터의 차원.
window = 컨텍스트 윈도우 크기
min_count = 단어 최소 빈도 수 제한 (빈도가 적은 단어들은 학습하지 않는다.)
workers = 학습을 위한 프로세스 수
sg = 0은 CBOW, 1은 Skip-gram. (CBOW에서는 주변 단어를 통해 중심 단어를 예측, Skip-gram은 중심 단어에서 주변 단어를 예측)

 

나는 'channel' 이란 단어로 테스트를 해보았다.

개인적으로 channel은 subscribe, youtube와 같은 단어들이 많이 매칭이 될줄 알았는데, 생각보다 원하는 결과는 잘 안나왔다.

 

다음 시간엔 word2vec 말고 다른 방식으로 단어를 벡터화 하는 방식에 대해 알아볼 것이다.

 

참고 문헌: https://wikidocs.net/22660