본문 바로가기
컴퓨터공학/기초

자연어 처리 (NLP; Natural Language Process)

by 하이방가루 2022. 12. 24.
728x90
반응형

이 글은 Crash Course의 Computer Science를 보고 정리한 글입니다.

  어떻게 하면 컴퓨터에게 언어를 이해하는 능력을 줄 수 있을까? 프로그래밍 언어는 언어의 정의를 확실히 충족시키는 것은 사실이지만, 작은 어휘를 사용하고 고도로 구조화된 규칙을 따르는 경향이 있다. 코드는 철자 및 구문 오류가 100% 없으면 컴파일되고 실행된다.

  물론 이것은 자연어라고 부르는 인간의 언어와 완전히 다르다. 크고 다양한 어휘와 여러 가지 다른 의미를 지닌 단어, 사람마다 다른 억양으로 말할 수 있고, 모든 종류의 언어유희를 포함한다. 또한 사람들은 글을 쓰거나 말을 할 때 모호한 단어를 사용하거나, 세부사항을 빠뜨림으로써 모호하게 하고 잘못 발음하기도 하는 등 언어적인 실수를 한다.

  그러나 대부분의 경우, 인간은 이러한 실수를 바로잡을 수 있다. 언어의 숙련된 사용은 우리를 인간으로 만드는 하나의 중요한 부분이다. 이런 이유로, 컴퓨터에게 우리의 언어를 이해시키고 말하도록 하고 싶은 욕망은 컴퓨터가 처음 생겨난 이래로 계속 있었다.

  이로 인해 컴퓨터 과학과 언어학을 결합한 학제 간 분야인 자연어 처리(NLP; Natural Language Process)가 만들어졌다.

 

  문장에 단어를 배열하는 방법은 본질적으로 무한하다. 우리는 컴퓨터가 인간이 무엇에 대해 불평하는지 이해할 수 있게 하는 문장의 사전을 제공할 수는 없다. 그래서 초기의 근본적인 NLP문제는 좀 더 쉽게 처리할 수 있는 간단한 문장으로 분해하는 것이었다. 언어를 배울 때, 9가지 근본적인 영어단어 유형을 배울 것이다. 명사, 대명사, 관사, 동사, 형용사, 부사, 전치사, 접속사 및 감탄사. 이것들을 품사(Parts of Speech)라고 한다. 단수 vs 복수 명사, 최상급 vs 비교 부사와 같은 모든 종류의 하위 범주도 있다. 하지만 이것들을 다루진 않겠다.

  단어 유형을 아는 것은 확실히 유용하지만 불행히도, 많은 단어들은 다양한 의미를 지닌다. 예를 들어 rose와 leaves는 명사 또는 동사로 사용될 수 있다. 이 모호성을 해결하려면 디지털 사전만으로는 충분하지 않으므로 컴퓨터도 문법을 알아야 한다. 이를 위해, 구문 구조 규칙이 개발되었으며, 언어의 문법을 압축한다.

  예를 들어, 영어는 문장은 명사구 뒤에 동사구가 오게 구성된다는 규칙이 있다. 명사구는 "the"와 같은 관사나 형용사가 명사 앞에 올 수 있다. 전체적으로 이런 언어 규칙을 만들 수 있다. 그런 다음 이 규칙을 사용하면, 구문 분석트리(Parse tree)라는 것을 만들기 쉽다. 구문 분석트리는 모든 단어에 가능성 있는 부분으로 태그를 지정할 뿐만 아니라 문장이 어떻게 구성되는지도 보여준다.

예를 들어, 위 문장의 명사 초점은 "Mongls"이며, 무언가(이 경우에는 "leaves")에서 "rose"행동을 하는 것이 그들에 관한 것임을 알고 있다. 이 작은 데이터 청크는 컴퓨터에게 정보에 보다 쉽게 접근하고 처리하며, 대응할 수 있도록 한다.

  만약 여러분이 "가장 가까운 피자집은 어디"와 같이 음성검색을 할 때마다 같은 프로세스가 매번 반복된다. 컴퓨터는 이것이 "어디"에 대한 질문이고, 여러분이 원하는 것이 "피자"이며 관심 있는 특성은 "가장 가까운"것 임을 인식한다. 거의 Lego와 같이 언어를 다룸으로써, 컴퓨터는 자연어 작업에 능숙할 수 있다. 이로써 컴퓨터는 질문에 답할 수 있고, "2시 20분에 알람 설정" 또는 "spotify에서 T-Swizzle 재생"과 같은 명령을 처리할 수도 있다.

 

  하지만, 문장이 너무 화려해지기 시작하면 자연어 작업에 실패한다. 컴퓨터는 더 이상 문장을 올바르게 구문을 분석하거나 여러분의 의도를 포착할 수 없다. 또한 구문 구조 규칙과 언어를 체계화하는 비슷한 방법을 컴퓨터가 자연어 문장을 만드는 데 사용함을 유의해야 한다. 이 기능은 데이터가 의미론적 정보의 웹에 저장될 때 특히 효과적이다. 여기서 독립체들은 서로 의미 있는 정보로 연결되어 정보 문장을 만드는 데 필요한 모든 재료를 제공한다. 

  Google의 버전을 지식 그래프(Knowledge Graph)라고 한다. 2016년 말에는 약 7백억 가지의 서로 다른 독립체들 간의 관계가 포함되었다. 구문 분석 텍스트 생성의 두 가지 프로세스는 자연어 챗봇의 기본 구성 요소이다. 챗봇은 사용자와 채팅하는 컴퓨터 프로그램이다. 초기 챗봇은 주로 규칙 기반이었으며 전문가는 사용자가 말할 수 있는 것을 매핑하는 수백 가지 규칙을 인코딩하고 프로그램이 응답해야 하는 방식에 대해 설명했다. 분명히 이것은 가능한 정교함을 제한했고 유지하기 힘들었다.

  유명한 초기의 사례는 1960년대에 중반 MIT에서 만든 ELIZA였다. 이것은 치료사 역할을 맡은 챗봇이었고, 서면 교환의 내용을 식별하기 위해 기본 구문 규칙을 사용했다. 이 규칙은 사용자에게 되돌아와 물어보는 것이었다. 때때로 그것은 사람들의 의사소통과 매우 유사하지만, 다른 때는 단순하고 웃긴 실수를 저지르기도 한다.

 

  챗봇 및 고급 대화 시스템(Dialog System)은 지난 50년 동안 먼 길을 왔다. 오늘날의 이것은 아주 설득력 있게 작동한다. 현대적인 접근 방식은 기계 학습을 기반으로 대용량의 실제 사람 사이의 대화를 통해 챗봇을 훈련시킨다. 오늘날 이 기술은 이미 배울 수 있는 대화가 있는 고객 서비스 응용 프로그램에서 예제를 찾고 있다. 사람들은 또한 챗봇을 다른 상대와 대화하도록 하고 있으며, 페이스북 실험에서 챗봇도 심지어 자신의 언어를 진화시키기 시작했다. 이 실험에는 알 수 없는 대화가 잔뜩 있었다. 하지만 이 대화는 컴퓨터가 단지 서로 협상하기 위한 단순화된 프로토콜을 만든 것이었다. 이 대화는 사악하지 않았고, 효율적이었다.

 

  그러나 무엇인가를 말하면 어떨까? 컴퓨터가 어떻게 소리에서 단어를 얻을까? 이것은 음성 인식 분야(Speech Recognition)이다. 이는 수 십 년간 많은 사람들에게 연구의 초점이 되어왔다.

  최초의 음성 인식 시스템인 Bell Labs는 1952년 데뷔하여 Audrey라는 별명을 얻었다. 이것은 자동 숫자 인식기였다. Audrey에게 천천히 숫자를 말한다면 Audrey는 10개의 모든 숫자를 인식할 수 있다. 손으로 전화번호를 입력하는 게 훨씬 빨랐기 때문에 프로젝트는 별 쓸모가 없었다.

  10년 후, 1962년 세계 박람회에서 IBM은 16개 단어를 인식할 수 있는 신발장 크기의 기계를 시연했다. 이 분야의 연구를 강화하기 위해 DARPA는 1971년에 야심 찬 5개년 계획을 시작했다. 이는 카네기 멜론 대학에서 Harpy의 개발을 이끌었다. Harpy는 천 단어 이상을 인식하는 최초의 시스템이었다.

  그러나 이 시대의 컴퓨터는 자연스러운 대화보다 속도가 종종 10배 또는 그 이상 느렸다. 다행히도 1980년대와 90년대의 컴퓨팅 성능의 크나큰 발전으로 인해, 실시간 음성 인식이 실용화되었다. 자연어 처리 알고리즘에 동시적인 혁신이 있었다. 손으로 만든 규칙에서 인간 언어의 기존 데이터 세트로부터 자동으로 학습할 수 있는 기계 학습 기술까지. 

 

  오늘날, 최고의 정확성을 갖춘 음성 인식 시스템은 심층 신경망을 사용한다. 이러한 기술이 어떻게 작동하는지 이해하기 위해, 몇 가지 음성, 특히 음향 신호를 살펴보겠다. "아"와 "이"와 같은 모은 소리부터 살펴보겠다.

아(왼쪽) 와 이(오른쪽)

위 그림은 컴퓨터의 마이크에 의해 캡처된 두 소리의 파형(waveform)이다. 파일 및 파일 형식에서 논의했듯이, 이 신호는 음파가 발진할 때 마이크 내부 진동판의 변위 크기이다. 사운드 데이터의 관점에서, 가로축은 시간이고 세로축은 변위의 크기 또는 진폭이다.

  파형 간의 차이가 있음을 알지라도, 어떤 소리라고 명확히 말할 수 없다. 이 문제를 실제로 해결하려면 완전히 다른 방식으로 데이터를 볼 필요가 있다. - 스펙트로그램(Spectrogram)

이 데이터 관점에서 가로축은 여전히 시간을 나타내지만 세로축에 진폭 대신 각 사운드를 구성하는 다른 주파수의 크기를 플롯 한다. 색상이 밝은수록, 주파수 성분의 세기가 더 커진다. 파형에서 주파수로의 변환은 고속 푸리에 변환(FFT; Fast Fourier Transform)이라는 알고리즘으로 마무리된다.

  스테레오 시스템의 EQ 시각화 프로그램을 보았었다면 그것과 거의 비슷하다. 스펙트로그램은 시간의 경과에 따라 정보를 플로팅 한다. 위 그림에서 신호가 갈비뼈모양 패턴을 갖는 것을 볼 수 있을 것이다. 그것은 목소리 영역의 모든 공명이다. 다른 소리를 내려면 입, 혀, 화음을 다른 모양으로 쥐어짜야 한다. 이는 다른 공명을 증폭시키거나 감쇠시킨다. 이 신호를 스펙트로그램에서 더 밝거나 어두운 영역을 통해 볼 수 있다.

  스펙트럼의 최고점(Formants)을 표시하는 라벨을 붙이면 두 소리가 상당히 다른 배열을 갖고 있음을 알 수 있다.

그리고 이것은 실제 모든 모음 소리에 해당된다. 바로 이러한 정보 유형이 정확히 컴퓨터가 들은 모음과 전체 단어를 인식하게 한다.

  더 복잡한 예제를 살펴보자. "She was happy"라고 말하면 아래와 같은 스펙트로그램을 볼 수 있다.

여기서 "이"와 "아" 소리뿐만 아니라 "she"의 "shh", "was"의 "wah" 및 "sss"등과 같은 다른 독특한 사운드도 볼 수 있다. 단어를 구성하는 이 사운드 조각들은 음소(Phoneme)라고 불린다. 음성 인식 소프트웨어는 모든 음소들이 어떻게 생겼는지를 안다. 영어로 보면 약 44가지가 있는데, 그래서 음성 인식 소프트웨어는 주로 패틴 일치로 귀결된다. 그런 다음 단어를 서로 분리하여 문장이 언제 시작되고 끝나는지 알아낸다. 궁극적으로, 여러분이 하는 말이 텍스트로 변환되어 초반에 얘기했던 기술을 사용할 수 있다.

  사람들은 악센트와 잘못된 발음으로 인해 약간 다른 방식으로 단어를 말하기 때문에, 단어의 순서에 관한 통계를 포함한 언어 모델(Language Model)을 결합하면 텍스트 변환의 정확성은 크게 향상된다. 예를 들어 "She was"는 뒤에 "happy"와 같은 형용사가 뒤따라올 가능성이 가장 높다. "She was" 뒤에 즉시 명사가 나오는 경우는 드물다. 따라서 음성 인식기가 "happy"와 "harpy" 중 헷갈릴 경우 음성 인식기는 "happy"를 고를 것이다. 이는 언어 모델이 가능성 있는 선택으로 기록하기 때문이다.

 

  마지막으로, 음성 합성(Speech Synthesis), 즉 컴퓨터에 말하기 능력을 부여하는 것에 관해 이야기할 필요가 있다. 이것은 음성 인식과 매우 비슷하지만 반대로 작동한다. 글에서 한 문장을 가져와 그것을 음성 구성 요소로 분해하고, 컴퓨터 스피커로 그 소리를 연속 재생할 수 있다. 1937년 벨 연구소의 수작업 기계와 같은 구형 음성 합성 기술로 이 음소 변화를 아주 분명하게 들을 수 있다. 1980년대까지 많이 개선되었지만, 불연속적이고 어색한 음소의 혼합은 아직까지 그 상징적인 로봇 소리를 만들어 냈다.

  오늘날 시리, 코타나, 알렉사와 같이 합성된 컴퓨터 음성은 훨씬 나아졌다. 그러나 그것들도 아직도 꽤 사람 같진 않다. 하지만 이 문제는 곧 해결될 것이다. 특히 전화, 자동차 및 가정에서 음성 사용자 인터페이스(Voice User Interface)가 폭발적으로 증가하고 있으며 아마 곧 우리 귀에도 연결될 것이다.

  이 편재성은 사람들이 음성 상호 작용을 자주 사용하는 긍정적인 피드백 고리를 만들어 내며 이는 결국 구글, 아마존 및 마이크로소프트 같은 회사에 시스템을 훈련시키는 많은 데이터를 제공한다. 더 나은 정확도를 가능하게 하여 음성을 더 많이 사용하도록 사람들과 이어지고 이는 더 나은 정확성을 가능하게 한다.

 

  많은 사람들은 음성 기술이 일반적인 상호 작용 형태가 될 것이라고 예측한다. 스크린, 키보드, 트랙 패드 및 기타 오늘날 우리가 사용하는 물리적인 입출력 장치들처럼. 

728x90
반응형

댓글