(예) Chatbot의 여러 가지 기능
- Sentiment Analysis (텍스트에 녹아 있는 감정 또는 의견을 파악)
- Tokenization (단어의 최소한의 의미를 파악하는 쪼개기)
- Named Entity Recognition (텍스트로부터 주제 파악하기)
- Normalization (의도된 오타 파악하기)
- Dependency Parsing (문장 구성 성분의 분석)
Siri의 여러 가지 기능
- Feature Analysis (음성 데이터로부터 특징을 추출)
- Language Model (언어별로 갖고 있는 특성을 반영)
- Deep Learning (이미 학습된 데이터로부터 음성 신호 처리)
- HMM: Hidden Markov Model (앞으로 나올 단어 또는 주제의 예측)
- Similarity Analysis (음성 신호가 어떤 기준에 부합하는가?)
Papago의 여러 가지 기능
- Encoding (유사도 기반 자연어의 특징 추출)
- Time Series Modeling (문장을 시간에 따른 데이터로 처리)
- Attention Mechanism (번역에 필요한 부분에만 집중하기)
- Self-Attention (문장 사이의 상관관계 분석하기)
- Transformer (Attention 구조를 이용한 번역 원리) - 바로 위 두 개의 조합
컴퓨터 및 컴퓨터 언어에서 자연어를 효과적으로 처리할 수 있도록 아래의 세 가지 "전처리" 과정을 거쳐야 함
토큰화, 정제 및 추출, 인코딩
문장을 형태소 단위(의미 부여가 가능한 단위)로 자르는 것
예) I / love / you / for / always / Do / n't / be / afraid
⌨️ Input
from nltk.tokenize import TreebankWordTokenizer tokenizer = TreebankWordTokenizer() text = "Model-based RL don't need a value function for the policy." print(tokenizer.tokenize(text))
⌨️ Output
['Model-based', 'RL', 'do', "n't", 'need', 'a', 'value', 'function', 'for', 'the', 'policy', '.']
시간 및 메모리의 효율화를 위해 중요한 단어만 추출하는 것
예) I was wondering if you can help me on this problem.
✔️ 정제 (Cleaning)
데이터 사용 목적에 맞춰 노이즈를 제거 (예, 대문자→소문자, 출현 횟수가 적은 단어의 제거, 길이가 짧은 단어(관사, 지시대명사 등) 제거)
✔️ 추출 (Stemming)
어간(Stem) : 단어의 의미를 담은 핵심
접사(Affix) : 단어에 추가 용법을 부여 (복수 -s, 진행형 -ing, 명사형 -ness 등)
⌨️ 불용어 제거 과정
from nltk nltk.download('stopwords') nltk.download('punkt') from nltk.corpus import stopwords from nltk.tokenize import word_tokenize input_sentence = "We should all study hard for the exam." stop_words = set(stopwords.words('english')) word_tokens = word_tokenize(input_sentence) result = [] for w in word_tokens: if w not in stop_words: result.append(w) print(word_tokens) print(result)
남겨진 단어들을 숫자로 바꾸는 것
원-핫 인코딩 (0, 1)
Word2vec 인코딩
TF-IDF (Term Frequency - Inverse Document Frequency)
단어들의 중요한 정도를 가중치로 매기는 방법 ( : 특정 문서 번호, : 특정 단어 번호)
Padding (Zero-padding)
Count-based Approximation
N-gram Language Model
p(core | Deep Learning has become a)
, n=2
: 뒤에서 n 번째 자리 단어까지만 참조함한국어 언어 모델은 단어의 순서가 바껴도 문장의 의미는 동일한 경우가 많음
벡터 노름(np.linalg.norm()
)에 코사인을 곱한 것
얼마나 유사한지의 척도 (정반대의 경우 -1, 유사성이 없을 경우 0, 동일할 경우 1)
예시) [1, 1, 0] & [1, 0 -1]
→