[자연어]
한국어와 영어 등 우리가 평소에 쓰는 말을 자연어(natural language) 라고 한다.
[단어의 의미]
우리의 말은 '문자'로 구성되며, 말의 의미는 '단어'로 구성
'단어' : 의미의 최소 단위
자연어를 컴퓨터에게 이해시키는 데는 무엇보다 '단어의 의미'를 이해시키는 게 중요
컴퓨터에게 자연어를 파악하게 할 수 있는 방법
- 시소러스
- 통계 기반 기법
- 추론 기반 기법(word2vec)
[시소러스(thesaurus)]
유의어 사전으로 동의어나 유의어가 한 그룹으로 분류
ex) car = auto automobile machine motocar
또한 단어 사이의 '상위와 하위' 혹은 '전체와 부분' 등 세세한 관계까지 정의
(아래 참고)
이처럼 모든 단어에 대한 유의어 집합을 만든 다음, 단어들의 관계를 그래프로 표현하여 단어 사이의 연결을 정의 가능
'단어 네트워크'
시소러스의 예시 -> WordNet
https://ko.wikipedia.org/wiki/%EC%9B%8C%EB%93%9C%EB%84%B7
시소러스의 문제점
1. 시대 변화에 대응하기 어려움
(ex, 새로운 언어가 생기거나 단어의 의미가 확장되거나 축소될 때마다 업데이트 필요)
2. 사람을 쓰는 비용이 큼
(시소러스를 만드는데 엄청난 인건비 소요)
3. 단어의 미묘한 차이를 표현할 수 없음
(비슷한 단어들이라도 미묘한 차이가 있다)
[통계 기반 방법]
말뭉치(corpus)가 필요
말뭉치 : 대량의 텍스트 데이터
말뭉치를 전처리하는 방법
import numpy as np
def preprocess(text):
text = text.lower()
text = text.replace('.', ' .')
words = text.split()
word2id = {}
id2word = {}
for word in words:
if word not in word2id:
new_id = len(word2id)
word2id[word] = new_id
id2word[new_id] = word
corpus = np.array([word2id[w] for w in words])
return corpus, word2id, id2word
text = 'You say goodbye and I say hello.'
corpus, word2id, id2word = preprocess(text)
text 변수에 문장이 주어졌다고 가정해보자
위 흐름대로 가면 corpus, wor2id, id2word가 생성되는 것을 볼 수 있다.
word2id는 단어가 주어졌을 때 단어 ID를 찾는 딕셔너리이고
id2word는 ID가 주어졌을 때 단어를 찾는 딕셔너리이다.
[단어의 분산 표현]
이미지에서 RGB와 같은 벡터 표현이 색을 더 정확하게 명시할 수 있듯이
'단어의 의미'를 벡터 표현으로 정확하게 표현할 수 있을까?
-> 분산 표현(distributional representation)으로 가능
[분포 가설]
'단어의 의미는 주변 단어에 의해 형성된다' -> 분포 가설(distributional hypothesis)
단어 자체에는 의미가 없고, 그 단어가 사용된 '맥락(context)'의 의미를 형성한다는 것.
의미가 같은 단어들은 같은 맥락에서 더 많이 등장
ex)
I drink beer. We drink wine 처럼 "drink"라는 단어 주위에는 음료가 등장하기 쉬움
I guzzle beer. We guzzle wine이라는 문장이 있으면 "guzzle"은 "drink"와 같은 맥락이다.
"guzzle"과 "drink"는 가까운 의미에 단어라는 것도 알 수 있다.
"맥락"이란 특정 단어를 중심에 둔 그 주변의 단어.
맥락의 크기를 "윈도우 크기(window size)" 라고 함.
윈도우 크기가 2인 맥락의 예시 (총 4단어)
you say goodbye and i say hello
참고
https://book.naver.com/bookdb/book_detail.nhn?bid=14797086
'딥러닝관련 > 자연어처리' 카테고리의 다른 글
Transformer Decoder : Linear & Softmax Layer (0) | 2021.11.16 |
---|---|
Transformer Decoder : Encoder-Decoder Attention (0) | 2021.11.16 |
Word2Vec (0) | 2020.07.20 |
StackGAN 논문 리뷰(작성 중) (0) | 2020.07.16 |
Word Embedding (0) | 2020.07.13 |