자연어 처리 (NLP: Natural Language Processing)
인공지능의 한 분야로 비정형 데이터인 자연어(글자나 음성의 형태)를 기계가 사람처럼 이해하고 반응할 수 있도록 하려는 분야
간단하게 말하자면 컴퓨터와 사람의 언어 사이의 상호작용에 관해 연구하는 분야이다. 컴퓨터가 이용자와의 대화 속에서 의도를 찾아내고 다양한 형태의 데이터로부터 정확한 정보를 제공하는 것을 목적으로한다.
1. 비정형 데이터 형식으로 들어온 음성이나 텍스트 데이터의 입력값 분석 -> 이를 토대로 결과 출력
2. 여기서 NLP 알고리즘이 해당 대화를 분석하는 과정을 '자연어의 이해'라고 한다.
3. 그리고 분석과정을 거친 후 결과를 도출하는 것은 '자연어 생성'이라고 한다.
ex. 챗봇, ChatGPT 등
자연어 이해(Naural Language Understanding)
자연어 처리의 세부 분야로서, 읽기에 비유될 수 있고 문법적이고 의미론적으로 자연어를 분석하여 이해하려는 분야
ex. 토픽 분류, 뉴스기사 카테고리 분류 등
3.
자연어 생성(Natural Language Generation)
자연어 처리의 세부 분야로서, 쓰기에 비유될 수 있고 입력된 자연어에 대하여 목적에 맞게 자연어를 생성하는 분야
ex. 기계번역 등
"자연어처리는 이제 개발자와 비개발자 모두에게 중요한 기술이 되고 있다."(한국어)
-> "Natural language processing is now becoming an important skill for both developers and non-developers alike."(영어)
NLP 전처리 과정
컴퓨터가 비정형 텍스트를 인식하기 위해서는 몇가지 전처리 과정이 필요하다.
Tokenization(토큰화)
해당 데이터를 사용하고자하는 용도에 맞게 토큰화한다. 문장을 토큰(형태소)단위로 구분하는 작업
"나는 서울에 산다" -> 나, 는, 서울, 에, 산다
자연어 -> '계산 가능한' 데이터로 변환
BoW: Bag of Words
단어들의 순서는 전혀 고려하지 않고, 단어들의 출현 빈도(frequency)에만 집중하는 텍스트 데이터의 수치화 표현 방법
Bag of Words를 직역하면 단어들의 가방이라는 의미이다.
ex. "나는 서울에 산다" -> 나, 는, 서울, 혼자, 에, 산다, 있다 [1, 1, 1, 0, 1, 1, 0] (vector로 표현) => Cosine Similarity
이는 직관적인 반면 순서가 고려되지 않는다.
또한 vector의 길이가 vocab의 길이만큼 길어질 수 있다.
ex.
doc2 = '소비자는 주로 소비하는 상품을 기준으로 물가상승률을 느낀다.'
vocab, bow = build_bag_of_words(doc2)
print('vocabulary :', vocab)
print('bag of words vector :', bow)
vocabulary : {'소비자': 0, '는': 1, '주로': 2, '소비': 3, '하는': 4, '상품': 5, '을': 6, '기준': 7, '으로': 8, '물가상승률': 9, '느낀다': 10}
bag of words vector : [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1]
코사인 유사도(Cosine Similarity)
코사인 유사도는 두 벡터 간의 코사인 각도를 이용하여 구할 수 있는 두 벡터의 유사도를 의미한다.
두 벡터의 방향이 완전히 동일한 경우에는 1의 값을 가지며, 90°의 각을 이루면 0, 180°로 반대의 방향을 가지면 -1의 값을 갖게 된다. 즉, 결국 코사인 유사도는 -1 이상 1 이하의 값을 가지며 값이 1에 가까울수록 유사도가 높다고 판단할 수 있다. 이를 직관적으로 이해하면 두 벡터가 가리키는 방향이 얼마나 유사한가를 의미한다.
'Prompt Engineering' 카테고리의 다른 글
LangChain RAG (0) | 2024.01.14 |
---|---|
Prompt Engineering (1) | 2023.12.28 |
LLaMA Paper review: pytorch in LLaMA (1) | 2023.12.26 |