일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 파이썬
- 자바스크립트심화
- 자바 실습
- ChatGPT
- 데이터베이스
- 연습문제
- 쇼핑몰홈페이지제작
- 머신러닝
- JSP
- 자바
- 딥러닝
- html/css
- 상속
- SQL
- 중학수학
- rnn
- 정보처리기사실기
- 개발일기
- 디버깅
- 중학1-1
- 컴퓨터비전
- 타입스크립트심화
- 자바스크립트
- 혼공머신
- JDBC
- 스프링프레임워크
- 스프링
- JSP/Servlet
- 데이터분석
- 정보처리기사필기
- Today
- Total
"게임 개발자"를 향한 매일의 공부일지 _ 1기
순환 신경망(RNN) 14 - 트랜스포머 본문
드디어 자연어 처리 부분을 마치고 트랜스 포머에 대해서 공부해보려고 한다.
트랜스포머
트랜스포머는 순환신경망(RNN)을 사용하지 않고 어텐션만을 사용한 신경망이다. 2017년에 "Attention is All you Need"라는 논문을 통해 발표되었다.
앞서 Seq2Seq 모델에서 어텐션 매커니즘을 도입함으로써 성능이 향상되었지만 여전히 순환신경망을 기반으로 해서 속도가 느린 단점이 있다. 순환신경망을 사용하면 인코더에서 입력을 차례대로 처음부터 끝까지 계산하고, 디코더에서도 동일하게 차례대로 처리한다. 이를 해결하기 위해 속도가 느린 순환신경망을 제외하고 어텐션만으로 구성된 트랜스포머를 제안하는 것이다 ([그림 5-46] 참조).
트랜스포머는 순서를 표시하기 위해 위치 인코딩(Positional encoding)을 활용한다. 이로 인해 병렬처리가 가능해져 속도를 빠르게 할 수 있다. 순차적인 계산이 아니라 병렬처리가 가능하면 문장이 길더라도 시간을 줄일 수 있고 경사소실이나 경사 폭발의 문제를 해결할 수 있다.
여기서는 실습 예제로 "허깅페이스(huggingface)" 트랜스포머를 소개한다. "허깅페이스 트랜스포머" 라이브러리는 트랜스포머 기반의 언어 모델들을 간단하게 사용할 수 있다.
특히 Bert, GPT 등 트랜스포머 기반의 사전 학습된 모델과 토크나이저를 코드 몇 줄로 자연어 처리가 가능하도록 도와준다. 자연어 처리 중 감성분석, 문장 생성, 질의응답, 문장 요약 순으로 예제를 구성했다. 먼저 코랩 환경에서 "허깅페이스 트랜스포머" 설치가 필요하다.
설치가 완료되었다면 사전에 훈련된 모델과 토크나이저를 통해 자동으로 입력 텍스트를 전처리한 다음 예측까지 실행해주는 파이프라인을 실행해 본다. 매우 간단하게 감성분석 파이프라인을 불러오고 입력 데이터 값을 넣었을 때 긍정인지 부정인지와 함께 점수를 알려준다.
4개의 문장 중 앞 문장 두 개는 긍정의 문장으로, 뒤 문장 두 개는 부정의 리뷰 글을 임의로 작성한 것이다. 허깅페이스 파이프라인에서 감성분석을 나타내는 'sentiment-analysis' 모델을 불러온다. 실행 결과에서 당초 의도대로 긍정 레이블과 부정 레이블을 잘 분류하는 것을 알 수 있다.
1. 감성분석
기본적으로 영어로 사전 훈련된 모텔과 토크나이저를 활용한다. 다음 코드는 부정적인 글을 한글로 작성했지만 결과는 '긍정'으로 나타났다. 모델이 문장을 제대로 이해하지 못했음을 알 수 있다.
이때 다국어로 학습한 모델을 불러온다면 결과는 달라진다. 별 5점 만점 중 별 2점으로 부정적인 글로 인식했음을 확인할 수 있다.
다국어 모델로 한글 문장을 더 확인해보겠다. 앞서한 결과보다 비교적 정확한 결과를 보인다.
2. 질의응답
사전에 학습된 질의응답 파이프라인을 불러온다. 위키피디아에서 tensorflow를 검색해서 나온 소개글을 데이터로 넣고 응답을 확인해 보자. 입력된 텍스트 데이터에 대한 내용을 질문하면 문장 중에서 적절한 응답을 찾아서 제시한다. 이와 같은 질의응답 문제는 지문이 나오고 그 지문과 관련된 복수의 질문을 물어보는 국서/영어 시험 문제와 유사하다.
질문과 응답을 함께 확인해보자. 매우 정확한 결과를 얻을 수 있었다. 지문에서 정답을 정확하게 찾는 편이다.
3. 문장 생성
문장 생성 파이프라인을 불러온 뒤 시작 문장으로 "I love you, I will"을 입력하고 최대 생성한 문장의 길이(10)를 지정한다. 결과를 보면 누가 봐도 깔끔한 문장이 생성되었다.
4. 문장 요약
위키피디아에 있는 텐서플로 소개글을 다시 활용한다. 이 문장을 요약하는 문제다. 10~50개의 단어로 결과가 나올 수 있도록 설정하고 요약으로 출력된 문장을 보면, 텐서플로가 구글 브레인의 두 번째 시스템이며 언제 처음 출시되었는지, 어떤 시스템에 이용 가능한지 요약해서 설명하고 있다.
트랜스포머를 기반한 사전 학습된 모델과 토크나이저를 통해 트랜스포머의 성능을 경험했다. 파이프라인으로 불러오는 것외에도 Auto Tokenizer, AutoMedel을 활용해 사용자가 원하는 대로 자연어 처리가 가능하다.
학습을 마치고
트랜스포머가 무엇인지도 알게 되었다. 난 영화 제목같아서 기계와 관련된 미래도시가 떠올랐지만 그런 게 아니라 그냥 문장을 요약하는 거였다. 실제로 공부해 보면 별거 아닐 때가 많다.
이제 딱 한 단원만 남은 상태다. 여기까지 오느라 정말 수고가 많았다.
'인공지능 > 딥러닝' 카테고리의 다른 글
순환 신경망(RNN) 15 - ViT (0) | 2024.12.19 |
---|---|
순환 신경망(RNN) 13 - 자연어 처리 11 : 어텐션 (0) | 2024.12.19 |
순환 신경망(RNN) 12 - 자연어 처리 10 : Seq2Seq 모델로 챗봇 구현 3 <모델 학습과 예측> (0) | 2024.12.19 |
순환 신경망(RNN) 11 - 자연어 처리 9 : Seq2Seq 모델로 챗봇 구현 2 <데이터 전처리> (0) | 2024.12.19 |
순환 신경망(RNN) 10 - 자연어 처리 8 : Seq2Seq 모델로 챗봇 구현 1 <챗봇 데이터 소개 및 탐색적 데이터 분석> (0) | 2024.12.19 |