Topics
- Embedding
- Word embedding
- Sentence embedding
- Sentiment Analysis
Embedding
언어라는 것은 특정 개념을 표현하기 위한 약속의 집합이다. 컴퓨터에게 인간의 언어를 입력하기 위해서는 컴퓨터가 이해할 수 있는 형태로 변경하여야 한다. 컴퓨터는 특정 단어를 숫자의 형태로 받아들이므로 단어를 숫자의 형태로 변형하는 과정이 필요한데 이 과정을 Embedding 이라고 한다.
즉, Embedding 의 정의는 다음과 같다.
- 텍스트 데이터 (글자) 를 벡터 (숫자) 로 변환하는 기술
- 자연어 처리에서 매우 기본적인 과정으로 글에서 유용한 정보를 추출해 분석하는 과정에서 컴퓨터가 이를 처리할 수 있도록 만듦
Embedding 을 진행하기 위한 과정
- 데이터 준비 : 원문 데이터 혹은 다른 소스로부터 데이터를 수집
- Preprocessing : 불용어, 오타 등의 데이터를 제외
- Embedding : 목적에 맞는 embedding algorithm 적용
- Visualization : 필요 시 embedding 결과를 그려보고 이를 확인
Embedding 의 종류
- Word embedding : 하나의 단어를 벡터로 변환
- Sentence embedding : 문장 자체를 벡터로 변환
Embedding 으로부터 얻을 수 있는 결과는 벡터이므로, 벡터가 존재하는 벡터 공간에 표현이 가능하다.
좋은 embedding 이 이루어진다면 비슷한 의미의 단어가 비슷한 공간에 존재할 수 있다.
단어는 다양한 종류의 단어를 포괄하고 단어의 의미를 담은 벡터를 만드려면 고차원으로 표현되어야 한다.
Embedding 발전 과정
1. One-hot encoding
- 0과 1을 통해서 단어를 정의한다. 특정 단어를 표현하는 0위치만 1이고 나머지는 0으로 구성된다
- 단어의 수만큼 크기를 갖는 벡터가 생성됨
- 직관적으로 쉽게 단어를 벡터로 변환이 가능하다
- 단어의 위치 (1이 표현되는 위치)는 설정하기에 따라 다르다
그렇다면, 여기서 말하는 것은 encoding 인데, embedding 과 차이점은 무엇이 있는 것인가?
encoding과 embeddding 의 공통된 특징은 데이터를 새로운 형태로 변환하는 과정이라는 것이다.
차이점은 다음과 같다.
Encoding | Embedding | |
목적 | 데이터를 표준화된 형식으로 변환 변환 과정은 정의가 의미 되어있어서 그 정의에 맞추어 변환을 진행함 |
머신 러닝 모델이 처리하기 쉬운 형태로 변환 |
장점 | 본질적으로 의미가 변하지 않음 압축과 비슷한 과정으로 저장, 데이터 전송에 용이함 데이터의 형식을 변환하는데 중점 |
데이터의 의미적, 문맥적 특성을 모델이 이해할 수 있는 형태로 변환 이를 통해 머신 러닝 모델이 데이터를 더욱 쉽게 분석하고 처리할 수 있음 |
One-hot encoding 에도 한계가 존재한다.
1. 차원의 저주
- 하나의 단어를 표현하는 벡터의 크기는 단어 수와 같은데, 그렇다면 매우 큰 차원을 가질 수 있음
- 차원이 커지면 효율성과 계산 복잡도가 증가함
2. 의미 부재
- 의미적으로 비슷한 단어끼리 비슷한 공간에 존재하지 않음
3. 정보의 희소성
- 특정 단어의 위치만 1이므로 중요한 정보가 매우 희소함
따라서, one-hot encoding 을 대신하여 Distribution Representation 을 사용한다
Distribution Representation (분산 표현)
- 정수가 아닌 실수 (연속적인 값) 로 이루어진 벡터로 embedding 을 진행한다
- 연속적인 실수의 값으로 단어를 변경하면서 데이터의 의미를 여러 Feature 에 걸쳐 분산시켜서 표현함
- 그러므로 다양한 의미와 문맥적 특성을 포착할 수 있다
만일, 이 분산 표현으로 인해 embedding 이 잘 진행된다면 비슷한 의미를 갖는 단어들은 비슷한 공간에 분포될 것이다
따라서, 벡터 공간에서 비슷한 공간에 표현될 수 있다. 또한, 벡터는 같은 차원을 가지면 연산이 가능하므로 의미 차원에서 연산 또한 가능할 수 있다.
Word embedding
1. One-hot encoding
- 문장을 단어의 형태로 분해하여 적용하는데, 이 분해를 tokenize 라고 부른다
- 한 글자씩 분할도 가능하나, 띄어쓰기 단위로도 가능함
- 고유한 단어 집합을 생성하고 그 단어에 독립된 Index 를 부여한다
2. 학습 기반 embedding
Distribution Hypothesis 는 앞서 설명한 분포 표현의 이론적 기반으로 "단어의 의미는 그 단어가 나타나는 문장의 문맥에 의해서 결정된다" 는 생각을 기반으로 하였다. 최신 embedding 기법은 이러한 분포 가설을 기반으로 연구되고 생성된다.
Word2vec
2013년 구글 연구진에 의해 개발된 알고리즘으로 문장 위를 움직이는 슬라이딩 윈도우를 만든다. 이 윈도우는 이동하면서 동일한 개수의 단어를 포함하고 포함된 단어들 사이의 연산을 진행해서 각 단어들을 embedding 한다.
이 알고리즘은 두 가지 방법으로 단어를 벡터로 변환한다.
- CBOW : 이웃한 단어들로 가운데 단어가 무엇인지 예측하는 과정에서 embedding 진행
- Skip-gram : 가운데 단어로 이웃한 단어를 예측하는 과정으로 embedding 진행
Glove (Global vectors for Word Representation)
전체 글에 단어 간 공동 출현 통계를 이용하여 각 단어의 의미를 벡터로 표현한다. 각 단어의 쌍이 얼마나 자주 같이 나타나는지를 기록하고 이 쌍을 "공동출현행렬" 이라고 부른다. 공동으로 자주 출현하는 단어들을 벡터 공간 내 비슷한 위치에 존재하도록 embedding 한다.
딥러닝을 활용한 학습 기반 embedding
- BERT
2018년 구글이 한 연구로, 단어 별 중요도 기반의 모듈을 활용하여 문장의 내적과 외적 관계를 바탕으로 embedding 을 진행하는데 이 과정에서 Word embedding 뿐만 아니라 Sentence embedding 도 생성된다.
- CLIP
2021년 OpenAI 가 한 연구로, 이미지를 설명하는 글에서 이미지와 텍스트의 공동 의미를 embedding 에 활용한 사례이다.
Sentence embedding
문장 자체를 숫자의 형태로 변환하는 과정으로, 단어를 넘어서 문장 자체가 가지고 있는 의미를 벡터로 표현한다. 이것을 이용하여 전반적인 글의 이해, 문맥 파악, 글 생성 등 다양한 자연어 처리 작업을 진행한다.
Word embedding 과 Sentence embedding 으로 embedding 을 나눈 것은 두 가지가 서로 다른 목적과 사용 사례를 기반으로 개발되었기 때문이다. 풀어야 하는 문제를 해결하는 서로 다른 도구라고 볼 수 있다.
Word embedding | Sentence embedding | |
사용 목적 | 단어의 의미, 문맥적 유사성, 동의어 등과 같이 단어 수준에서 의미를 활용하는 경우 | 전반적인 글의 이해, 문맥 파악, 글 생성 등과 같이 문장 혹은 그 이상의 단위에서 정보를 포착하는 경우 |
단점 | 전체적인 문장의 의미르 한번에 포착하기는 어려움 | 많은 자원가 계산이 필요하고 단어 수준의 미묘한 변화를 잡아내기는 어려움 |
문장에 one-hot encoding 적용
Word encoding 과 마찬가지로 각 단어에 독립적으로 indexing 을 진행한다. 그러면 문장에 소속된 각 단어를 해당 단어의 index 위치에 1을 부여하고 나머지는 0으로 채운다.
Word embedding 을 활용한 Sentence embedding
문장은 각 단어들을 기반으로 만들어지는 것으로 각 단어들의 embedding 을 이용하여 sentence embedding 을 생성한다.
각 단어 embedding 의 평균을 활용하는 것이 가장 직관적인 방법이나, 다른 의미의 문장이 서로 비슷하거나 같은 embedding value 를 가질 수 있으므로, TF-IDF 를 활용하여 단어 가중치를 적용해 sentence embedding 을 생성한다. 여기서 말하는 TF-IDF 란 문장 내 단어의 중요도를 나타내는 척도로 이 값을 이용하여 각 단어 embedding 에 가중치를 부여하여 평균 값으로 활용한다.
딥러닝을 활용한 학습 기반 문장 임베딩
sentence embedding 은 word embedding 보다 고차원적인 연산이 필요하므로 딥러닝 모델이 단어를 embedding 하는 과정에서 전체 문장의 의미를 담는 벡터를 생성한다. 문장을 구성하는 각 단어에서 정보를 공급받아서 sentence embedding 을 생성한다.
Sentiment Analysis
감정 분석 (sentiment analysis) 은 텍스트에서 작성자의 감정 상태나 태도를 파악하고 분류하는 과정으로, 텍스트 마이닝과 자연어 처리 (NLP) 분야에 속한다.
주로 긍정적 (Positive), 부정적 (Negative), 중립적 (Neutral) 세 가지 범주를 가지고 있고, 현업에서는 텍스트를 넘어서 다양한 데이터 (그림, 이모티콘 등)를 활용하여 사용자의 감정을 판단한다.
감정 분석 응용
1. SNS 감성 모니터링
SNS 플랫폼 내에 있는 게시글을 분석하여 대중의 감정과 태도를 파악한다. 특정 사건, 제품, 브랜드, 정치적 이슈 등에 대한 대중의 반응을 모니터링하여 이것을 활용해 마케팅 효과를 분석한다.
2. 고객 서비스 분석 및 소비자 인사이트
고객 서비스 대화, 콜 센터 대화 내용, 이메일 등의 분석으로 고객의 만족을 파악하여 고객의 불만을 해결하기 위한 인사이트를 제공한다. 이를 통해 새로운 제품과 서비스를 개발할 때 시장의 요구와 기대를 분석할 수 있다.
3. 헬스 케어 및 의료
환자의 감정 상태를 분석하여 우울증, 불안 장애 등 조기에 징후를 파악할 수 있다.
감정 분석 사례
1. 호텔 리뷰 감정 분석 사례
- 문제 상황
호텔 체인은 지금 기존의 별점 시스템을 넘어서 고객의 세부적인 만족도와 기대를 파악하고자 하는데, 이를 통해 실제 고객의 경험과 감정을 정확하게 반영하고자 한다.
- 사용 데이터
별점을 비롯하여 온/오프라인 고객 리뷰를 분석한다.
- 분석 결과
고객의 세부적인 감정과 평가를 파악하고, 불만 고객으로부터 조용함, 편리함, 청결함과 같이 세부적인 개선 사항을 확인한다.
- 대응
개인화된 호텔 서비스 추천을 제공하고, 고객 경험 개선 및 호텔 서비스 수준을 향상시킨다.
2. 콜 센터 사례
- 문제 상황
실시간으로 고객의 감정을 파악하려고 한다.
- 사용 데이터
콜센터 대화 내용 데이터와 STT 후 텍스트 기반 감정 분석 데이터를 사용한다.
- 분석 결과
고객의 불만과 요구 사항을 실시간으로 파악하고, 고객에게 닥친 문제의 긴급성과 중요성을 평가할 수 있다.
- 대응
고객 서비스의 우선순위를 조정한다.
3. 의류 소매 업체 감정 분석 사례
- 문제 상황
업계 트렌드를 파악하고 경쟁 우위를 확보할 필요가 있고, 고객의 세부적인 감정과 만족도를 이해할 필요가 있다.
- 사용 데이터
TikTok 에서 사용자가 생성한 콘텐츠 데이터를 분석하고, 영상과 댓글을 포함해 주요 트렌드, 고객 선호, 반응 등을 분석한 데이터를 사용한다.
- 분석 결과
고객의 특성과 선호도를 파악하고 연령, 언어, 가격, 소재, 디자인 등의 통찰력을 얻을 수 있다.
- 대응
자사 브랜딩 및 마케팅 전략을 개선하고, 트렌드에 맞는 켐페인 및 경쟁력 강화 전략을 수립할 수 있다.
감정 분석 모델 알고리즘
전처리 과정
텍스트 데이터를 이용하는 분석을 위해서는 분석에 사용할 수 있는 형태로 전처리가 필요하다.
- Tokenize
분석의 기본 단위가 되는 개체 (Token), 즉 의미를 가지고 있는 것으로 분리하는 과정이다. Token의 정의는 문제에 따라 사용자가 정의하기 나름이지만, 문장 자체 혹은 문단 자체가 Token이 되기도 한다.
- Stop words 제거
빈번히 많이 사용되지만 의미는 없어 분석에 도움이 되지 않는 Token 을 제거하는 과정이다. 예를 들자면 "The", "a/an", "and" 를 예시로 들 수 있다. 텍스트 마이닝 분석의 중요한 철학 중 하나가 "많이 나온 Token은 중요한 역할을 한다" 인데, 이 철학에 배반되므로 stop words 를 제거한다. 일반적으로는 stop words 를 사전에 정의하고 해당 단어가 나오면 제거한다.
- Stemming
단어 기반의 Token 을 사용하는 경우 특정 단어를 기본 형태 (어간) 으로 축소하는 과정을 말한다. 접두사나 접미사를 제거하여 단어의 기본 줄기 (stem) 를 찾는 과정이라고 볼 수 있다. 빠르고 간단하게 처리할 수 있지만, 문맥을 고려하지 않아 잘못된 결과를 반환할 수 있다.
- Lemmatization
단어를 의미론적 기본 형태 (Lemma) 로 변환하는 과정이다. 특정 단어의 품사와 문맥을 고려해서 정확한 기본 형태를 찾아낸다. 이 과정은 "Stemming" 에 비해 복잡하고 시간이 오래 걸리지만 정확도가 좋다.
딥러닝을 기반으로 하는 전처리
전통적인 방식에서 중요하게 생각하는 처리 과정을 일부 변형해서 사용한다.
- Tokenize
단어를 더 쪼개는 "Subword" 방식의 Tokenize 를 사용하고, 기반 모델이 선택한 방식을 사용한다.
- Stop Words
딥러닝 모델은 종종 문맥 속에서 단어의 중요성을 자동으로 파악해서, 명시적으로 Stop words 를 제거할 필요성이 적다.
- Stemming & Lemmatization
단어 형태의 표준화는 과정 자체를 딥러닝 모델이 스스로 학습하도록 처리한다.
=> Stop words 와 Stemming, Lemmatization 은 잘 사용하지 않는데, 사람이 인위적으로 제거하려고 하는 것이 정보의 손실이라고 판단하기 때문이다.
'Bootcamp' 카테고리의 다른 글
[Week 14] Day 3 - TIL (1) | 2024.03.05 |
---|---|
[Week 14] Day 1 - TIL (3) | 2024.02.23 |
[Week 11] Day 2 - TIL (1) | 2024.02.06 |
[Week 11] Day 1 - TIL (0) | 2024.02.05 |
[Week 10] Day 1 - TIL (2) | 2024.02.05 |