-
패스트캠퍼스 환급챌린지 22일차 미션 (2월 22일) : 딥러닝·인공지능 Signature 초격차 패키지 Online. 강의 후기패스트캠퍼스 챌린지 2024. 2. 22. 22:06
자, 오늘은
Part3. 인공지능의 이해 Lv.2 : 숲을 보는 인공지능
CH06-01. 개요 - 텍스트를 숫자로 표현하기 위한 방법
&
CH06-02. 개요 - 단어 빈도를 활용한 벡터 표현 방법
CH06-01. 개요 - 텍스트를 숫자로 표현하기 위한 방법
임베딩에 대한 개념과 텍스트를 숫자로 표현하기 위한 방법을 알아보자.(컴퓨터는 글자를 읽지 못한다?)
임베딩은 위상 공간에서 다른 위상공간으로 투영하는 과정이다?
"임베딩이라는 단어는 인공지능을 하면서 자주 접하기에 그 개념을 확실하게 잡고 가야한다"
위에 말한 거처럼 하나의 공간에서 다른공간으로 정보를 전달 할 때 투영하는 과정을 임베딩이라고 한다.
그렇다면 인공지능에서 이 투영해야 하는 경우는 어떤 경우를 말하는 것일까?
인공신경망의 구조는 입력층, 은닉층, 출력층으로 나뉘는데, 데이터의 임베딩이필요한 부분은
입력층이다.

이 입력층에는 위의 이미지처럼 다양한 형태의 데이터를 사용할 수있다.
그런데 이 입력층은 숫자데이터만 받을 수 있다. 이 중! 텍스트는 문자를 숫자로 바꿔주는 작업이 필요하다.
(그래프는 각각의 정보가 노드에 들어있고, 각각의 노드가 관계를 가지는 엣지로 구성되어있는 데이터 타입이다.
이것도 이정보를 그대로 입력층에 넣기 위해서는 얘도 임베딩이 필요하다.)따라서 어떤 데이터 유형이 필요하냐에 따라 임베딩이 필요하다.(벡터형태)
1. 범주형태 데이터의 벡터화
범주 형태는 어떠한 카테고리로 값을 나타낼떄 사용한다.
1번이 레드라는 번호를 가지고 있으면, 이를 원 핫 인코딩을 통해 전체 범주에 대해 전체를 0으로 채우고 해당 아이템이
속하는 범주에 대해서만 1로 표기한다.
이렇게 인코딩을 변환하는 것을 원핫인코딩이라고 한다.
원핫 인코딩의 단점: 데이터의 차원이 많아지면 많아질수록 그만큼 메모리를 많이 확보해야하기때문에 메모리 낭비가 심하다.
2. 텍스트를 신경망에 넣는 방법
문장에 대한 긍정과 부정을 결과를 내뱉고 싶다.(단순한 클래시파이어)
이러한 문장을 입력층에 받아들이기 위해서는 텍스트를 숫자, 즉 벡터형으로 바꿔야 한다.
그러면 텍스트도 앞에 말한 원핫벡터로 표현하면 가능하지 않을까?
안된다. 단어량이 한두개가 아닐거고, 필요한 메모리가 엄청 많을 것이다. 대부분이 0이고 드문드문 1,2로 채워져있을 것.
의미를 반영할 수도 없다.(단순히 이단어와 이단어가 다르다만 파악하고 유사도, 관계를 알수가 없지.)
다른 형태로의 벡터로 표현해야한다.
이것이 임베딩이다.
우리가 특징을 알고 있다면 유사한 특징을 가진 데이터를 판단하고 수학적으로 다룰 수가 있다.

카테고리를 나누고 또 카테고리를 나누면 새로운 데이터가 나올때 유사한 카테고리군을 구할 수 있다는 것이다.
텍스트 데이터에서 특징은 어떻게 뽑아낼 수 있을까?
위에 이미지처럼 텍스트들간의 유사도를 통해서 얼마나 가까운지, 얼마나 먼지를 알 수있는 것이다.
그래프 또한 같은방법으로 사용되는데, 이를 GNN이라고 한다.
자 정리하자면 단어 임베딩이란?
단어가 가진 의미를 그대로 보존하면서 의미와 맥락을 고려하여 단어를 벡터로 표현.
의미를 보존한다는 의미는 개별 단어가 가진 속성을 보존한다는 말이고, 벡터로 표현한다는 것은 숫자 즉 실수값으로 표현함을 의미한다.
CH06-02. 단어 빈도를 활용한 벡터 표현 방법
워드 임베딩 방법은 단순 변환과 데이터 분포 기반 특징 추출이 있음을 알아보았다.
단순변환은 원핫벡터(단어간의 유사도, 의미를 전혀 반영하지 못한다.)
데이터 분포 기반 특징 추출의 2가지는 카운터 베이스와 추측 베이스가 있다?
"count based에 대해 알아보자."
이 카운트 기반의 특징을 알기 위해 bag of words를 알아보자.
Bag of words
단어들이 가방에 들어있는 것을 말한다.
특정한 단어들이 많이 중복해서 담겨있을 것이고, 어떤 분야에서 단어가 추출되었냐에 따라 단어를 담는 가방이 다를 것
이 각각의 가방들에 들어있는 데이터들은 다른 분포를 따를 것이다.
이 빈도수를 분석하기에 백오브워즈를 사용하고, 여기서 단어의 특징은 Frequency 빈도수이다.
빈도수를 기반으로 벡터를 만드는 방법을 살펴보자.
1. CountVectorizer
해당 꾸러미 안에서 단어가 얼마만큼 많이 보이는지 벡터 카운트 한것이 기본빈도수 카운트벡터다.
1. 문장이 5개가 있다.
2. 중복이 되는 단어를 다 지워주고,
3. 띄어쓰기 단위대로 파싱을 하고, 문서 꾸러미에서 가질 수 있는 단어들을 파악한다.
4. 그러면 꾸러미의 단어들이 해당 문장에 어떻게 포함되어있는지 벡터로 나타낸다.
5. array 내부에 and는 0번, document에는 1번 이렇게 나간다.
6. 밑에 리스트에 보면 단어들이 몇번 나오는지 빈도수를 벡터로 표현한다.
이 카운터 벡터라이즈는 학습에 사용할 문장을 가방에 넣고 다 파싱 후 중복되지 않은 단어들을 추출하고
주어진 문장에서 단어가 몇개 들어있는지를 파악하는 것이다.
2. TF-IDF
빈도수에서 조금 더 의미있는 정보를 찾기 위해 다른 형태로 빈도수를 보는 방법이 있다.
TF는 텀 프리퀀시를 의미한다.(단어가 문서에 얼마만큼 나타내는지)
IDF는 단어가포함된 문서의 수의 역수이다.
" 내가 관심있는 단어가 이 다큐먼트에서 얼마만큼 있는지 보고싶다. 를 공식으로 표현했을 때
분자는 TF값, 해당 다큐먼트에서 이 워드가 얼마만큼 보여지는지,
분모는 다큐먼트 프리컨시를 설정(해당 워드가 이 다큐먼트에서 얼마만큼 포함되는지)
사이킨런에서 TF-iDF를 사용할 수 있는데,
빈도수를 벡터로 표현할 수 있다.
22일차 끝.
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
'패스트캠퍼스 챌린지' 카테고리의 다른 글