안녕하세요. 휴먼스케이프 june입니다.
자연어 처리를 배워보고 싶지만, 막상 공부하려니 막막한 분들을 위해 배경지식이 전혀 없어도 익힐 수 있는 자연어 처리 시리즈를 연재하게 되었습니다.
(파이썬이라는 언어의 사용법만 익혀오시면 충분합니다.)
파이썬 설치
자연어 처리를 하기 위해선 파이썬을 설치해야 합니다.
아래 사이트에 접속해 파이썬을 설치해줍니다.
Word Embedding(텍스트 벡터화)
자연어처리를 하기 위해 사람이 알아들을 수 있는 언어(자연어)에서 컴퓨터가 알아들을 수 있는 언어(벡터)로 변경하는 과정이 필요합니다.
word embedding이란 텍스트로 된 데이터를 기계가 읽을 수 있도록 벡터로 변경하는 것을 말합니다.(단순 ascii 변환과는 다른 의미입니다.)
각 word embedding 방식들은 각자의 알고리즘을 이용해 텍스트의 의미적/문법적 정보를 벡터로 표현합니다.
여러개의 Word Embedding 방식이 있지만, 해당 편에서는 BOW라는 친구를 설명할 예정입니다.
BOW
Bag of Words라는 뜻으로, 말 그대로 가방에 단어를 마구마구 집어넣는 방식을 뜻합니다.
BOW에서는 단어의 출현 빈도를 벡터값으로 활용합니다.
하나의 문서(Document)에 출현한 단어의 갯수만으로 수치화 하는 방식입니다.
다음의 문장을 BOW방식으로 벡터화 해보도록 하겠습니다.
정부가 발표하는 물가상승률과 소비자가 느끼는 물가상승률은 다르다.
간단한 전처리 과정(이후에 설명 예정입니다.)을 거치면 다음과 같이 변환됩니다. 형태소 단위로 분절해 띄어쓰기를 적용한 걸 볼 수 있습니다.
정부 가 발표 하는 물가상승률 과 소비자 가 느끼는 물가상승률 은 다르다
위에서 설명한 BOW 의 알고리즘 대로 단어의 등장 갯수를 count하는 코드를 작성했습니다.
def build_bag_of_words(document):
word_to_index = {}
bow = []
for word in document.split(" "):
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
print(build_bag_of_words(input()))
vocabulary : {'정부': 0, '가': 1, '발표': 2, '하는': 3, '물가상승률': 4, '과': 5, '소비자': 6, '느끼는': 7, '은': 8, '다르다': 9}
bag of words vector : [1, 2, 1, 1, 2, 1, 1, 1, 1, 1]
하나의 문장이 벡터화되어 출력된걸 볼 수 있습니다.
또, 벡터값을 정렬해보면 가장 많이 출현한 단어 즉, 중요 키워드를 산출해낼 수 있습니다.
이렇게 가장 간단한 방식 중 하나인 BOW를 이용해 word embedding을 진행해보았습니다.