Home 단어 표현 방법
Post
Cancel

단어 표현 방법

단어 표현 방법

시작하기 전에…

이 글은 자연어 처리 시 텍스트를 표현하는 방법에 대해 다룹니다.

One Hot Vector

One Hot Vector란 표현하고자하는 하나의 단어에만 값을 넣고, 나머지는 0으로 채우는 vector다. Vector값 중 하나의 값만 1이 들어가있어 One Hot Vector라는 이름이 붙었다고한다.

아래 예시를 보자

1
2
3
4
5
6
7
8
9
10
11
12
13
words = ['unk', 'leeseojune', 'backend', 'developer', 'is'] # 단어들이 words와 같은 순서 (leeseojune : 1) 일 때

vector_value = one_hot_vector('leeseojune is backend developer nice')

# one_hot_vector 처리를하면 아래와 같이 값이 나오게 된다.

# vector_value = [
# 	[0, 1, 0, 0, 0], leeseojune이라는 단어는 words의 1번째 인덱스에 들어가있다. 1번 vector에 값이 On 된다. (1번 index)
# 	[0, 0, 0, 0, 1], is (4번 index)
#  	[0, 0, 1, 0, 0], backend (2번 index)
# 	[0, 0, 0, 1, 0], developer (3번 index)
# 	[1, 0, 0, 0, 0]  nice는 words에 따로 등록되어있지 않은 값이므로 UNK(Unknown)값의 Index인 0번째 vector에 값이 On된다.  (vocabulary에 없는 값은 unk(unknown)에 값을 넣는다.)
#]

One Hot Vector로 구성하게되면 발생하는 문제는 무엇일까?

바로 문장이 길어지면 Vector의 차원이 너무 많이 늘어난다는 것이다.

Bag of Words(BoW)

Bag of Words(BoW)는 One Hot Vector와 다르게 하나의 Vector로 뭉개서 표현한다.

1
2
3
4
5
6
7
8
9
10
11
12
words = ['unk', 'leeseojune', 'backend', 'developer', 'is'] # 단어들이 words와 같은 순서 (leeseojune : 1) 일 때

vector_value = bow('leeseojune is backend developer he is nice developer')

# BoW 처리를하면 아래와 같이 값이 나오게 된다.

# bow_value = [2, 1, 1, 2, 2]
# 문장에 words에 따로 등록되어있지 않은 unknown인 단어 he, nice 2 개가 있으므로 2 => 2
# leeseojune => 1
# backend	=> 1
# developer	=> 2
# is => 2
This post is licensed under CC BY 4.0 by the author.