ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • youtube text mining3
    ML, DL & Python/Youtube 크롤링 & 분석 2019. 5. 11. 15:10

    저번 포스팅에서는 word embedding와 word2vec을 사용하여 단어를 벡터화하고 벡터공간에 뿌린 뒤에 단어들의 유사도를 확인해보았습니다.

     

    이번 포스팅에서는 벡터공간에 뿌려진 단어들의 밀집정도와 어느 단어들끼리 묶여있는지 확인하기 위해서 군집분석을 진행해보겠습니다. 저는 단어들을 스스로 학습하여 epsilon과 min_scale을 이용하여 군집의 갯수를 정해주는 DBSCAN방식과 중심단어를 기준으로 단어 벡터간의 거리를 기반으로 군집을 형성하는데 군집의 갯수를 지정해줘야하는 KMEANS방식을 사용했습니다.

     

    kmeans cluster

    kmeans는 초기에 지정한 군집 갯수에 따라 중심 데이터를 지정합니다. 그리고 중심 데이터와 가까운 데이터들을 군집으로 묶습니다.

    다시 형성된 각 군집에서 중심이 되는 데이터를 지정한 뒤 중심 데이터와 가까운 데이터들을 군집으로 묶습니다. 이러한 과정을 계속 반복하여 최종적으로 다음 중심이 되는 단어와 기존에 중심이 되는 단어가 같을 때 학습을 멈추고 마지막으로 형성한 군집을 최종 군집으로 선정합니다.

     

    따라서 해당 포스팅에서는 KMEANS Clustering을 사용하여 군집화해보겠습니다.

     

    군집화할 데이터는 저번 포스팅에서 사용한 댓글 데이터이며 벡터공간에 할당한 단어들을 이용하겠습니다. 먼저 Clustering할 벡터값을 확인해보겠습니다. 45개의 단어들로 학습되어있고 차원의수는 100개입니다.

    model.wv.syn0.shape #w2v size  -> 45개의 단어가 100차원을 가지고 있음
    
    #45개의 단어가 100차원으로 벡터화된 수치를 넣어줌
    word_vectors = model.wv.syn0 # model.wv.vectors와 같은 값을 가짐

    word_vectors에는 수치화된 단어가 array형식으로 들어가 있습니다.

     

    45개의 단어이므로 적정 cluster의 갯수를 6개로 설정하겠습니다.

    kmeans알고리즘을 먼저 만들겠습니다. 

    num_clusters = 6 #cluster의 갯수 산정
    kmeans_clustering = KMeans( n_clusters = num_clusters )#default

    그 다음으로 만든 kmeans clustering으로 군집을 형성하겠습니다.

    그리고 각 단어들이 어떠한 군집에 속하는지 알아보겠습니다.

    idx = kmeans_clustering.fit_predict( word_vectors ) #각 단어가 어떤 군집에 속하는지 확인

    군집 결과

     

    각 어휘 단어를 클러스터 번호에 매핑되게 word/index 사전을 생성합니다.

    # 각 어휘 단어를 클러스터 번호에 매핑되게 word/Index 사전을 만든다.
    idx = list(idx)
    names = model.wv.index2word #학습된 단어들 unique
    word_centroid_map = {names[i]: idx[i] for i in range(len(names))}#각 단어 별로 클러스터 번호에 매칭

     

    각 군집에 할당된 단어들이 어떤 것이 있고 각 클러스터는 어떤 성격을 지니는지 확인해보겠습니다.

    for cluster in range(0,6):
        # 클러스터 번호를 출력
        print("\nCluster {}".format(cluster))
        
        # 클러스터번호와 클러스터에 있는 단어를 찍는다.
        words = []
        for i in range(0,len(list(word_centroid_map.values()))): #list(dict)키 값만 리스트로 반환
            #list(dict.values)는 value값이 리스트로 반환
            if( list(word_centroid_map.values())[i] == cluster ):
                words.append(list(word_centroid_map.keys())[i])
        print(words)

     

    밑의 결과는 출력물입니다.

    각 클러스터마다 어떠한 성격을 지니는 군집인지를 위의 분석을 통해서 알 수 있습니다. 제가 분석한 텍스트 데이터는 댓글로 한정되어 있기 때문에 댓글은 유의미하지 않은 데이터가 많이 섞여있습니다. 그렇기 때문에 분석결과가 원하는 결과로 분석되지 않는데 모든 댓글들을 수집해서 분석을 실시한다면 댓글을 다는 사람들의 부류와 그 사람들의 성격을 알 수 있을 것이라 기대됩니다.

     

    다음 포스팅은 영상 제목을 이용하여 분석을 진행할 예정입니다. 영상 제목의 단어들을 토큰화하여 어떠한 단어들이 등장했을 때 조회수가 높게 나오는지 확인할 수 있을 것입니다. 

     

     


    'ML, DL & Python > Youtube 크롤링 & 분석' 카테고리의 다른 글

    유튜버 분석  (14) 2019.05.25
    youtube text mining 2  (0) 2019.05.08
    youtube text mining 1  (4) 2019.05.06
    유튜브 댓글 크롤링  (11) 2019.05.05
    유튜브 크롤링  (56) 2019.05.04

    댓글

Designed by Tistory.