https://summerorange.tistory.com/entry/%EA%B8%80%EB%98%90-NLP-writing-%EC%9D%BC%EC%A0%95
(*제가 이해한 것 기준으로 작성했습니다. 잘못된 정보가 있을 수 있습니다.)
1. 자연어란?
자연어 처리란 무엇인지에 대해서 자연어 처리의 산물인 chatGPT에게 물어보았다. 일단 한국어와 영어 모두 질문을 동일하게 물어봤다. 한국어로 질문할 때 대답하는 것을 잘보면 영어를 번역했다는 것을 알 수 있다.
|
상단의 챗gpt가 백과사전적인 이야기를 해주고 있는데,
전...간단하게 이해하는 걸 좋아합니당...
일단, 자연어란 비정형 데이터이다. 정형 데이터는 흔히 보듯 엑셀 형태의 숫자가 행과 열의 일정한 기준에 의해서 정리된 데이터이고, 비정형 데이터는 솔직히 수작업으로 말과 음성을 기록하고 분석해야 하는 데이터이다
자연어 Natural Language, 그럼 이 내츄럴 랭귀지는 도대체 뭘까? 여기의 반대가 Artificial Language이다. 인공적인 언어. 즉 컴퓨터 언어이다. 컴퓨터 언어는 0과 1로 이루어져 있는 것이고, 자연어란 인간, 사람, Human의 언어다. 🗣️👤🤬
한숨을 내쉬는 소리, 앗, 음, 어 하고 추임새를 넣는 소리, 고함치는 소리, 웃는 소리, 대화하는 것 모두 자연어 영역에 속한다. 자연어 처리의 예시인 ChapGPT는 text를 기준으로 처리를 해주지만 그 외에도 음성만으로 텍스트를 추출하거나, 텍스트를 음성으로 변환하던가, 입 모양만으로도 해당 텍스트를 추출하는 것들도 해당된다.
즉, 컴퓨터가 사람의 언어(Natural Language)를 처리(Processing)하는 것이 자연어 처리이다.
현재 상용되고 있는 ChatGPT도 사람이 질문을 던질 때, 한국어든 영어든 작성을 하면 이걸 컴퓨터 언어로 이해하고 분석하고, 유사한 것들을 처리(Processing)해서 답변을 해준다. 한국어로 질문해서 한국어로 답변하면 언어 번역, 정보 추출, 자연어 식별, 문장 분류 등이 들어간다.
2. 자연어 처리 History
Computational Linguistics라는 논문이 1965년도에 나왔는데, 이건 컴퓨터와 사람이 대화를 할 수 있게끔 만든 프로그램에 대해서 설명하고 있다. 1960년대에도 사람과 컴퓨터가 어떻게 '언어'로 의사소통을 할 수 있을지에 대해서는 관심 주제 였다. (Eliza 프로그램에 대해서는 예전에 포스팅했는데 찾아서 링크 걸겠습니다.)
단순 프로그램으로 넘어와서 이제는 기계 학습과 스스로 데이터를 습득하는 인공 지능의 세계로 들어왔다. (스크립트가 주어지지 않지만 스스로 스크립트를 만들어 낸다 )
여기까지 발전하기 위해서는 이 단어의 sequence를 어떻게 처리해야 하는지 1개 뒤로? 2개 뒤까지의 단어? 몇 개의 범위의 단어? N-gram 모델(1948), Bag-of-Words 은 아예 단어의 순서를 무시하고 가방에 물건을 우르르 집어 넣는 것처럼 문서 자체를 단어의 가방으로 취급하는 방식의 모델(1954), 희소성 문제를 해결하기 위한 분산 표현 모델 (1986), 단어 sequence의 결합 확률을 보는 신경 확률 언어 모델, 벡터 개념을 도입해서 모델 매개변수로 최적화 하는 방법인 word2vec(2013), 전이 학습과 트랜스포머를 고려한 ELMo, BERT(2018) (GPT1도 이 때,) 등으로 지속적으로 발전해 나가고 있다. 그리고 현재 ChapGPT의 등장(2022)
3. 자연어 처리의 Now
현재 자연어 처리는 곧 상용화될 것 같은 마이크로소프트 사 & OpenAI의 ChatGPT, 구글의 Bard 등이 나오고 있다. 인간의 언어를 처리해서 대답하는 똑똑한 AI가 나오고 있다. 무수히 많은 데이터를 학습해서 학습한 것 기준으로 대답해 준다.
지금 작성하는 글보다 좀 더 전문적이고 좀 더 정확한 글은 사실상 스칼라에 많이 분포하고 있다. 영문으로 검색하면 대략 오백만개 정도의 논문들이 나오고 있다.
한국어로도 검색해 보니 대략 만 8천개 정도의 논문이 나왔다. (한국어든 영어든 날짜는 따로 기준을 잡지 않았다. )
참고로, 지금 나오고 있는 자연어 처리는 전부 '영어' 기준이다. 영어 기준으로 언어의 토큰화, 말뭉치 등등을 진행한다면, 보통 띄어쓰기를 기준으로 해서 토큰화, 말뭉치, 문맥 등을 분석한다. .split(" ") 이렇게. 예시 코드는 다음과 같음.
import nltk
# Tokenization
text = "This is an example sentence, 한글을 띄어쓰기 기준으로 분류하면 한 땀 한 땀을 한과 땀으로 분석함."
tokens = nltk.word_tokenize(text)
print(tokens)
# Part-of-speech tagging
tagged = nltk.pos_tag(tokens)
print(tagged)
# Named entity recognition
entities = nltk.chunk.ne_chunk(tagged)
print(entities)
예시 코드는 대체로 영문으로 많이 되어있다. 실습을 할 수 있는 것도 영어 데이터가 월등히 더 많다. 하지만 실무에서 처리해야 하는 건 한국어 데이터다.
한국어 자연어 처리는 상당히 난이도가 있다. 한국어 자체가 영어와 순서, 자음 모음, 띄어쓰기 기준 등등이 모두 다른 언어다. (당연하지만...👏) 가끔 어떤 프로그램들을 사용하면(특히 외국 개발자분들이 만든 것) 영어처럼 default값이 띄어쓰기 기준이라서 별 의미없는 분석을 내놓는 경우도 많아서... 영어는 띄어쓰기 기준으로 해당 단어를 띄어쓰기 기준으로 해체하듯 해서 분석을 하면 꽤 괜찮은 결과가 나올지도 모르겠지만,
한국어는 "한 땀 한 땀 피눈물을 흘리면서 어제 만들었어" 라는 걸 띄어쓰기 기준으로 분석하면 {"한": 2, "땀" : 2, ... "} 이런 식으로 한 땀이라고 사람은 그 자체 단어로 보지만, 컴퓨터는 띄어쓰기를 기준으로, 한과 땀이 나뉘어지고 이렇게 되면 문맥에서 쓰이는 것과 완전히 다른 언어가 되어서 분석 상 frequency는 상위권이지만 이 정보가 의미가 있을지는 모르겠다...
이러한 점들을 보완하여 형태소 Tagging 이라던가, 명사나 한국어 만의 특징들을 추출해서 분석하는 여러 다른 라이브러리를 함께 쓸 수 있다.
대표적인 건 KoNLPy
한국어 분석하는데 KoNLPy는 빼놓을 수 없다. Java나 C++로 만들어진 다른 형태소 분석기를 Python 언어로 활용할 수 있도록 했다.
믓진 연구자님들의 노력 덕분에,
NLP는 발전하고 있다.
4. 자연어 처리의 FUTURE
사실 잘 모른다...잘 모르는데...감히, 갈 길이 멀지 않을까란 생각을 해봅니다...
자연어 처리 기술은 완전하지 않다.
목차에 미래를 넣긴 했지만 현재도 파악이 안되는데 미래는 영 모르겠다. 😆
일단 자연어 처리의 활용도에 대해서 살펴보면,
- 분야별 문서 분석
- 몇 백개가 넘어가는 콘텐츠의 카테고리 분류
- 트렌드 추적
- 검색 엔진 최적화
- 소셜 미디어 분석
- 비지니스 고객 언어의 감정 분석
- 스팸 및 유해 단어 차단
- FAQ 자동 응답 챗봇
- 오피니언 마이닝
의료, 법률, 금융, 서비스 전반에 활용될 수 있다.
멀게만 보이는데 당장 일상적으로 처리해야 하는 많은 업무들을 자동화시킬 수 있을 것이다.
엑셀 데이터 여러개를 통합해서 분석해서 다시 여러개의 데이터로 만들어서 자동으로 메일 보내는 시스템 같은 작은 것들부터,
텍스트만 입력하면 관련 영상을 생성해주는 것도 이루어지고 있다.
5. 마무리
논문 읽을 때마다 드는 생각이... 다시 읽어도 새롭고 새롭다🥲 컴퓨터가 자동으로 해주는 건 해주는 건데, 큰 그림은 사람이 시켜야 한다. 마이닝 해서 핵심 단어만 알려주는 건 어떨 땐 편리할 지 모르는데, 이게 뭐지? 왜 저런 게 있는 거지? 이걸 어떻게 연결 시킬까? 그 다음은 무엇이지?? 그러니까 자연어가 뭐고 정확하게 왜 이게 우리에게 필요한 거야? 이걸로 뭘 할 수 있지? 어떻게 변할 거지? 라고 자꾸 질문하는 부분이 중요하다고 생각한다. 직장 가서 내내 누가 시키는 것만 할 순 없다. 그렇게 되어서도 안되고, 마찬가지로, 컴퓨터도 넋놓고 있다간 시간 테이커가 될 것이다. 알아서 주어지는 것만 해선 안된단 생각을 많이 했다...
정보들은 검색은 찾으면 나오는 거고, 사실 관계를 따지고, 해석하고 자기 만의 방식으로 이해하고 만들어나가는 과정이 중요하지 않을까,
이런 능력이 앞으로도 더 중요하지 않을까?
print("Hello, Human. 나 일시키지 마라 휴먼. 네가 일해라 휴먼.")
Reference
Liu, Z., Lin, Y., & Sun, M. (2020). Representation learning for natural language processing (p. 334). Springer Nature.
Kuno, S., & Oettinger, A. G. (1968). Computational linguistics in a Ph. D. computer science program. Communications of the ACM, 11(12), 831-836.
Park, E. L., & Cho, S. (2014). KoNLPy: Korean natural language processing in Python. In Annual Conference on Human and Language Technology (pp. 133-136). Human and Language Technology.
'NLP-writing' 카테고리의 다른 글
미적분 - 경사 하강법(gradient descent) (0) | 2023.04.27 |
---|---|
Linear Algebra 선형대수학 with NLP (0) | 2023.04.09 |
3. Probability - 베이지안Bayesian (0) | 2023.03.26 |
2 정규표현식을 익히자 Regular Expression with Python (0) | 2023.03.20 |
[글또] NLP writing - 일정 (0) | 2023.02.11 |