본문 바로가기

7. ML | DL | NLP

6/27(화) IT K-DT(79일차) / 3. 임베딩(embedding) (1)

 

 

3. 임베딩(embedding)

 

3-1. 자연어의 특성

* 자연어를 기계가 처리하도록 하기 위해서는

  먼저 자연어를 기계가 이해할 수 있는 언어로 바꾸는 방법을 알아야 함.
* 토큰화 작업의 결과인 단어사전을 기계가 이해할 수 있는 언어로 표현하는 과정.

 

3-1-1. 단어의 유사성과 모호성

* 대부분의 언어에서 단어의 의미는 유사성과 모호성을 가짐.

  단어는 겉으로 보이는 형태인 표제어 안에 여러가지 의미를 담고 있음.
* 대부분의 사람은 주변 정보에 따라 숨겨진 의미를 파악하고 이해할 수 있으나,

  기계는 학습의 부재 또는 잘된 데이터로 의미를 파악하지 못하는 경우가 있음.
* 한가지 형태의 단어에 여러 의미가 포함되어 생기는 문제를 갖는 중의성 문제는 자연어 처리에서 매우 중요.
  1) 동형어와 다의어
    - 동형어: 형태는 같으나 뜻이 서로 다른 단어


    - 다의어: 하나의 형태가 여러 의미를 지니면서도 그 의미들이 서로 관련이 있는 단어


  2) 동의어 : 서로 다른 형태의 단어들이 동일한 의미를 가지는 단어

      (예: "아버지"와 "아빠"는 서로 다른 형태의 단어이지만, 동일한 의미인 "아버지"를 가리킴.)
  3) 상위어와 하위어
    - 상위어: 상위 개념을 가리키는 단어

      (예: 예를 들어, "과일"은 "사과", "배", "오렌지"와 같은 하위어를 포함하는 상위어.)
    - 하위어: 하위 개념을 가리키는 단어

      (예: 위의 예시에서 "사과", "배", "오렌지"는 "과일"이라는 상위어에 속하는 하위어.)

 

3-1-2. 언어의 모호성 해소

1) 지식 기반 단어 중의성 해소:
사전에 구축된 지식 또는 언어의 규칙을 활용하여 단어의 중의성을 해결하는 방법.

이 방법은 주어진 문맥에서 단어의 의미를 결정하기 위해 도메인 지식이나 문법적인 규칙 등을 활용함.

예를 들어, "배"라는 단어가 주어진 문맥에서 과일인지 배를 타는 수단인지를 판단하기 위해,

해당 문맥에서 "배"가 주로 어떤 의미로 사용되는지에 대한 지식을 활용함.

이 방법은 전문적인 지식이나 언어의 문법적인 특성을 활용할 수 있어 일부 경우에 유용함.

하지만 모든 중의성을 해결하기에는 한계가 있음.

2) 지도학습 기반 단어 중의성 해소:
기계 학습 알고리즘을 활용하여 단어의 중의성을 해결하는 방법.

이 방법은 주어진 맥락과 함께 주어진 단어를 입력으로 하고, 올바른 의미를 출력으로 하는 모델을 학습시킴.

학습 데이터에는 문맥과 단어의 의미가 쌍으로 포함되어 있어야 함.

예를 들어, "배"라는 단어와 해당 문맥이 함께 주어졌을 때,

"배"가 과일인지 수단인지를 정확히 분류하는 모델을 학습시킴.

이후에는 학습된 모델을 사용하여 새로운 문장이 주어졌을 때 단어의 중의성을 해소할 수 있음.

지도학습 기반 단어 중의성 해소는 대규모의 레이블된 데이터가 필요하며,

모델의 성능은 학습 데이터의 품질과 다양성에 크게 의존함.

 

3-2. 임베딩 구축 방법

 

3-2-1. 임베딩(embedding)의 정의

일반적으로 고차원의 데이터를 저차원의 벡터로 변환하는 기법을 의미.

이는 특히 자연어 처리나 이미지 처리 분야에서 널리 사용되며,

데이터의 의미와 특징을 보존하면서도 차원 축소와 정보 압축을 가능하게 함.
여기서는 자연어 처리에서의 임베딩에 대해 설명.


자연어 처리에서의 임베딩:
단어나 문장을 수치화된 벡터 형태로 표현하는 기법.

이를 통해 컴퓨터가 텍스트를 이해하고 처리할 수 있는 형태로 변환됨.

예를 들어, Word2Vec, GloVe, FastText와 같은 알고리즘은 단어 임베딩을 생성하는데 사용됨.

이러한 임베딩은 단어의 의미와 문법적 특성을 포착하도록 학습되어

유사한 의미를 가진 단어들이 유사한 벡터 공간에서 가까이 위치하게 됨.

 

3-2-2. 임베딩의 역할

자연어 처리에서 임베딩은 의미적인 정보의 함축과 전이 학습에 중요한 역할을 함.

 

1) 의미적인 정보의 함축:
단어나 문장의 의미를 저차원의 벡터로 표현함으로써 의미적인 정보를 함축함.

임베딩은 단어들 간의 유사성을 측정할 수 있으며, 유사한 의미를 가진 단어들이 벡터 공간에서
가까이 위치하게 됨.

이를 통해 단어 간의 관계를 파악하고, 단어의 의미적인 유사성을 계산하는 등

다양한 자연어 처리 작업에 활용할 수 있음.

임베딩은 단어의 의미를 수학적으로 표현하는 방법으로,
단어 간의 의미적 관련성을 기반으로 한 작업들에 큰 도움을 줌.


유추평가(Word Analogy Task):
자연어 처리에서 사용되는 평가 방법 중 하나로, 단어 간의 의미적 관계를 파악하고 추론하는 능력을 측정하는 작업.
이 작업은 주어진 단어 쌍의 관계를 이해하고, 이 관계를 이용하여 빠진 단어를 예측하는 것을 목표로 함.

유추평가는 일반적으로 "A는 B와 같은 관계이다. C는 무엇과 같은 관계일까?"라는 형태의 문제로 이루어짐.
즉, A와 B 사이의 의미적인 관계를 파악하고, 이 관계를 C에 적용하여 빠진 단어를 추론해야 함.
이를 통해 모델이 단어 간의 의미적인 유사성과 패턴을 파악할 수 있는지를 평가할 수 있음.

예를 들어, "man은 woman과 같은 관계이다. king은 무엇과 같은 관계일까?"라는 유추평가 문제가 있다면, 
정답은 "queen"이다. 여기서 "man"과 "woman"은 성별 관계를 가지고 있으며, "king"은 "queen"과 같은 관계를 가지고 있다.
따라서 모델은 이러한 관계를 이해하고 "queen"을 정확히 추론해야 한다.

유추평가는 단어 간의 의미적 유추 능력을 평가하는 데 사용되며, 임베딩 모델이나 워드 벡터 모델의 성능을 평가하는 데 
널리 사용됨. 유추평가 데이터셋에는 다양한 의미 관계가 포함되어 있어서 모델이 단어 간의 유사성, 반의어, 상위어-하위어 관계, 동의어 관계 등 다양한 유형의 관계를 파악할 수 있는지를 평가할 수 있음.

유추평가는 모델의 의미적 이해력과 추론 능력을 평가하는 중요한 방법 중 하나이며, 
자연어 처리 분야에서 모델의 성능을 비교하고 개선하는 데 활용됨.

한국어의 유추평가 예시 웹사이트: https://word2vec.kr/search/ 

 

Korean Word2Vec

ABOUT 이곳은 단어의 효율적인 의미 추정 기법(Word2Vec 알고리즘)을 우리말에 적용해 본 실험 공간입니다. Word2Vec 알고리즘은 인공 신경망을 생성해 각각의 한국어 형태소를 1,000차원의 벡터 스페이

word2vec.kr

 

2) 전이 학습(Transfer Learning):
전이 학습은 한 작업에서 학습한 지식을 다른 작업에 적용하는 기법.

임베딩은 전이 학습에 유용하게 활용될 수 있음.

일반적으로 큰 규모의 데이터로 사전 학습된 임베딩 모델을 사용하여 다른 작업에 적용할 수 있음.

사전 학습된 임베딩은 대규모의 텍스트 데이터로 미리 학습된 상태이므로,

단어의 의미를 잘 캡처하고 일반화된 특징을 가지고 있음.

이를 통해 적은 양의 데이터로도 효과적인 모델 학습이 가능하며, 학습 속도와 성능을 향상시킬 수 있음.


파인튜닝(Fine-tuning):
기계 학습에서 사전에 학습된 모델을 새로운 작업에 맞게 세부 조정하는 과정을 말함.
자연어 처리에서의 파인튜닝은 사전에 학습된 언어 모델을 새로운 자연어 처리 작업에 맞게 조정하는 과정을 의미.
주로 대규모 텍스트 데이터에서 사전 학습된 모델을 사용하고, 이를 특정 작업에 맞게 세부 조정하여
해당 작업에 더 적합한 모델로 만듦.

자연어 처리에서 파인튜닝의 단계:
1) 사전에 학습된 언어 모델 선택:
파인튜닝을 위해 일반적으로 대규모 텍스트 데이터에서 사전 학습된 언어 모델을 선택함. (GPT, BERT, RoBERTa)
이러한 모델들은 일반적인 언어 이해 및 생성 작업에 대해 이미 많은 양의 데이터로 학습된 상태임.

2) 모델 아키텍처 수정:
선택한 언어 모델의 아키텍처를 특정 작업에 맞게 수정. (추가적인 레이어의 추가, 출력층의 조정, 입력 포맷의 변경)
수정된 아키텍처는 특정 작업의 특징과 요구 사항에 더 적합하도록 설계됨.

3) 파라미터 초기화 및 학습:
수정된 모델의 파라미터를 초기화하고, 새로운 작업에 대한 데이터셋을 사용하여 모델을 학습함.
파인튜닝 단계에서는 일반적으로 사전 학습 단계에서 학습한 파라미터를 유지하면서 새로운 작업에 맞게 파라미터를 조정함.
작은 규모의 특화된 데이터셋으로 모델을 추가적으로 학습시키며 이를 통해 모델은 새로운 작업에 대한 특징을 학습하고,
해당 작업에서 더 좋은 성능을 발휘할 수 있도록 조정됨.

자연어 처리에서 파인튜닝의 적용:
문장 분류 (Sentence Classification)
감정 분석 (Sentiment Analysis)
개체명 인식 (Named Entity Recognition)
기계 번역 (Machine Translation)
질의 응답 (Question Answering)
텍스트 생성 (Text Generation)
자연어 이해 (Natural Language Understanding)

 

3-2-3. 임베딩에 사용되는 통계적 가설

어떤 단어가 얼마나 많이 쓰이는가?
어떤 단어가 같이 쓰이는가?
어떤 순서로 등장하는가?

 

3-2-4. 출현 빈도에 따른 구축 방법

1) 원 핫 인코딩(One Hot Encoding)

자연어를 0과 1로 구별하는 인코딩 방법.
표현하고 싶은 단어의 인덱스에 1의 값을 부여하고 나머지는 0을 부여하는 벡터 표현 방식.
단어의 유사도를 표현하지 못함.

데이터가 대량일 경우, 희소 문제(sparsity problem)의 발생 가능


희소 문제(Sparsity problem):
데이터에서 관측되는 값 중 대부분이 0 또는 매우 작은 값을 가지는 현상을 의미.
희소 문제는 다양한 분야에서 발생할 수 있으며, 특히 대규모 데이터셋이나 고차원 데이터에서 주로 관찰됨.

자연어는 매우 다양한 단어들로 구성되며, 특정 작업을 위해 사용되는 텍스트 데이터에서는
한 문장이나 문서에서 사용되는 단어들의 조합이 제한적일 수 있음.
이로 인해 대부분의 단어들은 해당 문장 또는 문서에서 나타나지 않거나 매우 드물게 나타날 수 있음.
이러한 희소성은 단어 임베딩, 행렬 분해, 통계적 모델링 등의 자연어 처리 작업에서 문제를 일으킬 수 있음.

희소 문제는 자연어 처리에서 모델의 성능을 저하시킬 수 있음. 
희소한 데이터는 모델의 학습과 일반화를 어렵게 만들 수 있으며, 정보의 손실이나 잘못된 판단을 초래할 수 있음.

희소 문제를 해결하기 위해 자연어 처리에서는 다양한 방법을 사용.
예를 들어, 단어 임베딩 기법이나 차원 축소 기법을 사용하여 희소성을 줄이고, 보정이나 가중치 조정을 수행하는 등의 방법을
활용. 또한, 희소성을 고려한 모델 아키텍처나 정규화 기법을 적용하여 성능을 향상시킬 수도 있음.

 

2) 단어 가방(Bag of words)

단어 가방(Bag of Words) 접근 방식의 기본 아이디어는 

주어진 텍스트 문서에서 "가방" 또는 단어들의 컬렉션을 생성하는 것임.

문법과 단어 순서를 무시하고 각 단어의 발생 빈도만 고려.

이러한 표현은 "벡터" 또는 "특성 벡터"라고 불리며, 각 차원은 말뭉치(corpus) 내의 고유한 단어에 해당함.

단어 가방 모델 작동 단계:
1) 말뭉치 생성:

텍스트 문서의 컬렉션인 "말뭉치"를 수집. 이 문서의 컬렉션은 문장, 단락 또는 전체 문서일 수 있음.
2) 토큰화:

말뭉치 내 각 문서를 개별 단어 또는 토큰으로 분할.  토큰화는 문장 부호를 제거하고 모든 단어를 소문자로 변환하는 작업(예: "apple"과 "Apple"을 동일한 단어로 처리) 및 어간/표제어 추출과 같은 전처리 작업 수행.
3) 어휘 구축:

말뭉치 전체에서 모든 고유한 단어를 수집하여 어휘를 생성. 
4) 벡터 표현:

말뭉치 내 각 문서를 표현하는 수치 벡터를 생성.

벡터의 차원은 어휘의 크기와 동일하며, 각 차원은 문서 내 특정 단어의 발생 빈도나 존재 여부를 나타냄.

벡터 내 값들을 결정하는 두 가지 방법:
    1) 빈도 기반: 각 차원의 값은 해당 단어의 문서 내 빈도수.
    2) 이진(Binary): 값은 0 또는 1로, 문서 내 단어의 부재 또는 존재를 나타냄.
5) 특성 추출:

결과로 얻은 벡터는 다양한 기계 학습 알고리즘의 입력으로 사용될 수 있음.

이러한 벡터를 사용하면 알고리즘은 원시 텍스트가 아닌 텍스트 데이터의 수치적 표현을 처리할 수 있음.


3) TF-IDF(Term Frequency-Inverse Document Frequency)

정보 검색과 텍스트 마이닝에서 사용되는 가중치 계산 방법임.

이 방법은 단어의 중요성을 평가하고 문서 내에서의 상대적인 중요도를 나타냄.

단어의 출현 빈도(Term Frequency, TF)와 역문서 빈도(Inverse Document Frequency, IDF)의 곱으로 계산.

TF (단어 빈도)는 특정 문서 내에서 단어가 얼마나 자주 나타나는지를 나타냄.

일반적으로 문서 내에서 단어의 빈도는 단어가 해당 문서에서 중요하다는 신호를 줌.

단어가 문서 내에서 더 자주 나타날수록 해당 단어의 TF 값은 더 크게 됨.

IDF (역문서 빈도)는 특정 단어의 전체 문서 집합에서의 등장 빈도를 나타내는 역수입니다. 

IDF는 단어의 흔함 여부를 측정하는 지표로, 흔하게 등장하는 단어의 IDF 값은 작아지고, 

특정 문서에서만 나타나는 드문 단어의 IDF 값은 커짐.

IDF는 단어의 특이성을 나타내므로, 특정 문서를 나타내는 단어를 강조하는 데 도움을 줌.

이 방법을 사용하면, 문서 내에서 자주 나타나는 단어는 상대적으로 높은 가중치를 가지게 되고,

전체 문서 집합에서 흔한 단어는 상대적으로 낮은 가중치를 가지게 됨.

이렇게 계산된 TF-IDF 값은 문서 간의 단어의 상대적인 중요성을 비교하고,

정보 검색에서 검색 결과의 정확성을 높이는 데 사용될 수 있음.
단어의 중요도를 고려해도 여전히 단어의 빈도를 판단하는 표현 방식이므로 맥락적 유사도를 반영하지 못함.

단어 사전의 규모 자체를 축소하는 방법이 아니기 때문에

단어 사전의 규모가 크다면 높은 계산 복잡도를 요구함.
TF-IDF 관련 블로그: https://heytech.tistory.com/337

 

[NLP] TF-IDF 개념 및 계산 방법(+Python 코드)

본 포스팅에서는 TF-IDF 개념 및 계산 방법에 대해 알아봅니다. 📚 목차 1. TF-IDF 개념 2. TF-IDF 계산방법 2.1. TF(Term Frequency) 2.2. DF(Document Frequency) 2.3. IDF(Inverse Document Frequency) 1. TF-IDF 개념 TF-IDF(Term Freq

heytech.tistory.com