728x90
반응형
SMALL

희소 행렬 (Sparse Matrix) 이란 ?

희소 행렬(Sparse Matrix)은 행렬의 원소 중 대부분이 0으로 채워져 잇는 행렬을 말한다. 반대로 대부분 원소가 0이 아닌 값으로 채워진 행렬은 밀집 행렬(Dense Matrix)이라고 부른다. 

자연어 처리에서 우리가 수만 개의 단어 사전을 가지고 문장을 벡터화하면, 하나의 문장에 포함된 단어는 몇개 되지 않기 때문에 난머지 수만 개의 칸은 모두 0으로 채워지게 된다. 이것이 전형적인 희소 행렬의 예이다. 

-> 희소 행렬은 대부분의 값이 0으로 이루어진 행렬을 의미한다. 

-> 실제 등장한 단어는 몇개 안 되고 나머지는 전부 0 

 

반대 개념:

  • Dense Matrix (밀집 행렬): 값이 대부분 채워져 있음
  • Sparse Matrix (희소 행렬): 대부분이 0

왜 NLP에서 많이 등장할까?

텍스트 데이터를 벡터로 변환할 때 :

 

  • One-Hot Encoding
  • Bag of Words
  • TF-IDF

모두 특징 : 차원은 크고, 값은 대부분 0

 

 

 

희소 행렬의 문제점

왜 데이터 과학자들은 희소 행렬을 경계할까요 ?

  1. 메모리 낭비 : 아무런 정보가 없는 '0'을 저장하기 위해 엄청난 양의 RAM과 저장 공간을 소모한다. 
  2. 연산 효율 저하 : 컴퓨터가 0과 숫자를 곱하거나 더하는 의미 없는 계산을 반복하게 되어 , 모델의 학습 속도가 급격히 느려진다. 
  3. 차원의 저주 : 데이터의 차원은 엄청나게 큰데 정작 유효한 정보는 적어서, 모델이 패턴을 찾기 어려워 진다. 
반응형

 

해결책: 어떻게 처리하나요?

희소 행렬의 문제를 해결하기 위해 크게 두 가지 접근 방식을 사용한다. 

  1. 효율적인 저장 방식 (Compresssed Formats)
    0이 아닌 '진짜 값'이 있는 위치만 기억하는 방식이다. 
    - COO( Coordinate list) : (행, 열, 값)의 형태로 저장한다. 
    - CSR ( Compressed Sparse Row) : 행의 정보를 압축하여 연산 속도를 높인 방식으로, 가장 널리 쓰인다. 
  2. 차원 축소 
    SVD, PCA 등으로 차원 줄이기
    - LSA에서 사용
  3. 밀집 임베딩 (Dense Embedding)
    Sparse  -> Dense 변환 
    우리가 공부핸던 Word2Vec 이나 GloVe가 바로 이 역할을 한다. 수만 차원의 희소 벡터를 128 ~ 768 차원 정도의 작은 밀집 벡터 (Dense Vector)로 압축하여 의미 있는 정보만 남긴다. 

 

 

파이썬 실습: Scipy를 이용한 압축

import numpy as np
from scipy import sparse

# 0이 많은 2차원 배열 생성
dense_matrix = np.array([
    [1, 0, 0, 0],
    [0, 0, 2, 0],
    [0, 0, 0, 0]
])

# CSR 형식으로 압축
sparse_matrix = sparse.csr_matrix(dense_matrix)

print(f"원본 행렬 크기: {dense_matrix.nbytes} bytes")
print(f"압축 후 실제 값 정보:\n{sparse_matrix}")

 

728x90

언제 사용될까?

  • 텍스트 벡터화 (BoW, TF-IDF)
  • 추천 시스템
  • 그래프 데이터
  • 검색 엔진

 

요약: 왜 중요할까요?

희소 행렬을 이해하는 것은 단순히 수학적 개념을 아는 것을 넘어, LLM으 토크나이징과 임베딩 설계의 근거를 이해하는 것과 같다. 우리가 왜 원-핫 인코딩을 버리고 임베딩으로 넘어왔는지, 그 기술적 배경에는 바로 이 '희소성'의 문제가 있었다. 

희소 행렬은 대부분이 0으로 이루어진 데이터 구조이며, NLP에서 매우 흔하게 등장하지만 효율적인 처리가 필수적이다.

-> 희소 행렬은 "정보는 적고 공간은 많이 쓰는 구조"

 

정리

희소 행렬은 텍스트 데이터를 수치화하는 과정에서 자연스럽게 발생하는 구조로, 대부분의 값이 0으로 채워진다. 메모리와 연산 측면에서 비효율적이기 때문에 압축 저장 방식이나 임베딩 기법을 통해 이를 해결한다.

 

제미나이, 챗지피티 등을 이용 하여 작성

728x90
반응형

'LLM' 카테고리의 다른 글

17. CSR ( Compressed Sparse Row)  (0) 2026.05.04
16. COO( Coordinate list)  (0) 2026.04.30
14. 카운트 기반(Count-based) 모델  (0) 2026.04.28
13. GloVe  (0) 2026.04.27
12. Skip-gram  (0) 2026.04.24

+ Recent posts