ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 벡터화와 임베딩
    💻 computer science/📦 database 2025. 8. 4. 22:31

    컴퓨터는 모든 정보를 0과 1로 구성된 이진수로 표현합니다.

    이는 전기 신호의 두 가지 상태, 즉 전류가 흐르거나(1) 흐르지 않는(0) 상태를 이용한 것입니다.

    두 가지 상태를 통해 컴퓨터는 방대한 양의 정보를 효율적으로 처리할 수 있습니다.

    📌 벡터화 (Vectorization)

    우리가 일상생활에서 사용하는 언어(단어, 문장) 또한 0과 1로 이루어진 행렬, 즉 숫자의 집합으로 표현될 수 있습니다.

    이렇게 자연어를 컴퓨터가 이해할 수 있는 수치형 데이터인 벡터로 변환해주는 과정을 벡터화(Vectorization) 라고 합니다.

     

    ⭐ 벡터화가 필요한 이유

     

    컴퓨터는 텍스트 데이터를 직접 처리할 수 없습니다.

    따라서 우리가 사용하는 언어를 컴퓨터가 이해하고 연산할 수 있도록 수치형 데이터인 벡터로 변환하는 과정이 필수적입니다.

     

    🔍 벡터 (Vector)란?

     

    벡터는 여러 개의 숫자를 나열한 것으로 수학적으로는 방향과 크기를 가지고 있는 개념입니다.

    자연어 처리에서는 단어나 문장의 특징을 나타내는 숫자들의 배열로 사용됩니다.

    📖 벡터화 기법

    🔥 One-hot Encoding

    가장 단순한 벡터화 기법

    각 단어를 고유한 인덱스로 변환 후 해당 인덱스에만 1을 부여하고 나머지 인덱스에는 0을 부여하여 벡터를 생성

     

    🔠 예제: “부스트캠프 챌린지 화이팅”

    단어 One-hot vector
    부스트캠프 [1, 0, 0]
    챌린지 [0, 1, 0]
    화이팅 [0, 0, 1]

     

     

    ⚠️ One-hot Encoding의 문제

     

    💥 단어 간 의미적인 유사성 반영 불가

     

    "사과"와 "배"는 과일이라는 공통점이 있지만 One-hot Encoding으로는 두 단어의 유사성을 파악할 수 없습니다.

    • 이는 각 단어가 독립적인 차원을 가지기 때문입니다.

    💥 차원의 저주 (Curse of Dimensionality)

     

    단어 수가 늘어날수록 벡터의 길이가 단어 수만큼 늘어나게 되어 차원이 너무 커질 수 있습니다.

    대부분의 값이 0으로 채워진 희소 벡터(Sparse Vector)를 생성해 공간적 낭비와 연산 효율이 저하

     

     

    🔍 희소 벡터란?

     

    벡터의 값이 대부분 0으로 표현되는 벡터.

    • 데이터 저장 공간의 낭비와 연산 시 불필요한 0 연산으로 인한 비효율성 발생.

    🔍 벡터의 차원이란?

     

    벡터에 있는 성분(숫자)의 개수, 즉 한 벡터가 몇 개의 숫자로 구성되어 있는지를 의미

    • [1, 0, 0, 0, …] (10,000개) ⇒ 10,000차원 벡터

     

    👜 Bag of words (BoW)

    문서 내 단어의 빈도(등장 여부 또는 등장 횟수)를 벡터로 나타내는 방법

     

    🔠 입력 문장들

    문장 1: "부스트캠프 챌린지 화이팅"
    문장 2: "부스트캠프 챌린지 성공"

     

    🧾 단어 사전(vocaburary) 만들기 (전체 단어 집합)

    [부스트캠프, 챌린지, 화이팅, 성공] ← 전체 문서 기준 단어 모음

     

    ✅ BoW 벡터

    문장 Vector
    문장 1 [1, 1, 1, 0]
    문장 2 [1, 1, 0, 1]
    • 1은 그 단어가 문장에 존재한다는 뜻
    • 더 나아가서 횟수를 기록할 수도 있습니다. (예: 단어가 두 번 등장하면 2)

     

    🤔 그럼 One-hot 인코딩에서의 문제였던 유사도 문제를 어떻게 BoW는 해결하지?

     

    BoW는 단어의 빈도를 기준으로 벡터화를 진행하기 때문에 문장 간의 비교가 가능해집니다.

    두 문장의 BoW 벡터가 유사하다면 해당 문장들이 유사한 단어 구성(즉, 유사한 내용)을 가질 확률이 높다고 판단할 수 있습니다.

    • 문장 간의 유사도를 살펴볼 수 있습니다

     

    📌 DTM (Document-Term Matrix)

    BoW를 활용해 여러 문서들을 하나의 행렬로 표현

     

      부스트 캠프 챌린지 화이팅 성공
    문장 1 1 1 1 0
    문장 2 1 1 0 1
    • 각 행은 문서, 각 열은 단어
    • 각 셀에 들어있는 값은 해당 단어의 등장 횟수

     

    ⚠️ DTM의 문제점

     

    문맥 및 단어 간 관계 미반영

    • One-hot 인코딩과 마찬가지로 DTM은 문장 내에서 단어 간의 관계를 드러내지 못합니다. 단순히 단어의 빈도만 확인하여 문맥이나 단어의 중요도는 고려하지 않습니다.

    차원의 저주 및 희소성

    • 단어 수가 많아질수록 벡터 차원이 늘어나 공간적으로 비효율적이고 대부분의 값이 0인 희소 행렬이 되어 연산 효율성이 떨어집니다.

     

    📌 TF-IDF

    특정 단어가 문서 내에서 얼마나 중요한지를 나타내는 가중치

    단순 빈도만 고려하는 BoW의 한계를 보완

     

    📖 용어의 의미

    용어 뜻
    TF (Term Frequency) 특정 문서에서 해당 단어가 얼마나 자주 나오는지 (단어 빈도)
    IDF (Inverse Document Frequency) 전체 문서중 이 단어가 얼마나 드문지 (역 문서 빈도)

     

     

    TF-IDF 값이 높다는 것은 특정 문서에서의 빈도수는 높은데 전체 문서에서 등장하는 경우는 적은 것 을 의미

    • 해당 단어가 특정 문서에서 중요한 의미를 가지는 단어일 가능성이 높다!!!

     

    🆚 BoW vs TF-IDF

    항목 BoW TF-IDF
    벡터 값 단어 등장 횟수 등장 빈도 × 중요도
    공통 단어 많이 나오면 유사도↑ 많이 나와도 중요도 낮아짐
    문맥 반영 ❌ 안 됨 ❌ 여전히 안 됨
    의미 반영 ❌ 없음 ✅ 어느 정도 반영됨 (빈도 기준)

     

    🚀 임베딩

    임베딩은 텍스트(단어, 문장)나 다른 데이터를 컴퓨터가 이해하고 처리할 수 있는 수치형 벡터로 변환하는 과정입니다.

    • 단순히 데이터를 숫자로 바꾸는 것을 넘어 데이터의 의미와 문맥을 반영하여 비슷한 밀집 벡터 공간에 표현하는 고도화된 벡터화 방법

     

    🔍 밀집 벡터

     

    사용자가 설정한 값으로 모든 단어의 벡터 표현의 차원을 맞춘다.

    • 0과 1만 가진 값이 아닌 실수값을 가진다.

     

    🔍 워드 임베딩

     

    단어를 밀집 벡터(Dense Vector)의 형태로 표현하는 방법

    • 이런 밀집 벡터를 임베딩 벡터라고 한다.

     

    🧩 임베딩 벡터의 특징

    1️⃣ 저차원

    • 임베딩 벡터는 일반적으로 100~300 차원과 같이 비교적 낮은 차원으로 구성됩니다.
    • 수만 개의 차원을 가질 수 있는 희소 벡터에 비해 훨씬 효율적입니다.

    2️⃣ 실수값

    • 각 벡터의 성분은 대부분 실수값으로 이루어져 있습니다 (예: 0.42, -0.15, 0.78).

    3️⃣ 의미적 유사성 반영

    • 벡터 공간에서 유의어나 의미적으로 관련된 단어들은 서로 가깝게 위치합니다.
    • 예를 들어 "사과"와 "바나나"는 "자동차"보다 가깝게 위치

    4️⃣ 대표적인 워드 임베딩 방법

    • Word2Vec, FastText, GloVe 등

     

    '💻 computer science > 📦 database' 카테고리의 다른 글

    벡터 유사도 검색  (7) 2025.08.04
    Word2Vec  (2) 2025.08.04
    MySQL - 트랜잭션 격리 수준 실습  (0) 2024.05.11
    MySQL - 스토리지 엔진 수준의 락  (0) 2024.05.11
    📂 MySQL - 트랜잭션 격리 수준  (0) 2024.05.11

    댓글

Designed by Tistory.