나뭇잎 교과서

집합과 벡터로 나타낸 텍스트

컴퓨터가 글을 다루려면 먼저 글을 수학의 대상으로 바꿔야 합니다. 문장을 낱말의 집합으로 보면 집합의 연산으로 비슷함을 잴 수 있고, 낱말의 횟수를 적은 벡터로 보면 거리와 각을 계산할 수 있습니다. 이 절에서는 두 표현을 직접 만들어 봅니다.

본문

집합과 벡터로 나타낸 텍스트

본문

검색창에 질문을 입력하면 비슷한 질문과 답이 먼저 나온다. 컴퓨터는 글의 뜻을 사람처럼 이해하지 못하는데, 어떻게 두 문장이 비슷하다는 것을 알아챌까? 글을 수로 바꿀 수 있다면, '비슷하다'를 계산할 수 있을 것이다. 가장 간단한 방법은 문장을 낱말의 집합으로 보는 것이다.

그림 1. 두 문장을 띄어쓰기 단위의 낱말 집합으로 보고 벤 다이어그램에 놓았다. 가운데 겹친 부분이 공통 낱말이다. 공통 낱말이 전체 낱말 가운데 차지하는 비율이 자카드 유사도이다.
먼저 알아야 할 것집합의 연산(공통수학2), 좌표평면 위의 두 점 사이의 거리, 벡터의 성분(기하 또는 아래 설명).

2.1.1집합으로 나타낸 문장과 자카드 유사도

문장을 띄어쓰기로 나누면 낱말의 집합이 된다. "나는 사과를 좋아한다"는 {나는, 사과를, 좋아한다}이다. 두 집합이 얼마나 겹치는지를 재면 두 문장의 비슷한 정도를 수로 나타낼 수 있다.

정의 2.1.1 자카드 유사도

두 집합 \(A\), \(B\)에 대하여 \[J(A, B) = \frac{n(A \cap B)}{n(A \cup B)}\] 를 자카드 유사도라 한다. 값은 0과 1 사이이며, 두 집합이 같으면 1, 공통 원소가 없으면 0이다.

그림 1에서 문장 쌍을 바꾸어 보자. "나는 사과를 좋아한다"와 "나는 귤을 좋아한다"는 공통 낱말이 2개, 전체 낱말이 4개라 유사도가 0.5이다. "고양이가 잔다"와 "강아지가 뛴다"는 공통 낱말이 없어 0이다. 다만 이 방법은 '사과'와 '귤'이 둘 다 과일이라는 것도, 낱말의 순서도 알지 못한다.1

2.1.2벡터로 나타낸 문장

여러 문장에 나오는 낱말을 모두 모아 순서대로 늘어놓은 목록을 사전이라 하자. 각 문장을, 사전의 각 낱말이 그 문장에 있으면 1, 없으면 0인 수의 줄로 나타낼 수 있다. 이런 수의 줄을 벡터라 하고, 이 표현을 원-핫 표현 또는 이진 벡터라 한다.

사전나는사과를귤을좋아한다 문장 11101 문장 21011 (1, 1, 0, 1)(1, 0, 1, 1)
그림 2. 사전의 각 낱말 자리에 있으면 1, 없으면 0을 적으면 문장이 벡터가 된다.

벡터로 바꾸면 두 문장 사이의 거리를 계산할 수 있다. 위의 두 벡터는 두 자리에서 다르므로 거리는 \(\sqrt{0^2 + 1^2 + 1^2 + 0^2} = \sqrt{2}\)이다. 같은 성분끼리 곱해 더한 값 \(1 + 0 + 0 + 1 = 2\)는 공통 낱말의 개수와 같다.

2.1.3예제 풀이

예제 2.1.2

세 문장 A "오늘 날씨가 맑다", B "오늘 날씨가 흐리다", C "내일 날씨가 맑다"가 있다. A와 B, A와 C의 자카드 유사도를 각각 구하고, 이진 벡터 사이의 거리도 구하여라.

A = {오늘, 날씨가, 맑다}, B = {오늘, 날씨가, 흐리다}, C = {내일, 날씨가, 맑다}이다. A와 B는 공통 2개, 합집합 4개이므로 \(J = \dfrac{2}{4} = 0.5\)이다. A와 C도 공통 2개(날씨가, 맑다), 합집합 4개로 0.5이다.

사전을 (오늘, 내일, 날씨가, 맑다, 흐리다)로 정하면 A = (1, 0, 1, 1, 0), B = (1, 0, 1, 0, 1), C = (0, 1, 1, 1, 0)이다. A와 B, A와 C는 모두 두 자리가 달라 거리가 \(\sqrt{2}\)이다. 그런데 뜻으로 보면 A와 B는 날씨가 반대이고, A와 C는 날이 다르다. 두 경우가 같은 값으로 나온다는 것은, 낱말의 일치만으로는 뜻의 차이를 다 잡지 못한다는 뜻이다.

아래 탐구 카드에서 두 문장의 유사도를 직접 계산하고, 문장을 벡터로 바꾸어 보자.

  1. 우리말은 조사가 붙어 '사과를', '사과가'가 다른 낱말로 셈해진다. 그래서 실제로는 형태소 분석으로 '사과', '를'처럼 나누어 비교하는 경우가 많다.
마무리

문장을 낱말의 집합으로 보면 자카드 유사도 \(\frac{n(A \cap B)}{n(A \cup B)}\)로 비슷한 정도를 잴 수 있고, 사전의 낱말 자리에 0과 1을 적으면 문장이 벡터가 되어 거리와 곱을 계산할 수 있다. 그래서 처음 질문처럼 뜻을 이해하지 못하는 컴퓨터도, 공통 낱말을 세어 두 문장이 얼마나 비슷한지 수로 나타낼 수 있다.

탐구 1

두 문장이 얼마나 비슷한지 수로 나타낼 수 있을까?

집합과 자카드 유사도 · 조작

A에만

A ∩ B

B에만

낱말은 띄어쓰기로 나누고 흔한 조사(은, 는, 이, 가, 을, 를 등)만 떼는 아주 단순한 방법으로 나눴다.

  1. 질문고객 상담 챗봇은 “비밀번호를 잊어버렸어요”와 “비밀번호가 기억나지 않아요”가 같은 질문임을 알아야 한다. 컴퓨터가 두 문장의 비슷한 정도를 계산하려면 어떻게 해야 할까?
  2. 복원두 집합의 합집합의 원소 개수는 \(n(A \cup B) = n(A) + n(B) - n(A \cap B)\)이다.
  3. 설명문장을 낱말의 집합으로 나타내면, 두 문장에 함께 나오는 낱말은 교집합, 둘 중 하나라도 나오는 낱말은 합집합이 된다. 그래서 자카드 유사도 \(J(A, B) = \dfrac{n(A \cap B)}{n(A \cup B)}\)는 0(공통 낱말 없음)과 1(낱말이 같음) 사이의 값이다.
  4. 연결검색 엔진의 중복 문서 찾기, 표절 검사, 함께 산 상품의 집합을 비교하는 추천 시스템에서 자카드 유사도를 쓴다. 다음 카드에서는 낱말의 횟수까지 담는 벡터로 나타낸다.
  5. 적용예시 세 쌍의 유사도를 비교하고, 직접 문장을 바꿔 유사도를 0.5 이상으로 만들어 보자. 그리고 ‘같은 낱말, 다른 뜻’ 쌍에서는 무엇이 문제인지 생각해 보자.
  6. 판단집합은 순서와 횟수를 무시한다. 그래서 “고양이가 강아지를 쫓았다”와 “강아지가 고양이를 쫓았다”는 자카드 유사도가 1이지만 뜻은 전혀 다르다. 또 ‘잊어버렸다’와 ‘기억나지 않는다’처럼 낱말이 달라도 뜻이 같은 경우는 잡아내지 못한다.

확인조건이 달라지면

\(A = \{\)사과, 배, 감\(\}\), \(B = \{\)배, 감, 귤, 밤\(\}\)일 때 자카드 유사도는?

탐구 2

문장을 숫자들의 줄, 곧 벡터로 바꿀 수 있을까?

원-핫 벡터와 낱말 주머니 · 만들기

아래 낱말을 눌러 나만의 문장을 만들어 보자(같은 낱말을 여러 번 눌러도 된다). 표의 맨 아래 줄이 내 문장의 벡터이다.

  1. 질문컴퓨터는 글자를 그대로 계산할 수 없다. 문장을 수로 바꿔야 비교하거나 분류할 수 있는데, 어떻게 바꿀 수 있을까?
  2. 복원좌표평면의 두 점 \((a_1, a_2)\), \((b_1, b_2)\) 사이의 거리는 \(\sqrt{(a_1 - b_1)^2 + (a_2 - b_2)^2}\)이다.
  3. 설명\(n\)개의 수를 순서대로 늘어놓은 \((a_1, a_2, \ldots, a_n)\)을 \(n\)차원 벡터라 하고, 두 벡터의 거리도 같은 방법으로 \(\sqrt{(a_1 - b_1)^2 + \cdots + (a_n - b_n)^2}\)라 한다. 쓰는 낱말을 모두 모아 순서를 정한 것을 낱말 사전이라 하며, 사전의 \(k\)번째 낱말은 \(k\)번째 성분만 1이고 나머지는 0인 원-핫 벡터로 나타낸다. 그러면 문장은 그 안의 낱말 벡터를 모두 더한 벡터, 곧 각 낱말이 몇 번 나왔는지를 적은 벡터로 나타낼 수 있고(낱말 주머니), 문장끼리의 거리도 계산할 수 있다.
  4. 연결다음 절에서는 이 횟수 벡터로 글을 요약하고, 낱말마다 중요도를 다르게 준다. 실제 인공지능은 비슷한 뜻의 낱말이 가까운 벡터가 되도록 학습한 벡터(낱말 임베딩)를 쓴다.
  5. 적용문장 1과 가장 가까운 문장을 만들어 보자. 그리고 낱말 순서를 바꾸면 벡터가 어떻게 되는지 확인해 보자.
  6. 판단원-핫 벡터에서는 서로 다른 두 낱말의 거리가 모두 \(\sqrt2\)로 같다. ‘강아지’와 ‘개’가 ‘강아지’와 ‘비행기’만큼 다르다고 보는 셈이라, 뜻의 가까움은 담지 못한다.

확인조건이 달라지면

사전이 (나, 너, 좋다, 싫다)일 때 "나 너 좋다 너"의 벡터는?

AI 출제 문항연습문제 풀어보기14문항
Esc

↑↓ 고르기Enter 열기