집합의 한계를 넘어서기 위해 텍스트 데이터를 원-핫 벡터와 빈도수 벡터로 표현하는 방법을 배웁니다.
| 단계 | 활동 | |
|---|---|---|
| 도입 | 벡터의 성분과 차원 복습 | 5분 |
| 활동1 | 원-핫 벡터 만들기 | 15분 |
| 활동2 | 빈도수 벡터 만들기 | 20분 |
| 정리 | 단어 임베딩과 단어 구름 | 10분 |
하나 또는 여러 개의 데이터를 순서쌍의 형태로 표현한 것을 벡터라 하고 $\vec{a}, \vec{b}, \vec{c}, \cdots$와 같이 나타냅니다. 벡터 $\vec{a}=(a_1, a_2, \cdots, a_n)$의 각 수 $a_i$를 성분, $n$개의 성분으로 이루어진 벡터를 $n$차원 벡터라고 합니다.
| 확인하기 | 문제 | 답 |
|---|---|---|
| 1 | 벡터 $\vec{X}=(2,1,3,0,1)$의 첫째 성분, 넷째 성분, 차원 | 첫째 성분 2, 넷째 성분 0, 5차원 |
| 2-⑴ | $\vec{a}=(x+2,3), \vec{b}=(5,y+1)$이 같을 때 $x,y$ | $x=3, y=2$ |
| 2-⑵ | $\vec{a}=(2x+y,7), \vec{b}=(0,x-3y)$가 같을 때 $x,y$ | $x=1, y=-2$ |
원-핫 벡터는 전체집합의 원소 개수를 벡터의 차원으로 하되, 표현하려는 단어에 대응하는 성분에만 1을, 그 외에는 0을 부여하는 벡터입니다. 1차시에서 구한 전체집합 $U$의 단어를 클릭해 원-핫 벡터를 만들어 보세요.
전체집합 $U$의 각 단어가 한 줄 평 A, B, C에 속하면 1, 속하지 않으면 0으로 나타내면 각 한 줄 평을 다중-핫 벡터로 나타낼 수 있습니다.
원-핫 벡터나 다중-핫 벡터는 단어의 포함 여부만 나타낼 뿐 등장 횟수는 알 수 없습니다. 단어별 등장 횟수를 성분으로 하는 벡터를 빈도수 벡터라고 합니다. 신라 장군 김유신에 대한 두 평가에서 빈도수 벡터를 만들어 봅시다.
평가 A(변호사 김부식): 신라는 삼국을 통일해 전란의 고통에서 삼국의 백성들을 해방시켰다.
평가 B(검사 신채호): 신라 통일은 당나라에 민족 터전을 잃게 만든, 삼국 통일이 아닌 삼한 통일이다.
원-핫 벡터나 빈도수 벡터는 단어의 의미를 하나의 차원에만 표현하기 때문에 (1) 단어 간의 의미를 알기 어렵고 (2) 긴 글에는 아주 큰 차원의 벡터가 필요하다는 문제가 있습니다. 단어 임베딩(word embedding)은 단어의 의미를 여러 차원에 분산하여 표현하는 방법으로, 비슷한 의미의 단어들을 서로 가까운 곳에 배치합니다. 가장 많이 사용되는 방법으로 워드투벡(Word2Vec)이 있습니다.
빈도수를 시각화하면 어떤 단어가 중요한지 한눈에 볼 수 있는데, 이를 단어 구름(word cloud)이라고 합니다. 사용 빈도가 높을수록 글자 크기가 커집니다. 아래에서 1차시 한 줄 평 A, B, C를 합친 텍스트의 단어 구름을 확인해 보세요.
오늘은 원-핫 벡터와 빈도수 벡터로 텍스트를 표현하는 방법을 배웠습니다. 다음 시간에는 빈도수만으로는 알기 어려운 단어의 상대적 중요도, TF-IDF를 계산해 봅니다.