Dev.log

Bag of Words 본문

자연어처리

Bag of Words

포켓몬빵 2022. 5. 10. 23:46

Bag of Words에 대해서

Bag of Words

Bag of Words는 단어들의 sequence에 대해서는 고려하지 않고 단어들의 frequency에 집중하여 텍스트 데이터를 수치화 시키는 방법을 의미합니다. 예를 들어 "나는 포켓몬빵을 사러 편의점에 갔다" 라는 문장이 주어졌다 가정해 봅시다. 이를 형태소 분석기를 사용해서 형태소 단위로 나눈후 해당 문장에 대해 Bag of Words를 만들어 보겠습니다.

from konlpy.tag import Okt

okt = Okt()

def build_bag_of_words(document):
    tokenized_document = okt.morphs(document)
    word_to_index = {}
    bow = []

    for word in tokenized_document:  
        if word not in word_to_index.keys():
            word_to_index[word] = len(word_to_index)  
            bow.insert(len(word_to_index) - 1, 1)
        else:
            index = word_to_index.get(word)
            bow[index] = bow[index] + 1
    return word_to_index, bow
    
    doc1 = "나는 포켓몬빵을 사러 편의점에 갔다"

vocab, bow = build_bag_of_words(doc1)
print('vocabulary :', vocab)
print('bag of words vector :', bow)

vocabulary : {'나': 0, '는': 1, '포켓몬빵': 2, '을': 3, '사러': 4, '편의점': 5, '에': 6, '갔다': 7}
bag of words vector : [1, 1, 1, 1, 1, 1, 1, 1]

위의 코드에서 BoW 벡터를 살펴보면 형태소 단위로 토큰화한 값들에 중복된 요소가 없어서 전부 1로 구성되는것을 확인 할 수 있습니다. 만약 "나는 포켓몬빵을 사러 편의점에 갔다" 가 아닌 "나는 포켓몬빵이 먹고 싶어 포켓몬빵을 사러 편의점에 갔다" 라는 문장에서 BoW를 구하게 되면 "포켓몬빵"이라는 단어의 값은 2를 가지게 됩니다. 즉, BoW는 각 단어가 등장한 횟수를 수치화시키는 통계적 방법으로 주로 어떠한 단어가 얼마나 등장했는지를 기준 표현하는 방법입니다.

 

 

Comments