Загружаем каталог…
Загружаем каталог…
1. 텍스트 임베딩이란? 딥러닝 모델은 문장이나 단어 자체를 그대로 이해하지 못한다. 모델은 숫자 연산을 수행하므로, 자연어 텍스트를 숫자 형태로 변환해야 한다. 예를 들어 다음과 같은 단어가 있다고 하자. 사과, 바나나, 오렌지 컴퓨터는 사과 가 과일이고, 바나나 와 의미적으로 유사하다는 사실을 문자열 자체만으로 알 수 없다. 따라서 각 단어를 숫자로 표현하고, 모델이 학습을 통해 단어 간 관계를 파악할 수 있도록 만들어야 한다. 이처럼 단어·문장·문서를 연속적인 숫자 벡터로 표현하는 방식을 임베딩(Embedding) 이라고 한다. 텍스트 임베딩은 자연어 처리에서 필수적인 표현 방법이며, 대표적으로 다음 내용을 다룬다. 원-핫 인코딩(One-hot Encoding) 워드 임베딩(Word Embedding) 문서 벡터화(Document Vectorization) wikidocs 2. 텍스트를 숫자로 바꾸는 이유 자연어는 비정형 데이터다. 사람이 읽을 수 있는 문자열 형태이지만, 신경망은 벡터와 행렬 같은 수치 데이터를 입력으로 받아야 한다. 예를 들어 다음 문장을 감성 분석 모델에 입력한다고 가정해보자. 이 영화는 정말 재미있다. 모델은 문장을 바로 처리하는 것이 아니라, 보통 아래와 같은 흐름을 거친다. 텍스트 → 토큰화 → 정수 인코딩 또는 원-핫 인코딩 → 임베딩 벡터 → 신경망 모델 입력 → 예측 결과 토큰화는 문장을 단어·형태소·서브워드 등의 단위로 나누는 작업이고, 임베딩은 각 토큰을 숫자 벡터로 변환하는 작업이다. 예를 들어 재미있다 라는 단어는 아래처럼 임베딩 벡터로 표현될 수 있다. [0.15, -0.72, 0.33, 0.91, ...] 실제 임베딩은 수십 차원부터 수백 또는 수천 차원의 벡터로 구성될 수 있다. 각 숫자 하나를 사람이 직접 해석하기는 어렵지만, 벡터 전체의 위치와 방향을 통해 단어 사이의 의미적 관계를 계산할 수 있다. wikidocs 3. 원-핫 인코딩 원-핫 인코딩(One-hot Encoding) 은 단어를 표현하는 가장 기초적인 방법이다. 먼저 전체 단어 집합인 단어 사전(Vocabulary) 을 만든다. 인덱스 단어 0 나는 1 학생 2 입니다 3 딥러닝 4 공부한다 각 단어는 사전에서 자신에게 해당하는 인덱스 위치만 1이고, 나머지는 모두 0인 벡터로 표현된다. 나는 → [1, 0, 0, 0, 0] 학생 → [0, 1, 0, 0, 0] 입니다 → [0, 0, 1, 0, 0] 딥러닝 → [0, 0, 0, 1, 0] 공부한다 → [0, 0, 0, 0, 1] 벡터 안에서 1이 단 하나만 존재하기 때문에 원-핫 벡터라고 부른다. from tensorflow.keras.preprocessing.text import Tokenizer sentences = [ "나는 딥러닝을 공부한다", "나는 자연어 처리를 공부한다" ] tokenizer = Tokenizer() tokenizer.fit_on_texts(sentences) print(tokenizer.word_index) 출력 예시는 다음과 같다. { '나는': 1, '공부한다': 2, '딥러닝을': 3, '자연어': 4, '처리를': 5 } 원-핫 인코딩은 단어를 명확하게 구분할 수 있지만, 실제 자연어 처리에서는 여러 한계가 있다. 4. 원-핫 인코딩의 한계 희소 벡터 문제 단어 사전의 크기가 커질수록 원-핫 벡터의 차원도 커진다. 예를 들어 단어가 100,000개라면 하나의 단어를 표현하기 위해 길이가 100,000인 벡터가 필요하다. 하지만 실제 값은 대부분 0이고 단 하나의 위치만 1이다. [0, 0, 0, 0, ..., 0, 1, 0, ..., 0] 이처럼 대부분이 0으로 채워진 벡터를 희소 벡터(Sparse Vector) 라고 한다. 희소 벡터는 메모리와 연산 측면에서 비효율적이다. 단어 수가 늘수록 벡터 차원이 계속 증가하므로 대규모 텍스트 데이터에 그대로 적용하기 어렵다. 단어 간 의미 관계를 표현하지 못함 원-핫 벡터에서는 서로 다른 단어의 유사도를 표현하기 어렵다. 예를 들어 다음 단어들을 비교해보자. 고양이, 강아지, 자동차 사람은 고양이 와 강아지 가 동물이라는 점에서 의미적으로 더 가깝고, 자동차 와는 거리가 멀다고 판단한다. 그러나 원-핫 벡터 관점에서는 모든 단어가 서로 독립된 차원에 위치한다. 따라서 고양이 와 강아지 의 거리도, 고양이 와 자동차 의 거리도 동일하게 계산된다. 즉, 원-핫 인코딩은 단어의 동일성 은 구분하지만 단어의 의미적 유사성 은 담지 못한다. 5. 워드 임베딩 워드 임베딩(Word Embedding) 은 단어를 밀집된 실수 벡터(Dense Vector)로 표현하는 방법이다. 원-핫 인코딩과 달리 워드 임베딩은 단어 사전 크기보다 훨씬 작은 차원의 벡터를 사용한다. 사과 → [ 0.12, -0.08, 0.45, 0.31] 바나나 → [ 0.10, -0.05, 0.41, 0.29] 자동차 → [-0.72, 0.61, -0.33, 0.18] 위 숫자는 설명을 위한 예시다. 실제 값은 학습 과정에서 자동으로 결정된다. 사과 와 바나나 의 벡터 값이 비슷하고, 자동차 는 다른 방향에 위치한다면 모델은 과일 관련 단어들이 의미적으로 가깝다는 패턴을 학습할 수 있다. 워드 임베딩의 장점은 다음과 같다. 단어 사전 크기보다 훨씬 작은 차원으로 표현할 수 있다. 희소 벡터 문제를 완화할 수 있다. 학습 데이터의 문맥을 바탕으로 단어 간 유사성을 반영할 수 있다. 코사인 유사도와 같은 방법으로 단어 벡터 간 유사도를 계산할 수 있다. 딥러닝 모델의 입력으로 효율적으로 활용할 수 있다. wikidocs 6. 임베딩 레이어 딥러닝에서는 Embedding 레이어를 통해 단어 인덱스를 임베딩 벡터로 변환한다. 입력으로 단어 자체가 아니라 정수 인코딩된 단어 인덱스를 받는다는 점이 중요하다. import torch import torch.nn as nn vocab_size = 10000 embedding_dim = 128 embedding = nn.Embedding( num_embeddings=vocab_size, embedding_dim=embedding_dim ) input_ids = torch.tensor([ [1, 25, 103, 8], [7, 15, 0, 0] ]) embedded = embedding(input_ids) print(embedded.shape) 출력 텐서의 크기는 다음과 같다. torch.Size([2, 4, 128]) 차원 의미 2 배치 크기 4 시퀀스 길이 128 임베딩 차원 각 단어 인덱스는 길이 128의 밀집 벡터로 변환된다. 이 임베딩 벡터의 값은 학습 과정에서 손실 함수를 최소화하는 방향으로 업데이트된다. 7. Word2Vec Word2Vec은 주변 단어의 문맥을 활용해 단어 임베딩을 학습하는 대표적인 방법이다. 기본 아이디어는 특정 단어가 등장했을 때 주변에 어떤 단어들이 함께 등장하는지를 학습하면, 의미적으로 비슷한 단어가 유사한 벡터 공간에 배치될 수 있다는 것이다. 대표적인 구조는 다음 두 가지다. 모델 입력 예측 대상 CBOW(Continuous Bag of Words) 주변 단어 중심 단어 Skip-gram 중심 단어 주변 단어 예를 들어 아래 문장을 보자. 나는 딥러닝을 공부한다. 딥러닝을 이 중심 단어라면, CBOW는 주변 단어인 나는 , 공부한다 를 활용해 딥러닝을 을 예측한다. 반대로 Skip-gram은 딥러닝을 을 입력받아 주변 단어를 예측한다. Word2Vec은 비슷한 문맥에서 사용되는 단어를 가까운 벡터로 학습한다. 그래서 단어 간 유사도 검색, 추천, 문서 분류, 검색 시스템의 특징 추출 등에 활용할 수 있다. wikidocs 8. 문서 벡터화 단어뿐 아니라 문장과 문서도 벡터로 표현할 수 있다. 이를 문서 벡터화(Document Vectorization) 라고 한다. 문서 벡터화 방식은 크게 전통적인 통계 기반 방법과 신경망 기반 임베딩 방법으로 구분할 수 있다. 방법 핵심 아이디어 특징 BoW 단어의 등장 여부 또는 빈도 사용 단순하지만 단어 순서를 반영하지 못함 DTM 문서별 단어 빈도를 행렬로 표현 문서 분류·분석의 기본 표현 TF-IDF 문서 내 중요 단어에 가중치 부여 검색·키워드 분석에 자주 활용 평균 임베딩 문서 내 단어 임베딩의 평균 사용 간단하지만 어순과 문맥 손실 가능 Doc2Vec 문서 자체의 벡터를 함께 학습 문서 유사도·분류에 활용 가능 Transformer 기반 임베딩 문맥을 고려한 문장·문서 벡터 생성 의미 검색, RAG, 문서 군집화 등에 활용 예를 들어 금융 뉴스나 공시 문서를 분석한다면, 단순 키워드 빈도만 사용할 수도 있지만 문장의 맥락이 중요하다면 Transformer 기반 문장 임베딩을 활용하는 편이 유리할 수 있다. 9. 임베딩 활용 예시 임베딩은 자연어 처리의 다양한 작업에 활용된다. 감성 분석: 리뷰·뉴스·커뮤니티 글을 긍정, 부정, 중립 등으로 분류 문서 분류: 뉴스 기사, 고객 문의, 금융 공시, 계약서 등을 주제별로 분류 의미 기반 검색: 키워드가 완전히 일치하지 않아도 유사한 의미의 문서 검색 추천 시스템: 사용자 행동, 상품 설명, 콘텐츠 텍스트를 벡터화해 유사 항목 추천 챗봇과 RAG: 질문과 문서를 임베딩하여 관련 문서를 검색한 뒤 LLM에 제공 이상 탐지: 정상 문서와 의미적으로 크게 다른 텍스트를 탐지 예를 들어 “기준금리 인상 가능성”이라는 질문을 검색할 때, 임베딩 기반 검색은 문장에 같은 단어가 없더라도 “통화 긴축”, “금리 상향”, “중앙은행의 매파적 기조”와 관련된 문서를 유사하게 찾는 데 활용될 수 있다. 10. 정리 텍스트 임베딩은 단어·문장·문서를 딥러닝 모델이 처리할 수 있는 숫자 벡터로 변환하는 방법이다. 원-핫 인코딩은 단어를 구분하기 쉽지만, 차원이 커지고 희소하며 단어 간 의미 관계를 표현하지 못한다. 워드 임베딩은 단어를 저차원의 밀집 벡터로 표현해 메모리 효율성과 의미적 유사성 표현을 개선한다. 임베딩 레이어는 정수 인코딩된 토큰을 학습 가능한 벡터로 변환한다. Word2Vec의 CBOW와 Skip-gram은 주변 문맥을 이용해 단어 임베딩을 학습한다. 문서도 BoW, TF-IDF, Doc2Vec, Transformer 기반 방식 등으로 벡터화할 수 있다. 임베딩은 문서 분류, 유사도 검색, 추천 시스템, 챗봇, RAG 등 현대 NLP 시스템의 핵심 구성 요소다.
То, что RADAR обнаружил и классифицировал для этой возможности. Это опубликованный источником текст, а не подтверждение, что предложение ещё действует.
4.4 nn.Embedding. 1. 텍스트 임베딩이란? 딥러닝 모델은 문장이나 단어 자체를 그대로 이해하지 못한다. 모델은 숫자 연산을 수행하므로, 자연어 텍스트를 숫자 형태로 변환해야 한다. 예를 들어 다음과 같은 단어가 있다고 하자. 사과, 바나나, 오렌지 컴퓨터는 사과 가 과일이고, 바나나 와 의미적으로 유사하다는 사실을 문자열 자체만으로 알 수 없다. 따라서 각 단어를 숫자로 표현하고, 모델이 학습을 통해 단어 간 관계를 파악할 수 있도록 만들어야 한다. 이처럼 단어·문장·문서를 연속적인 숫자 벡터로 표현하는 방식을 임베딩(Embedding) 이라고 한다. 텍스트 임베딩은 자연어 처리에서 필수적인 표현 방법이며, 대표적으로 다음 내용을 다룬다. 원-핫 인코딩(One-hot Encoding) 워드…
Открыть источник