🤔 단어의 표현
자연어 처리 분야에서 가장 기초이면서 가장 어려운 문제인 것이 단어의 표현이라고 할 수 있습니다.
단어의 의미와 유사성, 모호성 등의 문제가 존재하기 때문입니다.
이번에는 자연어 처리 분야의 단어의 표현에 관하여 공부해보겠습니다.
작성하기에 앞서 [ICT COG Academy] 인공지능 고급(언어)과정을 수강하며 복습을 위해 작성한 글임을 명시합니다.
🔎 단어의 의미와 유사성, 모호성
단어의 의미
단어는 글자로 적을 떄는 하나의 형태를 가지지만 상황에 따라 다른 의미로 사용됩니다.
주변 정보에 따라 숨겨진 의미를 파악, 이해할 수 있습니다.
주변 정보의 부족, 또는 다른 해석에 따라 모호성이 증가합니다.
국어에서 이러한 것을 문맥이라고 배웠던 기억이 납니다.
문맥을 이해하지 못한다면 사람도 제대로 이해하지 못하는 경우가 존재합니다.
아래는 단어의 중의성에 대한 예입니다.
모두 "차" 라는 같은 단어를 사용하지만 세부 의미는 매우 다양합니다.
단어는 그형태를 공유하더라도 서로 다른 뜻을 가진 의미로 구성될 수 있습니다.
단어의 형태들과 내부 의미들이 갖는 관계를 그래프로 나타내면 아래와 같습니다.
사람은 머릿속으로는 내부 잠재 공간의 의미를 받아들이지만 실제로 사용할 때는 현실세계의 단어를 매게체로 사용하여 의미를 전달합니다.
한 가지 형태의 단어에 여러 의미가 포함되어 생기는 "중의성 문제"는 자연어 처리에 있어서 매우 큰 비중을 차지하며 특히 기계번역에서는 단어의 의미에 따라서 해당 번역 단어의 형태가 완전히 바뀌기 때문에 매우 중요합니다.
그러므로 자연어 처리를 위하여 단어의 중의성을 제거하는 작업이 필요합니다.
단어의 형태
단어가 가지는 형태에 대해 알아보겠습니다.
동형어 : 형태는 같으나 뜻이 서로 다른 단어
다의어 : 한 형태의 단어가 여러 의미를 지니는 단어
동의어 : 같은 의미를 가지는 다른 형태의 단어
위의 형태를 가진 단어들은 중의성을 가질 수 있습니다.
따라서 해당 단어들을 상위어와 하위어를 통해 관계 구조를 계층화 할 수 있습니다.
사람이 사용하는 단어는 하나의 추상적 개념을 나타냅니다.
특정 개념을 하위 개념이라고 하면 그 하위 개념들을 포함하는 상위 개념이 있습니다.
이때 상위 개념을 가리키는 단어를 "상위어", 하위 개념을 가리키는 단어를 "하위어"라고 합니다.
관계 구조의 계층화를 통해 자연어 처리에 유용하게 사용할 수 있습니다.
위의 내용에 따라 자연어 처리를 위해서는 각 단어에 정확한 값을 부여하는 작업이 요구됩니다.
🔎 임베딩
임베딩이란?
컴퓨터는 자연어를 직접적으로 처리할 수 없고 수치 연산만 가능합니다.
따라서 자연어를 숫자나 벡터 형태로 변환할 필요가 있습니다.
이때 사용되는 일련의 과정을 "임베딩"이라고 합니다.
즉 단어나 문장을 수치화 하여 벡터공간으로 표현하는 과정을 말합니다.
임베딩된 결과는 딥러닝 모델의 입력값으로 사용됩니다.
임베딩 기법의 종류에는 "문장 임베딩", "단어 임베딩" 등이 있습니다.
문장 임베딩은 말 그대로 문장 전체를 벡터로 표현하는 방법입니다.
전체 문장의 흐름을 파악해 벡로 변환합니다.
문장 임베딩은 문맥적 의미를 지니는 장점을 가집니다.
단어 임베딩에 비해 품질이 좋으며 상용 시스템에 많이 사용됩니다.
하지만 학습을 위해서 수많은 문장 데이터가 필요하며 학습 비용이 매우 높습니다.
단어 임베딩이란 개별 단어를 벡터로 표현하는 방법입니다.
동음어 구분을 하지 않아 의미가 달라도 단어의 형태가 같으면 동일한 벡터값을 가집니다.
문장 임베딩에 비해 학습 방법이 간단해 성능은 떨어지지만 실무에 많이 사용됩니다.
단어를 표현하는 방법에 따라 다양한 모델이 존재하며 토크나이징을 통해 문장에서 토큰 단위를 추출하는 경우, 추출된 토큰은 형태소 기반이므로 단어 임베딩이 효과적입니다.
원핫 인코딩(One-Hot Encoding)
원핫 인코딩은 단어를 숫자 벡터로 변환하는 가장 기본적인 방법입니다.
요소들 중 단 하나의 값만이 1이고 나머지 요소들의 값은 0인 인코딩 방식입니다.
"오늘 날씨는 구름이 많아요"
위의 문장에서 먼저 단어 사전을 구축한뒤 각각에 인덱스를 부여합니다.
['오늘', '날씨', '구름']
[ 0 , 1 , 2 ]
이후 원핫 인코딩을 진행합니다.
[ 0, 0, 1 ] : 구름
[ 0, 1, 0 ] : 날씨
[ 1, 0, 0 ] : 오늘
원핫 인커딩 벡터의 차원은 전체 어휘의 개수만큼 늘어나므로 매우 큰 차원이 됩니다.
즉 엄청난 메모리를 낭비할 수 있으며 강아지와 개는 유사한 단어지만 유사도 계산 시 결과가 0이 됩니다.
단어는 불연속적인 심볼이며 이산확률변수로 나타납니다.
이러한 문제는 원핫 인코딩이 "희소 표현"이기 때문입니다.
희소 표현은 각각의 차원이 독립적인 정보를 지니기 때문에 사람이 이해하기에 직관적입니다.
하지만 단어 사전의 크기가 커질수록 메모리 낭비와 계산 복잡도가 커집니다.
단어 간의 연관성이 전형 없어 의미를 담을 수도 없습니다.
자연어 처리를 잘 하기 위해서는 기본 토큰이 되는 단어의 의미와 주변 단어 간의 관계가 단어 임베딩에 표현되어야 합니다.
희소표현은 이러한 조건을 만족하지 못합니다.
이를 해결하기 위해 "분산 표현"이 고안되었습니다.
각 단어 간의 유사성을 잘 표현하면서도 벡터 공간을 절약할 수있는 방법입니다.
한 단어의 정보가 특정 차원에 표현되지 않고 여러 차원에 분산되어 표현됩니다.
분산 표현 방식을 그림으로 이해하면 아래와 같습니다.
희소 표현 대신 분산 표현읠 사용한다면 임베딩 벡터의 차원을 데이터 손실을 최소화 하면서 압축할 수 있습니다.
임베딩 벡터에 단어의 의미, 주변 단어와의 관계 등 많은 정보가 내포되어 있어 일반화 능력이 뛰어납니다.
이를 벡터 공간으로 나타내면 아래와 같습니다.
분산 표현 방식에서는 '남자'와 '남성' 두 단어의 사이가 매우 가까워 같은 의미로 해석할 수 있습니다.
아래의 링크를 참고하면 좋을 것 같습니다.
다음 글에서는 단어의 표현중 단어의 의미 파악에 대해 알아보겠습니다.
'AI > 자연어 처리' 카테고리의 다른 글
[AI] 자연어 처리 - 단어의 표현(2) (0) | 2022.08.13 |
---|---|
[AI] 자연어 처리 - 전처리와 토큰화(3) (0) | 2022.08.11 |
[AI] 자연어 처리 - 전처리와 토큰화(3) (0) | 2022.08.06 |
[AI] 자연어 처리 - 전처리와 토큰화(2) (2) | 2022.08.05 |
[AI] 자연어 처리 - 전처리와 토큰화(1) (2) | 2022.08.01 |