1. 단어 임베딩 (Word Embedding) 이란?

핵심부터 말하자면, **단어 임베딩은 '단어를 숫자로 된 좌표(벡터)로 바꾸는 기술'**입니다. 컴퓨터는 '사과'나 '오렌지' 같은 글자를 직접 이해하지 못해요. 그래서 각 단어를 컴퓨터가 이해하고 계산할 수 있는 숫자들의 모음, 즉 벡터로 변환하는 과정이 필요합니다.

정의 (Definition)

  • 단어(Word): 우리가 사용하는 수많은 단어 중, 분석할 텍스트에서 골라낸 단어 목록(어휘집, Vocabulary)에 있는 모든 단어를 의미합니다.
  • 임베딩(Embedding): '끼워 넣다'라는 뜻처럼, 단어를 특정 공간에 '끼워 넣는' 과정입니다.
    • 고차원 이산 공간 (High-dimensional discrete space): 단어를 벡터로 바꾸는 가장 간단한 방법은 '원-핫 인코딩(One-hot encoding)'입니다. 예를 들어, 어휘집에 10,000개의 단어가 있다면 '사과'는 3번째 단어라고 할 때 [0, 0, 1, 0, ..., 0] (10,000개의 숫자 중 3번째만 1)처럼 표현됩니다. 이는 차원이 매우 높고(고차원), 0 아니면 1로만 표현되어 연속적이지 않습니다(이산).
    • 저차원 연속 벡터 공간 (Low-dimensional continuous vector space): 단어 임베딩은 이 10,000차원의 벡터를 훨씬 낮은 차원(예: 100차원)의 실수(소수)로 구성된 벡터 [0.2, -0.4, 0.7, ...]로 압축하고 매핑(mapping)하는 것입니다. 이 벡터는 단어의 **'의미'**를 함축하고 있습니다.

주요 방법론

  • 카운트 기반 (Count-based): 단어가 어떤 문서나 주변 단어와 함께 등장하는지 그 빈도를 세는 방식입니다.
    • LSA (Latent Semantic Analysis): DTM(문서 단어 행렬)이라는 거대한 표를 만든 뒤, SVD(특이값 분해)라는 수학적 기법을 사용해 단어들의 잠재적인(Latent) 의미를 포함한 벡터를 추출합니다.
  • 예측 기반 (Prediction-based): 신경망(Neural Network)을 이용해 특정 단어 주변에 어떤 단어가 나타날지 예측하거나, 주변 단어를 보고 중심 단어를 예측하는 과정에서 단어 벡터(Word Embeddings)를 학습합니다.
    • Word2Vec, GloVe, FastText: 이 모델들은 모두 예측 기반 방식으로, 현재 '단어 임베딩'이라고 하면 보통 이 방법들을 가리킵니다.

2. 카운트 기반 벡터화 vs. 단어 임베딩 비교

이 부분이 시험에 나올 확률이 가장 높습니다. 두 방식의 차이점을 명확히 알아두세요.

특징 카운트 기반 벡터화 (e.g., DTM, TF-IDF) 단어 임베딩 (e.g., Word2Vec, GloVe)
표현 방식 희소 표현 (Sparse Representation) 밀집 표현 (Dense Representation)
설명 대부분의 값이 0인 벡터. 어휘집 크기가 차원의 크기가 됨 (e.g., 10,000차원) 대부분의 값이 실수인 꽉 찬 벡터. 차원 수를 직접 정함 (e.g., 100~300차원)
목표 단어의 출현 빈도 표현 단어의 잠재적 의미 표현
설명 "이 단어가 이 문서에서 얼마나 중요한가?"에 초점 "이 단어는 어떤 단어들과 비슷한 의미를 갖는가?"에 초점
의미 유사성 반영 못 함 반영 가능
설명 '왕'과 '여왕'의 관계를 알 수 없음. 단지 다른 단어로만 취급. 벡터 공간에서 '왕'과 '여왕'이 가까이 위치. 왕-남자+여자 ≈ 여왕 같은 벡터 연산도 가능.
벡터화 대상 주로 문서를 벡터화 주로 단어를 먼저 벡터화
설명 각 문서를 단어 빈도로 구성된 하나의 긴 벡터로 만듦. 각 단어의 벡터를 먼저 학습한 후, 이를 조합하여 문장의 의미를 파악하는 모델링을 진행함.

핵심 요약 (시험 대비 암기 포인트!)

  1. 희소(Sparse) vs. 밀집(Dense):
    • 카운트 기반은 단어사전 크기만큼의 차원을 가지며 대부분이 0인 희소 벡터.
    • 단어 임베딩은 사용자가 지정한 저차원(e.g., 100)에 실수 값이 꽉 찬 밀집 벡터.
  2. 빈도 vs. 의미:
    • 카운트 기반은 단어의 빈도수나 중요도를 나타냄.
    • 단어 임베딩은 단어의 문맥적, 의미적 유사성을 벡터 공간에 반영함.
  3. 차원의 의미:
    • 카운트 기반 벡터의 각 차원은 특정 '단어' 그 자체를 의미함.
    • 단어 임베딩 벡터의 각 차원은 명확히 정의할 순 없지만, 의미적으로 혼합된 여러 특징 (e.g., 성별, 직업, 사물 종류 등)을 반영함.

1. 잠재 의미 분석 (Latent Semantic Analysis, LSA) 이란?

LSA는 한마디로 **"문서와 단어에 숨겨진 진짜 의미(주제)를 찾아내는 기술"**입니다.

컴퓨터는 '자동차'와 '차'가 비슷한 단어인지 몰라요. 단순히 다른 글자로 인식하죠. LSA는 수많은 문서 데이터를 분석해서 '자동차'와 '차'가 비슷한 맥락에서 자주 사용된다는 것을 파악하고, "아, 얘네 둘은 비슷한 주제(의미)를 공유하는구나!"라고 스스로 학습하게 만드는 방법입니다.


2. LSA의 개념 및 작동 원리

LSA는 다음의 두 단계를 거쳐 숨겨진 의미를 찾아냅니다.

1단계: 고차원 행렬 만들기 (시작점)

  • 우선 컴퓨터가 텍스트를 이해할 수 있도록 단어-문서 행렬 (DTM) 이나 TF-IDF 행렬을 만듭니다.
  • 이것은 거대한 표(행렬)인데, 보통 행은 단어, 열은 문서를 나타내고 각 칸에는 특정 단어가 특정 문서에 몇 번 등장했는지 빈도를 적습니다.
  • 문제점: 이 행렬은 단어의 개수만큼 차원이 커서 고차원이고(수만 차원), 대부분의 칸이 0으로 채워진 **희소 행렬(Sparse Matrix)**입니다. 이런 상태로는 단어의 '의미'를 파악하기 어렵습니다.

2단계: 저차원 공간으로 압축하기 (핵심 과정)

  • 여기서 LSA의 핵심 기술인 **특잇값 분해(SVD)**가 등장합니다.
  • SVD를 이용해 거대하고 복잡한 DTM 행렬을 의미 있는 작은 단위들로 분해하고, 그중에서 가장 중요한 의미(주제)들만 남기고 나머지는 버려서 차원을 확 줄여버립니다.
  • 가설: 이렇게 카운트 기반의 희소 행렬을 의미 기반의 저차원 공간으로 압축하면, 원래는 달라 보였던 단어들(e.g., '자동차', '차')이 비슷한 의미를 갖는 경우, 서로 아주 가까운 벡터(좌표) 값을 갖게 될 것이다! 라는 것이 LSA의 핵심 아이디어입니다.

3. 핵심 연산: SVD (특잇값 분해)

SVD가 시험에 나올 확률이 매우 높으니 꼭 이해해 두세요!

  • SVD (Singular Value Decomposition): 우리말로 '특잇값 분해'입니다. 복잡한 행렬을 더 단순하고 이해하기 쉬운 3개의 행렬()로 쪼개는 수학적 기법입니다.
    • 분해 (Decomposition): 숫자를 소인수 분해(e.g., )하는 것처럼, 행렬을 그 구조를 이루는 핵심 성분으로 쪼개는 것을 의미합니다.
    • 특잇값 (Singular Value): SVD로 분해했을 때 나오는 값 중 하나로, **"데이터에 잠재된 각각의 주제(의미)가 전체에서 얼마나 중요한가?"**를 나타내는 중요도 또는 의미의 강도라고 생각할 수 있습니다. 특잇값이 클수록 더 중요한 핵심 주제입니다.

LSA는 SVD를 통해 수많은 단어-문서 관계 속에서 핵심 주제(Topic)들을 추출하고, 이 주제들을 새로운 '축'으로 삼아 단어와 문서를 다시 표현합니다. 예를 들어, 원래는 '자동차', '엔진', '바퀴', '정부', '투표' 등 수만 개의 단어 축이 있었다면, LSA를 거치면 '교통수단', '정치' 같은 몇 개의 핵심 주제 축으로 압축되는 것입니다.

시험 대비 최종 요약

  • LSA란? DTM 같은 카운트 기반 행렬에 SVD를 적용해 단어와 문서에 **잠재된 의미(주제)**를 분석하는 기법.
  • 입력: DTM 또는 TF-IDF 행렬 (고차원, 희소).
  • 핵심 연산: SVD (특잇값 분해).
  • SVD의 역할: 복잡한 행렬을 분해하여 데이터의 중요한 축(의미, 주제)을 찾음. 이때 축의 중요도를 특잇값이라고 함.
  • 결과: 단어와 문서를 저차원의 의미 공간에 표현. 의미가 비슷한 단어는 벡터 공간에서 가까운 거리에 위치하게 됨.

1. SVD (특잇값 분해)란 무엇인가?

SVD는 한마디로 **"어떤 복잡한 행렬(데이터)이라도, 세 개의 간단한 행렬로 분해하는 마법 같은 기술"**입니다. LSA에서는 이 기술을 사용해 단어-문서 행렬(DTM)에 숨어있는 의미(주제)를 찾아냅니다.

핵심 공식 (이건 꼭 외우세요!)

모든 행렬 A는 아래와 같이 세 행렬의 곱으로 분해할 수 있습니다.

  • A: 우리의 원본 데이터 (e.g., 단어-문서 행렬, DTM)
  • U (문서와 주제의 관계): 분해된 행렬 중 하나로, '특이 벡터(Singular Vector)'를 담고 있습니다. LSA에서는 **'문서들이 어떤 주제와 관련이 있는지'**에 대한 정보를 가집니다.
  • Σ (시그마, 주제의 중요도): 대각 행렬(diagonal matrix)로, 대각선에만 0이 아닌 값이 있습니다. 이 값들을 **'특잇값(Singular Value)'**이라고 부르며, **'각 주제가 전체 데이터에서 얼마나 중요한지'**를 나타냅니다. 특잇값은 중요도 순으로 정렬되어 있습니다.
  • V (단어와 주제의 관계): 또 다른 '특이 벡터' 행렬입니다. LSA에서는 **'단어들이 어떤 주제와 관련이 있는지'**에 대한 정보를 가집니다. (는 V를 전치(transpose)한 행렬입니다.)

기하학적 의미

SVD를 기하학적으로 보면 **'데이터 변환(Transformation)'**으로 이해할 수 있습니다. 데이터를 나타내는 동그란 원이 행렬 A를 만나 찌그러진 타원이 될 때, SVD는 이 과정을 3단계로 분해해서 설명합니다.

  1. 데이터를 회전시키고 ()
  2. 각 축 방향으로 늘리거나 줄이고 ()
  3. 다시 회전시키는 () 과정

이 과정에서 데이터가 어떤 축으로 가장 많이 늘어나는지(가장 중요한지)를 파악할 수 있게 됩니다.


2. LSA의 진짜 핵심: 데이터 압축 (Truncated SVD)

"그래서 SVD로 DTM을 분해해서 뭘 할 수 있는가?"에 대한 답이 바로 여기에 있습니다. 이게 LSA의 전부라고 해도 과언이 아닙니다.

낮은 계수 근사 (Low-rank Approximation)

SVD로 DTM을 분해하면 수많은 주제(특잇값)가 나옵니다. 하지만 이 주제들이 모두 중요할까요? 아닙니다. 핵심적인 몇 개의 주제만으로도 원본 데이터의 특징을 대부분 설명할 수 있습니다. 나머지는 그냥 노이즈(noise)에 가깝죠.

그래서 **'Truncated SVD (절단된 SVD)'**라는 기법을 사용합니다.

  1. SVD로 A를 로 분해합니다.
  2. 행렬에서 중요도가 높은(값이 큰) 상위 k개의 특잇값만 남기고 나머지는 모두 버립니다.
  3. 그에 맞춰 행렬도 k개의 열과 행만 남깁니다.
  4. 이 '다이어트'한 행렬들()을 다시 곱하면 원본 A와 매우 유사한 근사 행렬()을 얻을 수 있습니다.

이 과정을 **'낮은 계수(rank) 근사'**라고 하며, 이것이 바로 차원 축소이자 데이터 압축의 원리입니다.

슬라이드의 폭포수 사진 예시가 완벽한 설명입니다. 원본 이미지(수많은 rank)를 단 50개의 rank(상위 50개의 특잇값)만으로 복원해도 우리는 폭포수임을 충분히 인지할 수 있습니다. 약간의 디테일은 잃었지만(lossy, 손실 압축), 핵심 정보는 모두 보존한 것이죠.

LSA에서는 이 원리를 이용해 수만 차원의 DTM을 100~300차원 정도의 **'잠재 의미 공간'**으로 압축합니다. 이 압축된 공간에서는 의미가 비슷한 단어와 문서들이 서로 가까운 위치에 놓이게 됩니다.


3. 주성분 분석 (PCA)과의 관계

주성분 분석(PCA) 역시 데이터의 차원을 축소하는 대표적인 기법입니다. 데이터가 가장 넓게 퍼져있는(분산이 가장 큰) 방향을 새로운 축(주성분)으로 삼는 방식이죠.

결론부터 말하면, SVD는 PCA를 수행하는 매우 강력하고 일반적인 도구입니다. 데이터의 평균을 0으로 맞춘 후 SVD를 적용하면, 그 결과가 PCA를 수행한 것과 수학적으로 매우 유사합니다.

시험 대비 포인트: "LSA는 DTM에 SVD를 적용하여 차원을 축소하고 잠재 의미를 분석하는 것이고, PCA와 SVD는 모두 데이터의 핵심을 파악하여 차원을 축소하는 데 사용되는 강력한 기법이다" 라고 정리해두시면 됩니다.

 

1. LSA의 정의: 그래서 최종 결과물은 무엇인가? (★★★★★)

이 부분이 시험에 나올 확률이 가장 높습니다. LSA를 통해 얻어지는 단어와 문서의 벡터(좌표)를 어떻게 계산하는지 묻는 문제입니다.

우선, LSA는 거대한 단어-문서 행렬(DTM) Truncated SVD를 적용합니다.

여기서 는 우리가 남기기로 선택한 핵심 주제(Topic)의 개수입니다. 이렇게 분해된 행렬들을 조합하여 최종적인 단어와 문서의 임베딩 벡터를 만듭니다.

  • 문서 임베딩 (Document Embedding) =
    • 는 **'각 문서가 k개의 주제와 얼마나 관련 있는가'**를 나타내는 행렬입니다.
    • 는 **'k개 각 주제가 전체에서 얼마나 중요한가'**를 나타내는 행렬입니다.
    • 따라서 이 둘을 곱하면, 각 주제의 중요도가 반영된 최종 문서 벡터가 완성됩니다. 이 벡터가 바로 압축된 '의미 공간'에서의 문서 좌표입니다.
  • 단어 임베딩 (Word Embedding) =
    • 는 **'각 단어가 k개의 주제와 얼마나 관련 있는가'**를 나타내는 행렬입니다.
    • 마찬가지로 여기에 주제의 중요도인 를 곱하여, 각 주제의 중요도가 반영된 최종 단어 벡터를 만듭니다.

암기 팁: "U는 문서(Document)와 생김새가 비슷하니 문서 임베딩에 쓰인다"고 연상하면 헷갈리지 않습니다!


2. LSA의 의도: 왜 이런 복잡한 일을 할까?

LSA의 근본적인 목표, 즉 '의도'는 다음과 같습니다.

  1. 카운트 기반 정보 활용: 일단은 단어의 출현 빈도(DTM)라는 객관적인 정보를 바탕으로 시작합니다.
  2. 문맥 파악: 단순히 단어 하나하나를 보는 것이 아니라, "문서 전체의 문맥을 더 잘 고려하기 위해" 이 모든 과정을 수행합니다.
  3. 핵심 축 발견: 입력된 DTM에서 **가장 중요한 방향(의미 축, 즉 주제)과 그 중요도(크기)**를 계산해냅니다.
  4. 새로운 공간에 표현: 이 중요도 순으로 정렬된 축들을 새로운 좌표계로 삼아, 모든 단어와 문서를 그 공간에 다시 표현(벡터화)합니다.

결론적으로 LSA는 **"단어의 빈도수라는 겉보기 정보 너머에 있는, 문서 집단 전체를 관통하는 숨겨진 의미(주제)를 찾아내기 위함"**입니다.


3. 간단한 예제로 이해하기

이런 단순 출현 횟수 기반 문서-단어 행렬이 LSA의 **입력(Input)**입니다.

  • 문서1: 저는 바나나 싫은
  • 문서2: 저는 바나나 사과 싫은
  • 문서3: 길고 노란 먹고 사과 사과

LSA를 여기에 적용하면 어떤 일이 일어날까요? (k=2, 즉 주제를 2개 찾는다고 가정)

  • LSA는 이 문서들 속에서 '과일'이라는 주제와 '감정/취향'이라는 두 가지 핵심 주제를 발견할 수 있습니다.
  • '바나나'와 '사과'는 '과일'이라는 주제 축에서 높은 값을 가지므로, 최종 벡터 공간에서 서로 가까운 위치에 놓이게 됩니다. (비록 이 예제에서는 같이 등장한 문서가 있지만, LSA는 전혀 다른 문서에 등장해도 문맥이 비슷하면 가깝게 만듭니다.)
  • '문서1'과 '문서2'는 두 주제 모두와 관련이 있으므로, 두 문서의 벡터는 서로 가깝게 표현될 것입니다.

시험 대비 최종 요약

  • LSA의 목표: DTM에 숨어있는 **잠재적인 의미(주제)**를 찾아내어, 단어와 문서를 저차원의 의미 공간에 표현하는 것.
  • 핵심 연산: Truncated SVD ()
  • 최종 결과물 (★★★★★):
    • 문서 임베딩 벡터 =
    • 단어 임베딩 벡터 =
  • 효과: 이 과정을 통해 의미적으로 유사한 단어들은 벡터 공간에서 가까운 값으로 표현된다.

 

1단계: SVD 연산 수행 (데이터 분해)

가장 먼저 할 일은 이전 예제에서 만들었던 **문서-단어 행렬 (DTM)**을 SVD를 이용해 세 개의 행렬로 분해하는 것입니다.

  • 코드 설명 (Slide 31 & 32):
    1. A는 우리의 원본 DTM입니다. (4개의 문서, 9개의 단어)
    2. np.linalg.svd(A)를 실행하면 U, s, VT가 나옵니다.
      • U: 문서와 관련된 정보를 담은 행렬 (4x4 크기)
      • s: **특잇값(Singular Value)**들의 리스트 (배열). 행렬의 대각선 값들만 뽑아놓은 것입니다. 데이터의 잠재된 주제(Topic)들의 중요도를 의미합니다.
      • VT: 단어와 관련된 정보를 담은 행렬 (9x9 크기)
    3. np.allclose(A, np.dot(np.dot(U, S), VT)) 코드는 분해된 를 다시 곱해서 원본 A와 일치하는지 확인하는 과정입니다. True가 나왔다는 것은 SVD 분해가 수학적으로 완벽하게 이루어졌음을 의미합니다.

2단계: 낮은 계수로 근사 (핵심 정보 압축) ★★★

이것이 LSA의 가장 핵심적인 부분입니다. SVD로 분해한 모든 정보를 사용하는 것이 아니라, **가장 중요한 정보만 남기고 나머지는 버려서 데이터를 압축(차원 축소)**합니다.

  • 코드 설명 (Slide 33 & 34):
    1. k = 2 라고 설정합니다. 이것은 **"가장 중요한 상위 2개의 주제만 사용하겠다"**는 의미입니다.
    2. U, s, VT 행렬에서 상위 2개 주제에 해당하는 부분만 잘라냅니다(slicing).
      • U는 4x4에서 4x2로 크기가 줄어듭니다.
      • s는 4개 값에서 2개 값만 남습니다.
      • VT는 9x9에서 2x9로 크기가 줄어듭니다.
    3. 이렇게 잘라낸 행렬들로 원본 A를 복원하면 A_prime이 됩니다.
    4. A와 A_prime을 비교해보면, 값이 똑같지는 않지만 원본의 특징을 어느 정도 유지하고 있는 것을 볼 수 있습니다. 약간의 정보를 잃는 대신, 9차원 데이터를 2차원으로 압축하는 데 성공한 것입니다. 이것이 바로 Truncated SVD (절단된 SVD) 입니다.

3단계: 문서 및 단어 임베딩 계산 (최종 결과 도출)

이제 압축된 정보(잘라낸 )를 사용해 우리가 진짜 원했던 **문서와 단어의 새로운 좌표(벡터)**를 계산합니다.

  • 코드 설명 (Slide 35 - 문서 임베딩):
    • np.dot(U, S): 잘라낸 를 곱합니다. (공식: )
    • 결과: 4개의 문서가 각각 **2개의 숫자(2차원 벡터)**로 표현됩니다. 예를 들어 첫 번째 문서는 [-0.64, 1.53] 이라는 새로운 좌표를 갖게 됩니다.
  • 코드 설명 (Slide 36 - 단어 임베딩):
    • np.dot(S, VT): 잘라낸 를 곱합니다. (공식: )
    • 결과: 9개의 단어들도 각각 2차원 벡터로 표현됩니다.

최종 결론 및 시험 포인트

  • 임베딩 벡터의 의미: 새롭게 얻은 [-0.64, 1.53] 같은 벡터의 각 차원(첫 번째 숫자, 두 번째 숫자)이 정확히 무엇을 의미하는지 우리는 알 수 없습니다.
  • 토픽 모델링: 하지만 비슷한 벡터 값을 갖는 문서나 단어들을 그룹으로 묶어보면, "아, 첫 번째 차원은 '과일'과 관련된 주제를 나타내는구나", "두 번째 차원은 '감정'과 관련된 주제를 나타내는구나" 하고 숨겨진 주제(Topic)를 추론할 수 있습니다. 이것이 토픽 모델링의 기본 원리입니다.

시험 요약: "LSA는 DTM에 SVD를 적용한 뒤, Truncated SVD를 이용해 k개의 주요 정보만 남겨 차원을 축소하고, 최종적으로 ****와 ****를 계산하여 각각 문서와 단어의 저차원 임베딩 벡터를 얻는 기술이다." 이 문장만 완벽히 이해하시면 됩니다! 🚀

 

LSA의 한계점 (Limitations)

LSA의 한계는 크게 **'재료의 한계'**와 '기술의 한계' 두 가지로 나눌 수 있습니다.


1. 재료(입력)의 한계: 카운트 기반 행렬의 문제

LSA는 시작점, 즉 재료가 되는 단어-문서 행렬(DTM)의 단점을 그대로 물려받습니다.

  • 단어 순서, 문법 무시
    • DTM은 단어가 몇 번 나왔는지만 셀 뿐, 순서는 고려하지 않습니다. (이를 'Bag of Words' 모델이라고 합니다)
    • 예시: "강아지가 사람을 물었다"와 "사람이 강아지를 물었다"는 DTM에서는 거의 동일하게 표현되어 LSA도 두 문장의 엄청난 의미 차이를 구분하지 못합니다.
  • 동음이의어(Polysemy) 구분 불가
    • LSA는 모든 단어를 단 하나의 벡터로만 표현합니다. 따라서 여러 의미를 가진 단어는 모든 의미가 뒤섞인 애매한 평균값의 벡터를 갖게 됩니다.
    • 예시: "맛있는 사과를 먹었다"의 '사과(apple)'와 "잘못을 사과했다"의 '사과(apology)'를 LSA는 같은 단어로 취급하여 동일한 벡터로 표현합니다.

2. 기술(SVD 및 모델)의 한계

LSA가 사용하는 핵심 기술인 SVD와 모델 자체의 구조적 문제입니다.

  • SVD의 높은 계산 비용
    • SVD는 행렬이 커질수록(문서나 단어가 많아질수록) 계산량이 기하급수적으로 늘어납니다.
    • 결론: 수백만 개의 문서 같은 대규모 데이터에는 적용하기 비효율적입니다. 🐢
  • 새로운 데이터 추가의 어려움
    • 새로운 문서나 단어가 추가되면, 처음부터 전체 DTM을 다시 만들어 SVD 계산을 전부 재수행해야 합니다.
    • 결론: 실시간으로 데이터가 변하는 환경에서는 사용하기 매우 어렵습니다. 업데이트가 불가능하고 항상 전체를 재학습해야 합니다.
  • 결과의 낮은 해석 가능성
    • LSA가 찾아낸 잠재 의미(Topic) 벡터는 그냥 숫자의 나열일 뿐입니다. 이 벡터의 각 차원이 "아, 이건 '스포츠'에 대한 차원이구나" 하고 사람이 직관적으로 이해하기 매우 어렵습니다.
  • 문맥에 따른 의미 변화 반영 불가 (정적 표현)
    • 이는 '동음이의어' 문제와 직결됩니다. LSA로 만들어진 단어 벡터는 어떤 문장에 쓰이든 항상 고정된 값을 가집니다 (Static Word Embedding).
    • 결론: "은행에서 돈을 찾다"와 "강둑(bank)을 걷다"에서 'bank'는 문맥에 따라 의미가 완전히 다르지만, LSA는 이를 반영하지 못하고 항상 똑같은 벡터를 사용합니다.
  • 선형 관계만 표현 가능
    • SVD는 기본적으로 데이터를 선형적으로 변환하는 기법입니다.
    • 결론: 단어와 의미 사이의 복잡하고 비선형적인 관계를 잡아내는 데 한계가 있습니다.

시험 대비 최종 요약 (★★★★★)

한계점 종류 문제점 핵심 키워드
입력 데이터 단어 순서/문법/동음이의어(다의어)를 처리하지 못함 Bag of Words, 동음이의어
계산 비용 SVD는 대규모 데이터에 너무 느리고 비효율적 SVD 계산 비용
확장성 새로운 데이터가 추가되면 처음부터 전체 재계산 필요 재계산, 업데이트 불가
결과 해석 결과로 나온 벡터(잠재 의미)를 사람이 이해하기 어려움 해석의 어려움
표현 방식 문맥에 따라 단어 의미가 변하는 것을 반영 못 함 정적(Static) 표현

LSA의 이러한 단점들 때문에 이후 Word2Vec이나 BERT와 같이 문맥을 파악하고 계산이 효율적인 새로운 단어 임베딩 기술들이 등장하게 되었습니다

+ Recent posts