자연어 처리(임베딩)

푸른하늘·2024년 3월 20일
1

개발자 유아기

목록 보기
9/14

<Notes>

  • 자연어 처리, 딥러닝 열심히 해보자
  • 요새 말장난 유행하던데
    자연어 처리야
    자 연어 철이야

✅ 원핫인코딩(One-Hot-Encoding)

먼저 원핫인코딩을 배워보자구
컴퓨터는 자연어를 그대로 받아들일 수 없으니 숫자로 변환하는 작업이 필요하다.

그렇다면 우리에게 필요한건? 벡터!

원핫인코딩은 단어를 고차원의 벡터로 표현하는 기법이다. 흔히 우리는 양성을 1, 음성을 0으로 표현하여 그 여부를 알고는 한다. True를 1, False를 0으로 컴퓨터는 받아들이는 것처럼.

무슨 말이냐면 원핫인코딩은 어떤 단어들이 있는지 확인하고 난 뒤, 단어 집합의 크기만큼의 차원을 가진 벡터 안에서 각 단어의 위치를 매핑하는 작업을 거친다.

example은 필수다

단어 집합에 만약 [I, am, a, good, boy] 가 있다면
I : [1, 0 ,0 ,0 ,0]
am : [0, 1 ,0 ,0 ,0]
a : [0, 0 ,1 ,0 ,0]
good : [0, 0 ,0 ,1 ,0]
boy : [0, 0 ,0 ,0 ,1]
로 표현하여 컴퓨터에게 알려주겠다는 것이다.

그럼 질문!

이게 과연 효율적인가?

조금만 생각해보면 세상에 쓰이는 단어는 너무 많잖어..

셰익스피어는 소설 안에서 distinct한 단어만 약 30000개를 썼다고 하는데 30000을 크기로 가지는 벡터를 만들기에는 차원이 너무 크고 메모리도 엄청 차지할거다ㅋㅋㅋㅋ



✅ 임베딩(Embedding)

그렇게 등장한 임베딩, 어쩌면 당연한 결과물일지도 모르지만 이런 간단한 생각은 늘 세상의 발전을 이뤄내는거 같다.

원핫인코딩이 각각의 단어의 포함 여부에 대해 0, 1로 표현하는 것이었다면 임베딩은 굳이 단어가 하나의 스칼라(숫자)를 차지할 필요가 없다는 생각에서 나오게 된다.

임베딩은 단어를 저차원의 실수 벡터로 표현하는 기법이다. 각 단어는 미리 정의된 임베딩 차원 안에서 고정된 길이의 밀집된 벡터로 매핑된다.

단어의 의미와 관련된 정보를 제한된 크기 안에서 실수로 표현하여 자연어 처리 작업에 맞게 학습된다면 매우 좋다좋아

example은 필수다

단어 집합에 만약 [I, am, a, good, boy] 가 있고,
임베딩할 벡터의 크기를 3으로 정했다면
I : [0.1, 0.3 ,0.5]
am : [0.2, 0.4 ,0.6]
a : [0.7, 0.8 ,0.9]
good : [0.5, 0.2, 0.1]
boy : [0.6, 0.5 ,0.4]
로 표현하여 컴퓨터에게 알려주겠다는 것이다.

컴퓨터가 너무 복잡해서 잘 못외우면 어떡하냐고? 그럴리 없다ㅋㅋㅋㅋ 오히려 벡터의 크기를 줄여주면 우리한테 감사해할걸.. 메모리 사용도 효율적이고 연산도 빠르게 처리할 수 있으니까! 그렇게 만들어진 벡터 간의 유의미한 유사도를 계산하기에도 오히려 쉽다.

따라서 EDA(탐색적분석)에서는 원핫인코딩을 이용하여 데이터 분포를 시각화하지만 자연어 처리를 이용한 딥러닝 모델 학습에서는 임베딩이 원핫인코딩보다 선호된다.


<에필로그>

환경변수 설정 때문에 킹받았던 1교시..
자연어처리와 딥러닝 공부 열심히 하자하자

profile
천방지축 어리둥절 빙글빙글 돌아가는 내인생

2개의 댓글

comment-user-thumbnail
2024년 3월 20일

i am a good boy 혹시 빅뱅 좋아하셨나요?

1개의 답글

관련 채용 정보