-
패스트캠퍼스 환급챌린지 24일차 미션 (2월 24일) : 딥러닝·인공지능 Signature 초격차 패키지 Online. 강의 후기패스트캠퍼스 챌린지 2024. 2. 24. 12:01
자, 오늘은
Part3. 인공지능의 이해 Lv.2 : 숲을 보는 인공지능
CH06-05. Embedding Layer
&
CH07-01. 자연어 처리 분야의 주요 연구 분야
CH06-05. Embedding Layer
이전시간부터 계속 임베딩 벡터라는 것을 알아보고 있다. 임베딩 벡터는 주로 텍스트 데이터를 인풋 사용하고자 할 때
신경망에 텍스트 그대로 넣을 수가 없으니 수치형 벡터로 변환하고자 임베딩이라는 과정을 거치는 작업을 계속
알아보았다.

이 과정이라 함은 위의 이미지에서 보이는 것처럼 텍스트를 입력층으로 넣어 임베딩 벡터를 출력층으로 가지는
1차 레이어가 있고,
이 1차 라에어를 통해 얻어진 임베딩 벡터를 아웃풋으로 나오기까지의 두번째 레이어를 배치할 수 있다.
그런데 이 과정을 자세히 살펴보면, 내가 얻고자 하는 값이 임베딩 벡터가 아니라면 2번을 돌릴 필요가 있을까?
하나의 신경망을 사용해서 중간 연산 결과(임베딩데이터) 를 통해 출력값을 내보는 것을 알아보자.
→ 말이 비슷하지만 결국 두개 레이어를 쪼개지 말고 하나의 레이어로 만들어보자는 말!
따라서 위의 이미지와 달리, 하나의 레이어를 봤을 때 입력층 그 뒤로 Embedding Layer라는것을 배치하여
은닉층으로 전달해줄 수 있는 레이어를 새로 만들어 주고,
이 Embedding Layer에서 주어진 입력 데이터를 어떤 고정 길이를 갖는 벡터로 변환하여 결과값을 출력하는 식의 연산을
해보자는 것이다.
예: 텍스트를 입력층에 넣고 임베딩 레이어를 거쳐서 나온 덴스한 벡터 데이터를 은닉층에 넣어주는 것.
(아래의 이미지를 보자)

위의 예시는 각 지역에서의 부동산 광고에 따른 부동산 값을 예측하는 모델의 도식화 한 것이다.
우선, 젤 하단의 하늘색 부분은 word in real estate ad 라 하여 광고에서 나왔던 단어들을 원 핫 인코딩 형태로 만들어 준다.
(겹치는 단어들도 물론 있겠지만 무수히 많은 데이터 들이 있을 것이다.) 이 단어들을
3차원의 임베딩한 형태로 만들어주고(녹색) 이 녹색의 인풋과 아직 쓰지 않은 위도 경도 데이터를 조합하여
입력층에 넣어주게 된다. 이 입력층을 거치고 나면 예측값을 뽑아낼 수 있는데,
그래서 Loss 값을 뽐아내기 위해서는 실제 가격과의 차이를 알아야 해서 마지막에 Sale Price 라는 것이 있는 것이다.
이걸 코드로 보자
model = Sequential()
→ 모델을 만든다.
model.add(Embedding(2000, 128))
→ 모델에 추가(임베딩 단어를 가공(2000개의 단어를 128개 차원을 갖는 텐서로 변환)
model.add(Dropout(0.5))
→ 모델에 추가(오버피팅? 방지하기 위해 일정 노드를 끊는다)
model.add(Conv1D(64,5,padding='valid', activation='relu', stride=1))
→ 모델에 추가(임베딩 벡터 특징을 추출하기 위해 1차 콘볼루션 추가)
model.add(MaxPooling1D(pool_size=4))
→ 모델에 추가(차원 추가)
model.add(LSTM(55))
→ 모델에 추가(시계열 추가)
model.add(Dense(1,activation = 'sigmoid'))
→ 모델에 추가(1개의 노드(결과값) 출력을 위한 시그모이드)
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
→ 모델의 학습에 필요한 값들을 컴파일의 인자로 설정.
model.fit(x_train, y_train, batch_size=100, epochs=5, validation_data=(x_test, y_test))
임베딩 레이어 정리
미리 학습을 통해 얻어진 word embedding vector를 신경망에 넣어주는 것이 아니라,
학습을 통해서 embedding vector를 획득하는 방법을 말함.
하나의 신경망을 설계해서 그 신경망의 학습 과정에서 우리가 학습시키고자 하는 데이터를 최적화 하는
(임베딩레이어 사용)하는 것이 일반적이고, word2vec 과 같은 벡터만 만들어내는 것이 무쓸모는 아니고
추천시스템이나 문서 유사도를 판단할 때도 사용하니 그것도 중요!
CH07-01. 자연어 처리 분야의 주요 연구분야
NLP 자연어처리에 대해 살펴보도록 하자.(굉장히 어렵다고 한다... ㅠ)
자연어 처리의 주요 연구분야와 처리방식을 알아보자
"NLP Tasks"

NLP Task는 크게 분석 태스크와 생성 태스크로 나뉜다고 본다.
분석 중 시멘틱(의미적)과 신테틱(문법적)으로 나뉘고,
시멘틱부터 알아보자.
NER(Named-entity recognition)
: 문서에서 우리가 단어를 발견 했을 때 이 단어가 고유명사인지 개체명이 무엇인지 판단하는 태스크를 NER이라고 한다.
(트럼프 옆에 person, 2016 Date 이렇게 사용된 단어 옆에 라벨처럼 얘가 무엇인지 인디케이트 해주는 것)
문맥을 이해해야 하지만 단어에 알맞은 NER 태그를 달아줄 수 있다.(대표적인 시멘틱 기반 분석 태스크)
Text Classification
: 바이너리 클래시피케이션(스팸이다 스팸이 아니다.) / 비지니스아티클에서 (어카운팅, 파이넌스, 이코노믹스, 마케팅 등)
프로덕트 리뷰(긍정 리뷰, 부정리뷰) 이런식으로 나뉘는 것
결국 Symentic은 텍스트의 구조적으로 이해를 넘어 의미를 파악해야 알 수 있는 태스크다.
Syentatic Parsing
1. Part Of Speech Tagging(POS Tagging)
: 말 그대로 영어 시간에 배운 것처럼 주어 동사 전치사 등 모든 단어를 라벨링 하여 인식하는 것.(문법적인 요소에 태깅)
2. Chunking
: 단어들을 의미있는 묶음으로 만들어주는 작업
3. Dependency Parsing
: 절, 수식하는 절 분석해주는게 디펜던시 팔싱
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
자 이제, Generation Tasks다.(앞서 본건 기존에 적힌 걸 분석하는 것이었다면, 이것은 문장을 만들어야 하니 더 어려움)
Generation Tasks에는
Question Answering / Language Generation / Machine translation 이 3가지가 있다.
1. Question Answering
: 질문하고 대답하는 것, 챗봇
2. Language Generation
: 문장을 만들어 내는 태스크
3. 번역(Machine translation)
24일차 끝.
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
'패스트캠퍼스 챌린지' 카테고리의 다른 글