JinCoding 실무형 NLP Course 1강: NLP Overview
날짜/시간 : 2023년 08월 05일 / 오후 7시
NLP의 가능성..!!
내가 스스로 채용을 해도 되는 상황
- 사업에서 NLP 활용 가능
- 어떻게 바로 서비스를 만들 수 있는지 알려줌
- 창업도 가능함
[1] Syllabus
- 강사소개
JIN : 4년차 NLP 리서처 / 엔지니어
: 서비스 만들지 않고 논문들 계속 리뷰하고 패러다임 바꾼걸 계속 본다
: 시스템에서 새로운 모델을 어떻게 넣을까? 논문을 어떻게 구현할까? 논문 구현해서 시스템에 넣기도함
: 나중에 창업하고 싶은데, 내가 내꺼 만들고 싶은데, 내가 엔드유저와 가까운 스타트업에 가야겠다
: 백엔드 업무를 더 배우게 되었음
: zero to one 아무것도 없는 상태에서 NLP 서비스를 만들고 모델을 어떻게 배포하는지 관리를 하는지
: 버그 나오면 어떻게 핸들링 할건지 많이 배웠음
: 새로운 NLP 코스를 준비하고 있음
: 누구나 쉽고 재밌게 인공지능의 도움을 받을 수 있는 사람이 되고 싶다
- 2년 NLP 연구원
- 2년 미국 스타트업 NLP 엔지니어
- 2022년 C사 NLP & Python 부트캠프 강사
- 2023년 ~P기업 인재창조원 객원교수
- 유튜브 찐코딩 운영
- 강의소개
1. 최신성
- OpenAI
- Open LLM Leaderboard (누구나 가져다가 쓸 수 있는 GPT)
- 최신정보 강의에서 알려줄 수 있음
2. 이론이 아닌 실무에 집중 (창업, 서비스 개발)
- 대부분 이론에 집중되어있음
- 실제로 서비스를 만들어 보고싶어!
- 실무에 바로 투입되고 싶어!
요즘 최신 트랜드는 '멀티모달'이라고 해서 '모든 인풋'(오디오, 이미지 등)이 다 합쳐지는 성향이 보임
- 강의를 들어야 하는 사람:
선수 지식: Python
강의 듣을 수 있는 사람 기준 : 패키지를 사용해서 로드할 수 있는 정도
파이썬 초보자는 '찐코딩 파이썬 베이직' 참고
선형대수를 알면 쉬움-수학을 모른다고 해서 겁먹을 필요는 없다.
하나하나 개념을 알려줄 것이다
실무형 NLP Course, 왜 무료 ?
유료!= 검증된 컨텐츠
돈을 준다고 해서 좋은 컨텐츠일까 ? (나도 동의!!)
내가 왜 강의를 보기도 전에 돈을 내야할까? (나도 동의!!)
- 오픈 소스는 더 좋은 코드를 만든다. (나도 찬성!!)
- 오픈된 강의는 더 좋은 강의를 만든다. (나도 찬성!!)
- Feedback♥ --> 댓글
어떤 점이 좋았다는 점도 꼭 써주세요.
이런 점이 좋았다는 피드백도 너무나도 환영합니다.
- 강의계획서
Syllabus Part1
[NLP Overview]
- NLP로 풀 수 있는 문제?
- NLP 모델 발전 방향
- 현업에서 반드시 고려해야 할 요소들
[컴퓨터는 언어를 어떻게 이해할까?]
- Tokenizer
- Embedding
- Word2Vec
- Pretrained Models (ex. BERT, GPT)
- 실습 : 유사 문서 탐색 시스템 개발
[Transformer]
- Transformer 모델 구조를 훑어보기
- Basic 선형대수
- 실습 : numpy 패키지를 이용한 벡터 연산
- Transformer 모델 구조를 깊게 이해하기
- Embedding, Attention, Training Method
- 실습 : BERT 모델을 사용한 문장 분류 모델 개발
Syllabus Part2
- GPT에 대한 설명
- 어떻게 잘 만들어졌는지?
- 어떻게 언어를 잘 이해하는지?
[2] NLP로 풀 수 있는 문제?
- NLP란?
: Natural Language Processing <-> Artificial/Computer Language
자연어처리
= 컴퓨터가 인간의 언어(비정형 데이터-Unstructured Data)를 이해할 수 있도록 처리하는 기술
정형데이터 : 데이터가 테이블로 되어있는 행과 열로 되어있는 데이터
비정형데이터 : 테이블로 처리 못하는 데이터, 타입이 예측 불가능 (오디오 등)
비정형 데이터를 어떻게 컴퓨터가 잘 이해하게 할 수 있을까 ?
- NLP 활용 사례(산업군별)
법률 , 금융, 마케팅
텍스트 기반 산업군
(1) 법률
- 판례, 증거자료 등..
- legal 문서를 봐서 위법인지 아닌지 답변해준다
- 도메인에 특화된 분야 이해도가 굉장히 중요함
- gpt4를 쓰면 단점이 있음 (거짓말하기도함)
- 어떻게 legal document를 큰 모델에 넣어서 팩트 기반으로 말할 수 있을까?
미국에서 핫한 법률 회사
https://casetext.com/
https://www.harvey.ai/
(2) 금융
뉴스 기사 기반 주식 예측
챗봇
(3) 마케팅
https://www.jasper.ai/
개발자 숙명/철학 : 어떤 문제가 있을때 개발로 문제를 해결해줄 수 있어야함
사람들은 어떤걸 불편을 느낄까? 사람은 어떤 점에 AI를 적용할 수 있을까?를 관심있게 본다
NLP로 살아가는데 어떤 문제를 해결할 수 있을까 ?
내가 무엇을 해결하려고 하는지? 어떤 산업군에 있고, 무엇을 푸는지 알아야함
- NLP task
Syntactic -> 문법적으로 옳은 문장인가?
Semantic -> 문장의 의미를 이해하는가?
- 감정분석 (긍정? 부정?)
- 문장간 유사도 (비슷한가?)
- 문장 주제 분류 (영화? 스포츠?)
- 질의 응답 (문서에서 질문에 대한 정보) (문서에서 답변을 찾아주는것)
AI 모델이 문법을 잘 맞추고 문장이나 문서의 의미를 잘 알고 있다면 언어를 이해하고 있음
NLU
Natural Language Understanding
기계독해 : 문서 , 질문에 대한 이해로 문서에서 답을 예측함
의미론적 유사도 측정 : 나는 피자가 좋아, 나는 햄버가가 좋아, 나는 찐코딩이 좋아
SuperGLUE
- 문법
- 감성 분석
- 문장 유사성
- 추론 (전제: 찐코딩은 테크유튜브이다. 전제2: 찐코딩은 요리유튜브이다 --> 틀린것)
SQuAD2.0
The Stanford Question Answering Dataset
- 질의응답
- 문서 분류 (Classification) : 이탈 고객 예측, 상품 카테고리 분류, 위험 판별
- 군집화 (Clustering) : 유사 문서 군집화, 유사 키워드 생성
군집화는 문서 검색에 많이 활용됨
키워드끼리 유사한지 아닌지 군집화를 할 수 있음
Acme Article -> Technology ? Sports ? Entertainment ?
NLG
Natural Language Generation(챗GPT)
맥락/요청사항(prompt)을 이해하고 텍스트를 생성
- 기계 번역
- 챗봇 (질의 응답)
- 요약
- 컨텐츠 생성
특정 task마다 generation 모델을 개발
-> 하나의 크고 똑똑한 generation 모델
- 밴치마크를 잘 알수 있는 방법
Browse State-of-the-Art
Browse State-of-the-Art : 가장 최신의 가장 좋은 기술을 말함
메타가 만든 웹
https://paperswithcode.com
- 내가 풀려는 태스크에
- 어떤 모델이 짱 먹는지 ? 짱먹는 모델로 출발하면 된다
Benchmarks - 동일한 데이터셋에서 모델 성능을 경쟁함
공개된 데이터셋이 있고 베스트 모델이 있음
task를 명확하게 안다면, 누가 1등 먹는지 알 것이다.
- NLP Pipeline
자연어처리 개발자인데 엔지니어 처럼 일함
데이터를 깔끔하게 전처리할까 어떻게 노이즈를 제거할까 학습을 어떻게 잘할 수 있을까 데이터 가공 정제 중요!!
데이터가 정말 정말 중요하다!!
데이터 로드 - 데이터 전처리 - 모델 학습 / 추론 -> 데이터 후처리 ->
(내부 DB) (preprocessing, cleaning) (postprocessing)
(Web Crawling)
(데이터 후처리 예시.!!)
이것은 긍정입니다. 부정입니다. -> 긍정/부정인지 레이블로 알고 싶은데..? -> regular expression(정규표현식)
GPT로 데이터를 만들기도한다
파이썬으로 웹크롤러를 만들어서 데이터를 다 가져온다
요즘은 모델이 점점 커지기 때문에 많은 데이터보다는 좋은 데이터를 넣는게 정말 중요하다
노이즈가 껴 있는것이 무엇인지 정의할 필요가 있음
어떤 문장이 있을때 핵심 어구 같은 것들을 뽑아오는 대신 문장을 때려넣는다 (데이터 전처리 작업시간 최소화 하는 방향으로 진행중)
어근만 뽑아오는 방법 이런 것들을 다음 시간에 알려줄 것이다.
[3] NLP 모델 발전 방향
1. 산업군 큰 그림을 본다
2. 아 내가 이런 식으로 가야겠구나 목표를 세우게 된다
기술 모델 이름 방법론 NLP task
One hot encoding feature extraction language modeling
Bag-of-word feature encoding document classification
TF-IDF word representation
Word2Vec numerial representation
RNN vectorization
Transformer statistical approach
BERT neural network
GPT
numeric or word representation
one-hot-encoding = re
내 테이블에 음식이라는 카테고리가 있으면
총 3개의 데이터를 가지고 있는데 어떻게 머신러닝의 인풋에 넣었을때
"찐코딩 채널 구독자는 모두 코딩을 잘하고 코딩을 좋아한다."
명사 사전 : {찐코딩, 채널, 구독자, 코딩}
인덱싱 (Indexing) : {찐코딩: 0, 채널: 1, 구독자: 2, 코딩: 3}
코딩: [0, 0, 0, 1] -> 하나만 1이다
vector: 1dimensional array
Bag-of-Word
단어의 빈도를 센다
"찐코딩 채널 구독자는 모두 코딩을 잘하고 코딩을 좋아한다."
명사 사전 : {찐코딩, 채널, 구독자, 코딩}
인덱싱 (Indexing) : {찐코딩: 0, 채널: 1, 구독자: 2, 코딩: 3}
빈도: {찐코딩: 1, 채널: 1, 구독자: 1, 코딩 3}
BoW: [1, 1, 1, 2]
결국 빈도를 숫자로 표현하자는 의미
불용어 : 의미가 없는 단어
TF-IDF
빈도 기반 단어 표현 (문서 기반)
문서: 여러 문장들이 문서를 만듬
이 단어가 모든 문서에 자주 등장한다면, 불용어처럼 의미없는 단어이니까 자주 나온게 아닌가
Term Frequency x Inverse Document Frequency
(Term == Word) 특정 단어가 등장한 문서의 개수
문서 N에서 특정 단어의 빈도수
찐코딩 채널 구독자 코딩
문서1 5 1 0 2
문서2 0 1 7 3
불용어를 낮춰주기 위해서 다른 문서들도 많이 나타나는지 확인하기 위함
Word2Vec
(dense-깊다) embedding
- Neural Network Model (학습 가능)
- 큰 dataset으로 (a 1.6 billion (16억) words data set) word embedding을 학습
- "의미" == similar words ?
- ("king" - "man" = "queen")
의미론적인 워드 임베딩이 생기게 된다
단어를 벡터로 만들면 단어간의 거리를 계산할 수 있다
단어간의 유사도를 알 수 있다
벡터에서 의미를 가지고 있는 것을 학습할 수 있게 되었다
Word2Vec 학습 방법론
- Skipgram
- CBOW
- Glove
- fastText
Deep Neural Network
모델 CNN RNN LSTM GRU
len(INPUT) != len(OUTPUT)
방법론 sequence-to-sequence Machine translation
encoder-decoder structure Summarization
Chat
2014년
문장에서 짧은 문장으로 길이가 짧은 문장이 나올 수 있다. (문서번역, 요약 등)
이를 해결하기 위해 sequence-to-sequence , encoder-decoder structure 방법을 제안함
인코더가 벡터 연산을 한다 결과물이 나오면 디코더에서 의미를 가지고 프랑스로 내뱉게 된다
Transformer
Attention
- RNN 계열 (recurrent)의 단점인 long term dependency 해결
- 문장이 길어질때 모델이 까먹음
- 병렬 학습 가능 -> fast
Encoder + Decoder -> Machine Translation
Encoder -> BERT
Decoder -> GPT
BERT
BERT는 모델이 아니다?
Transformer 아키텍처를 사용함
Encoder만 사용함
전이학습 : 내가 사전에 있었던 지식을 다른 모델에 넘기는 것
방법론 : Transfer Learning
Pre-training and Fine-tuning
사전 학습 , 파인튜닝
Pre-training은 언어 전반적인 의미를 파악함
Fine-tuning은 Pre-training 모델에서 원하는 태스크(추론, 개체명인식 등)를 하기 위해 안에 파라미터를 수정
학습방법론
Supervised Learning
(X, Y)
X = 텍스트
Y = 예측하고 싶은 결과값 = label
인풋만 주는게 아닌 정답을 알려줘서 모델이 예측한 값이 정답값과 근사한 값으로 가기 위함
Self-supervised Learning
(X, X+1)
language modeling
얘는 답이 없음
X (문장)을 통해 의미정보를 추출할 수 있음
언어의 이해를 배운다란 ? 이 문장과 문장이 유사하다, 이 문장과 문장이 유사하지 않다
언어모델 : 기존에 어떤 단어(이전에 나온 단어)
조건부확률 : 어떤 사건이 일어났을때 다른 사건이 일어날 확률
P(x(t+1) | x(t), ... , x(1))
the students opened their (books, laptops , exams, minds 중 확률이 가장 높은 것을 선택함)
Few-shot learning
몇개의 시도로 학습을 해본다
- LLM (Large Language Model) 발전 = General Model
학습된 데이터양도 커지고, 파라미터도 커져서 엄청 똑똑해짐
인간이 학습하는 방식
- Few examples
- Instruction
모델 학습 방식
- Fine-tuning
- Task-specific
- Dataset
데이터셋 레이블 1000개 만개 해야돼 ..
모델을 커스터마이징 하기 힘들잖아...
모델아 내가 이 문제를 어떻게 푸는지 예시를 한번, 몇번 보여줄게
인스터럭션도 줄게 1shot 1개 예시를 주고 너가 한번 풀어봐 하는 식의 학습방식
Large Language Model (LLM)
Open-sourced
Closed API Models
GPT-4가 성능이 가장 좋음
Unsupervised Learning
거리를 재서 클러스터링을 할수도 있음
"text -> number" -> [model] -> topic == "sports" ?
다 똑같은 말이다.!!
feature extraction
(feature) encoding
(word) embedding (고차원의 벡터로 바뀌는것)
word representation
numerical representation
vectorization
AI를 쉽게 표현하면, 숫자들을 엄청 연산하는 연산기계
- 파라미터 숫자 몇 천개가 들어가서 계산하는 연산하는것
- 연산 엄청 수행함
(질문) 텐서플로우 vs 파이토치 어떤거 선호하시나요 ?
- 파이토치를 엄청 선호함
- 언어모델 만든다음에 배포 , IoT 배포 -> 텐서플로우 많이씀
- 파이토치 (오픈소스)가 더 많음
- 파이토치가 허깅페이스가 잘되어있음
- 언어모델이 계속 커지면 경량화하는게 중요함
- torch로 경량화 하는 기능들이 많음
- gpu와 연동하기 쉬워서 많이 쓴다
- 파이토치나 텐서플로우 안쓰고 현업에서 onnx 쓰는 이유는 ?
- 파이썬이 속도가 느려서 c++로 진행함
텍스트에서 반복 어구,단어, 문장 등을 찾으려고 하는데, NLP TASK로 가능한 것이 있다면 어떤 것인지?
- 정규식표현식으로 원하는 패턴어구를 정규식표현으로 찾을 것이다!!
- 그때 한번 원하는 방향으로 하면 될 것 같다