자연어 처리 편집하기

이동: 둘러보기, 검색

경고: 로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다. 로그인하거나 계정을 생성하면 편집자가 아이디(ID)으로 기록되고, 다른 장점도 있습니다.

편집을 되돌릴 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 저장해주세요.
최신판 당신의 편집
1번째 줄: 1번째 줄:
'''자연어 처리'''(natural language processing)란 컴퓨터를 이용하여 인간의 언어를 이해하고 생성 및 분석하는 [[인공지능 기술]]이다. 인간의 언어 현상을 컴퓨터와 같은 기계를 이용해서 모사할 수 있도록 연구하고 이를 구현하는 [[인공지능]]의 주요 분야 중 하나이다. 영어 약자로 '''NLP'''(엔엘피)라고 한다. 자연어 처리는 연구대상이 언어학과 언어 현상의 내적 기재를 탐구하는 언어 인지 과학과 연관이 있다. 구현을 위해 수학적 통계적 도구가 많이 활용되며, 기계 학습 도구가 많이 사용된다.  
+
'''자연어 처리'''(natural language processing)란 컴퓨터를 이용하여 인간의 언어를 이해하고 생성 및 분석하는 [[인공지능 기술]]이다. 인간의 언어 현상을 컴퓨터와 같은 기계를 이용해서 모사 할 수 있도록 연구하고 이를 구현하는 인공지능의 주요 분야 중 하나다. 자연어 처리는 연구대상이 언어학과 언어 현상의 내적 기재를 탐구하는 언어 인지 과학과 연관이 있다. 구현을 위해 수학적 통계적 도구가 많이 활용되며, 기계 학습 도구가 많이 사용된다.  
  
 
== 개요 ==
 
== 개요 ==
213번째 줄: 213번째 줄:
 
머신러닝 기반의 대화 상대 추적은 강화학습으로 대변되는 정책 결정 문제로 변환하여 해결한다. 대화 상태 추적에 적용된 대표적 정책 결정 모델은 POMDP(Partially Observable Markov Decision Process) 모델이다. POMDP 모델은 대용량의 대화 말뭉치로부터 강화학습을 통해 시스템의 대화 상태를 확률적으로 파악하고 다음 행동을 결정한다. 확률 기반 모델은 음성 인식 오류를 포함한 예기치 않은 사용자 입력에 대해서 부분적으로 관찰된 정보를 바탕으로 시스템의 의도를 결정할 수 있다는 장점이 있지만 학습을 위해서 매우 많은 담화 정보 부착 말뭉치를 필요로 한다는 문제를 안고 있다. 최근에는 딥뉴럴넷을 이용하여 다음 행동을 결정하는 NNMDP(Neural Network Markov Decision Process)와 같은 모델이 연구되고 있다.<ref name="김학수"></ref>
 
머신러닝 기반의 대화 상대 추적은 강화학습으로 대변되는 정책 결정 문제로 변환하여 해결한다. 대화 상태 추적에 적용된 대표적 정책 결정 모델은 POMDP(Partially Observable Markov Decision Process) 모델이다. POMDP 모델은 대용량의 대화 말뭉치로부터 강화학습을 통해 시스템의 대화 상태를 확률적으로 파악하고 다음 행동을 결정한다. 확률 기반 모델은 음성 인식 오류를 포함한 예기치 않은 사용자 입력에 대해서 부분적으로 관찰된 정보를 바탕으로 시스템의 의도를 결정할 수 있다는 장점이 있지만 학습을 위해서 매우 많은 담화 정보 부착 말뭉치를 필요로 한다는 문제를 안고 있다. 최근에는 딥뉴럴넷을 이용하여 다음 행동을 결정하는 NNMDP(Neural Network Markov Decision Process)와 같은 모델이 연구되고 있다.<ref name="김학수"></ref>
  
== 알고리즘 ==
+
== 연구 ==
자연어 처리는 인간의 언어를 분석하고 표현하는 과정을 자동화하기 위한 계산 기법이다. 과거에는 문장을 입력하기 위해 펀치 카드를 사용하여 7분 정도의 시간이 소요됐지만, 현재는 컴퓨터가 파싱, 기계 번역, 품사 태깅 등을 수행하여 자연어를 처리할 수 있도록 꾸준히 연구되고 있다. 지난 수십 년간 자연어 처리를 해결하기 위해 사용했던 머신러닝은 고차원적인 피처를 학습한 얕은 모델에 기반한다. 머신러닝에 기반한 자연어 처리 시스템은 사람의 손길에 강하게 의존하기 때문에, 많은 시간을 낭비하고 불완전하다는 단점이 있다. 이에 따라 최근 자연어 처리와 관련하여 다양한 모델과 기법들이 적용되고 있다. 여기에는 딥러닝 기법도 해당한다. 딥러닝은 피처를 자동으로 추출하고 표현할 수 있어 새로운 연구 주제로 떠올랐고, 현재 많은 도메인에서 사용되고 있다. 딥러닝 기반의 알고리즘은 데이터의 다층 계층을 사용하여 데이터의 계층적인 표현을 학습한다. 딥러닝 알고리즘의 성장으로, 지난 2017년 기준, 6년간 딥러닝에 관한 논문은 대체로 꾸준히 늘고 있다. 딥러닝은 많은 양의 데이터를 활용할 수 있어, 관리자가 별도로 수작업을 할 필요가 거의 없다. 앞으로도 자연어 처리 시스템이 사용된 애플리케이션은 꾸준히 증가할 것이다. 수많은 딥러닝 알고리즘 및 모델들의 일부를 예시로 들자면 다음과 같다.<ref name = "딥러닝 기반 자연어처리 기법의 최근 연구 동향"> 이기창, 〈[https://ratsgo.github.io/natural%20language%20processing/2017/08/16/deepNLP/ 딥러닝 기반 자연어처리 기법의 최근 연구 동향]〉, 《깃허브》, 2017-08-16</ref>
+
자연어 처리는 인간의 언어를 분석하고 표현하는 과정을 자동화하기 위한 계산 기법이다. 과거에는 문장을 입력하기 위해 펀치 카드를 사용하여 7분정도의 시간이 소요됐지만, 현재는 컴퓨터가 파싱, 기계 번역, 품사태깅 등을 수행하여 자연어를 처리할 수 있도록 꾸준히 연구되고 있다. 지난 수십년간 자연어 처리를 해결하기 위해 사용했던 머신러닝은 고차원적인 피처를 학습한 얕은 모델에 기반한다. 머신러닝에 기반한 자연어 처리 시스템은 사람의 손길에 강하게 의존하기 때문에, 많은 시간을 낭비하고 불완전하다는 단점이 있다. 이에 따라 최근 자연어 처리와 관련하여 다양한 모델과 기법들이 적용되고 있다. 여기에는 딥러닝 기법도 해당한다. 딥러닝은 피처를 자동으로 추출하고 표현할 수 있어 새로운 연구 주제로 떠올랐고, 현재 많은 도메인에서 사용되고 있다. 딥러닝 기반의 알고리즘은 데이터의 다층레이어를 사용하여 데이터의 계층적인 표현을 학습한다. 딥러닝 알고리즘의 성장으로, 지난 2017년 기준, 6년간 딥러닝에 관한 논문은 대체적으로 꾸준히 늘고 있다. 딥러닝은 방대한 양의 데이터를 활용할 수 있어, 관리자가 별도로 수작업을 할 필요가 거의 없다. 앞으로도 자연어 처리 시스템이 사용된 애플리케이션은 꾸준히 증가할 것이다. 수많은 딥러닝 알고리즘 및 모델들의 일부를 예시로 들자면 다음과 같다<ref name = "딥러닝 기반 자연어처리 기법의 최근 연구 동향"> 이기창, 〈[https://ratsgo.github.io/natural%20language%20processing/2017/08/16/deepNLP/ 딥러닝 기반 자연어처리 기법의 최근 연구 동향]〉, 《깃허브》, 2017-08-16</ref>
  
=== 분산 표상 ===
+
=== 분산표상 ===
언어 모델이 결합확률 함수를 학습해야 했기 때문에 초기에는 다소 어려움이 있었으나, 후에 저차원 벡터 공간의 단어 분산 표상을 학습하는 계기가 되었다. 분산 표상은 원-핫 벡터를 보완하기 위해 사용하는 방식이다. 원-핫 인코딩은 텍스트를 유의미한 벡터로 변환하는 방법으로, n개의 단어를 n 차원의 벡터로 표현한다.<ref> 이수경, 이주진, 임성빈, 〈[https://www.kakaobrain.com/blog/6 단어 간 유사도 파악 방법]〉, 《카카오브레인》, 2018-01-31</ref>
+
자연어를 처리하기 위해 통계 기반 자연어 처리 기법이 떠오르고 있다. 언어모델이 결합확률 함수를 학습해야했기 때문에 초기에는 다소 어려움이 있었으나, 후에 저차원 벡터 공간의 단어 분산표상을 학습하는 계기가 되었다.  
  
 
* ''' 단어 임베딩 '''  
 
* ''' 단어 임베딩 '''  
:컴퓨터에 '해시넷'과 '블록체인'을 보여주면 컴퓨터는 두 단어의 개념적인 차이를 이해할 수 없다. 단순히 유니코드의 집합으로만 판단할 것이다. 기계가 단어를 인지하기까지 단어는 기계가 이해하기 쉽도록 수치로 표현되어있어야 한다. 과거에는 이를 해결하기 위해서 단어가 100개가 담긴 사전이 있다면 그만큼 길이가 100인 벡터를 만들었다.  '해시넷'과 '블록체인'이라는 단어를 표현하고 싶다면 벡터의 단어가 해당하는 자리에 1을 넣어 번거로움이 있었다. 큰 불편함은 없었지만, 기계가 '해시넷'과 '블록체인'이 본질적으로 무슨 차이를 가지는지 이해할 수 없다는 단점이 존재했다. 이점을 극복하기 위해 고안된 것이 단어의 의미를 온전히 벡터화시키는 것이다. 단어 여러 개를 다룰 때도 더해서 평균 구하기, 단어의 유사도 측정, 벡터 연산을 통한 추론 등이 가능하다는 장점이 있다.<ref name = "word2vec 관련 이론 정리"> 김범수, 〈[https://shuuki4.wordpress.com/2016/01/27/word2vec-%EA%B4%80%EB%A0%A8-%EC%9D%B4%EB%A1%A0-%EC%A0%95%EB%A6%AC/ word2vec 관련 이론 정리]〉, 《개인 블로그》, 2016-01-17</ref>
+
: 컴퓨터에게 '해시넷'과 '블록체인'을 보여주면 컴퓨터는 두 단어의 개념적인 차이를 이해할 수 없다. 단순히 유니코드의 집합으로만 판단할 것이다. 기계가 단어를 인지하기까지 단어는 기계가 이해하기 쉽도록 수치로 표현되어있어야 한다. 과거에는 이를 해결하기 위해서 단어가 100개가 담긴 사전이 있다면 그만큼 길이가 100인 벡터를 만들었다.  '해시넷'과 '블록체인'이라는 단어를 표현하고 싶다면 벡터의 단어가 해당되는 자리에 1을 넣어번거로움이 있었다. 큰 불편함은 없었지만, 기계가 '해시넷'과 '블록체인'이 본질적으로 무슨 차이를 가지는지 이해할 수 없다는 단점이 존재했다. 이점을 극복하기 위해 고안된 것이 단어의 의미를 온전히 벡터화시키는 것이다. 단어 여러 개를 다룰 때도 더해서 평균을 더하고, 단어의 유사도 측정, 벡터 연산을 통한 추론이 가능하다는 장점이 있다.<ref name = "word2vec 관련 이론 정리"> 김범수, 〈[https://shuuki4.wordpress.com/2016/01/27/word2vec-%EA%B4%80%EB%A0%A8-%EC%9D%B4%EB%A1%A0-%EC%A0%95%EB%A6%AC/ word2vec 관련 이론 정리]〉, 《개인 블로그》, 2016-01-17</ref>
  
:비슷한 의미가 있는 단어는 비슷한 문맥을 가지는 경향이 있다고 가정할 때, 분산 표상으로 표현된 벡터 또는 단어 임베딩은 자신과 이웃한 단어의 특징을 찾는다. 이러한 분산 표상 벡터는 단어 간의 유사성을 내포하고 있어 벡터 간의 유사성을 측정할 수도 있다는 장점이 있다. 단어 임베딩은 벡터 차원의 빠른 계산이 가능하고 단어 간의 문맥 파악, 문맥 유사도를 잡아내는 데 효율적이며, 주로 딥러닝 모델의 첫 번째 처리 계층에 자주 사용된다. 전통적인 단어 빈도수 기반의 모델은 딥러닝 기반의 모델은 뉴럴네트워크의 깊이에 있다. 그동안 좋은 임베딩을 생성할 때 깊은 구조의 뉴럴 네트워크는 불필요했기 때문에, 그동안 임베딩 벡터를 생성하는 모델은 보통 얕고 간단한 뉴럴 네트워크였다. 하지만 딥러닝 기반 모델의 경우에는 임베딩 벡터를 활용하여 단어, 구, 문장을 표현하기 때문에 비교적 중요성이 높다.
+
:비슷한 의미를 가진 단어는 비슷한 문맥을 가지는 경향이 있다고 가정할 때, 분산표상으로 표현된 벡터 또는 단어 임베딩은 자신과 이웃한 단어의 특징을 잡아내려한다. 이러한 분산표상 벡터는 단어 간의 유사성을 내포하고 있어 벡터간의 유사성을 측정할 수도 있다는 장점이 있다. 단어 임베딩은 벡터 차원의 빠른 계산이 가능하고 단어 간의 문맥 파악, 문맥 유사도를 잡아내는 데 효율적이며, 주로 딥러닝 모델의 첫번째 처리 계층에 자주 사용된다. 전통적인 단어 빈도수 기반의 모델은 딥러닝 기반의 모델은 뉴럴네트워크의 깊이에 있다. 그동안 좋은 임베딩을 생성할 때 깊은 구조의 뉴럴 네트워크는 불필요했기 때문에, 그동안 임베딩 벡터를 생성하는 모델은 보통 얕고 간단한 뉴럴 네트워크였다. 하지만 딥러닝 기반 모델의 경우에는 임베딩 벡터를 활용하여 단어, 구, 문장을 표현하기 때문에 비교적 중요성이 높다.
  
:단어 임베딩에도 한계점이 있다. 첫 번째는 둘 이상의 단어를 개별 단어 벡터로 만들 수 없다. 이를 해결하기 위해서는 동시 등장 단어에 기반한 구문을 찾아 별도로 학습시키거나, 레이블이 없는 데이터에서 N-gram 임베딩을 직접 학습시켜야 한다. 두 번째는 임베딩이 사용된 애플리케이션에 크게 의존한다. 어떠한 사전 준비도 없이 임베딩을 학습시키면 시간과 자원을 많이 소비하게 되므로 주의해야 한다.<ref name = "딥러닝 기반 자연어처리 기법의 최근 연구 동향"></ref>
+
:단어 임베딩에도 한계점이 있다. 첫번째는 둘 이상의 단어를 개별 단어 벡터로 만들 수 없다. 이를 해결하기 위해서는 동시등장 단어에 기반한 구문을 찾아 별도로 학습시키거나, 레이블이 없는 데이터에서 N-gram 임베딩을 직접 학습시켜야 한다. 두번째는 임베딩이 사용된 애플리케이션에 크게 의존한다. 어떠한 사전 준비도 없이 임베딩을 학습시키면 시간과 자원을 많이 소비하게 되므로 주의해야한다.<ref name = "딥러닝 기반 자연어처리 기법의 최근 연구 동향"></ref>
  
* ''' 워드 투 벡터 '''(Word2Vec)  
+
* ''' 워드투벡터 '''(Word2Vec)  
:워드 투 벡터는 2013년 구글에서 발표된 연구로, 토머스(Tomas Mikolov)와 연구자들이 함께 고안했다. 워드 투 벡터를 구성하는 네트워크 모델은 CBOW와 Skip-gram 두 가지이다.
+
: 워드투벡터는 2013년 구글에서 발표된 연구로, 토머스(Tomas Mikolov)와 연구자들이 함께 고안했다. 워드투벡터를 구성하는 네트워크 모델은 CBOW와 Skip-gram 두 가지이다.
:CBOW 모델은 n개의 주변 단어를 줬을 때 중심 단어의 조건부 확률을 계산하는 모델이다. 문장 중간중간에 필요한 단어가 없더라도 주어진 단어의 앞뒤로 n/2개씩 총 n개의 단어를 인풋으로 사용하고, 단어를 맞추는 네트워크를 생성한다. CBOW 모델은 크게 인풋 레이어, 프로젝션 레이어, 아웃풋 레이어로 구성되어있다. 인풋에서는 단어를 원-핫 인코딩으로 넣고, 여러 개의 단어를 프로젝션시킨다. 그리고 벡터들의 평균을 구하여 프로젝션 레이어에 보내면, 연산하여 아웃풋 레이어로 전송된다.  
+
:CBOW 모델은 n개의 주변 단어가 주어졌을 때 중심 단어의 조건부 확률을 계산하는 모델이다. 문장 중간중간에 필요한 단어가 없더라도 주어진 단어의 앞 뒤로 n/2개 씩 총 n개의 단어를 인풋으로 사용하고, 단어를 맞추는 네트워크를 생성한다. CBOW 모델은 크게 인풋 레이어, 프로젝션 레이어, 아웃풋 레이어로 구성되어있다. 인풋에서는 단어를 원-핫 인코딩으로 넣고, 여러 개의 단어를 프로젝션시킨다. 그리고 벡터들의 평균을 구하여 프로젝션 레이어에 보내면, 연산하여 아웃풋 레이어로 전송된다.  
:Skip-gram 모델은 CBOW 모델과 달리, 중심 언어를 줬을 주변 단어를 예측하는 모델이다. Skip-gram 모델은 CBOW 모델보다 학습이 조금 느리지만, 실제로 실험을 진행해봤을 때는 Skip-gram이 CBOW에 비해 전체적으로 다소 좋은 결과를 냈다.<ref name = "word2vec 관련 이론 정리"></ref>
+
:Skip-gram 모델은 CBOW 모델과 달리, 중심 언어가 주어졌을 주변단어를 예측하는 모델이다. Skip-gram 모델은 CBOW 모델보다 학습이 조금 느리지만, 실제로 실험을 진행해봤을 때는 Skip-gram이 CBOW에 비해 전체적으로 다소 좋은 결과를 냈다.<ref name = "word2vec 관련 이론 정리"></ref>
  
* ''' 문자 임베딩 ''' : 단어 임베딩은 주어진 단어의 문법적인 정보와 의미적인 내용을 파악할 수 있다. 하지만 품사 태깅인 개체명 인식의 경우 단어의 형태 또한 중요하다.
+
* ''' 문자 임베딩 ''' :
:문자 수준의 자연어 처리 시스템은 다양한 해결방안과 논문이 작성되고 있다. 어떤 연구에서는 개체명 인식 문제에서 단어 임베딩과 문자 수준 임베딩을 함께 적용하여 포르투갈어와 스페인어 말뭉치에서 성과를 냈고, 다른 연구에서는 개채명인식에서 미리 학습된 레이블 임베딩을 학습하기 위해 다른 임베딩 기법들을 활용했다. 특정 언어에 딥러닝 기법을 적용하는 연구들은 단어 임베딩보다는 문자 임베딩을 택하는 경우가 많다. 그 이유는 단어는 문자가 결합하어 생성한 형태라서, 문자 임베딩은 사전에 없는 단어에 자연스럽게 대처할 수 있기 때문이다. 중국어와 같은 언어를 예로 들 수 있는데, 문장이 단어뿐만 아니라 문자로도 구성되는 특정 언어의 경우, 단어보다는 문자 수준 시스템의 구축이 필요하다.
 
  
 
=== 컨볼루션 신경망 ===
 
=== 컨볼루션 신경망 ===
워드 임베딩이 성능을 인정받고 인기를 끌 게 되자, n-gram에서 높은 수준의 피처를 추출하는 효율적인 함수의 필요성이 대두됐다. 그리고 컨볼루션 신경망은 입력한 문장에서 핵심적인 n-gram 피처를 추출할 수 있는 장점이 있었다. 이러한 추상화된 피처들의 경우, 자연어 처리에서 요약, 감성 분석, 기계번역, 질의응답 같은 문제들에 유용하게 사용될 수 있었기 때문에, 컨볼루션 신경망(CNN)의 인기가 상승했다. 문장 모델링 작업을 할 때 컨볼루션 모델링을 사용하는 일은 2008년 Collobert와 웨스턴의 연구부터 시작됐다. 이들은 다범주 예측 결과를 출력하는데 품사 태깅, 개체명인식, 의미역결정, 언어 모델과 같은 자연어 처리 문제를 해결하기 위해 다중작업 러닝을 적용했다. 참조 테이블은 각 단어를 사용자 정의 벡터로 변형하여 사용되는데, n개의 단어로 구성된 문장을 참조 테이블을 사용하여 n개의 벡터의 나열로 변환된다. Collobert는 기존에 넘쳐나던 자연어 처리 문제를 해결하는데 컨볼루션 신경망 기반 프레임워크를 제안하고, 많은 연구자가 사용하도록 촉발했다.
+
* '''기본구조''' :
  
문장의 <math>n</math>번째 단어의 임베딩 벡터를 <math>w_{i}</math>라고 하고 벡터의 차원 수가 <math>d</math>라고 가정한다. <math>n</math>개의 단어로 구성된 문장이 주어졌을 때, 문장은 <math>n</math>x<math>d</math> 크기의 임베딩 행렬로 표현된다. <math>w_{i}</math>,<math>w_{i+1}</math>,...,<math>w_{j}</math> 결합을 <math>w_{i:i+j}</math>라고 하면, 컨볼루션은 이 값에서 수행된다. 컨볼루션 필터 <math>k</math>는 차원 수가 <math>hd</math>인 벡터이다. 이 필터는 h개 단어 벡터에 적용된다. 예를 들면 컨볼루션 필터로 추출된 피처 <math>c_{i}</math>는 <math>w_{i:i+h-1}</math>를 활용하여 생성되어 다음과 같은 식이 만들어진다.
+
* '''애플리케이션''' :  
 
<math>c_{i}=f(w_{i:i+h-1}*k^T+b)</math>
 
 
 
b는 bias term을 의미하며, <math>f</math>는 비선형 활성 함수를 의미한다. 필터 <math>k</math>는 동일한 가중치를 사용한다. 컨볼루션 신경망의 커널은 보통 수백 개에 이르며, 폭은 각기 다르다.
 
 
 
<math>c_{i}=[c_{1},c_{2},...,c_{n-h+1}]</math>
 
 
 
개체명인식, 품사 태깅과 같은 다양한 자연어 처리 문제를 해결하기 위해서 단어 단위 예측이 다소 필요하며, 이를 위해 윈도우 접근법이 쓰이기도 한다. 단어의 범주가 이웃 단어에 의존할 것이라는 가정하에, 고정된 크기의 윈도우가 가정되고, 윈도우 내의 하위 문장들도 고려된다.<ref name = "딥러닝 기반 자연어처리 기법의 최근 연구 동향"></ref>
 
  
 
=== 순환 신경망 ===
 
=== 순환 신경망 ===
사용자가 '금강산도'을 입력한 뒤에는 '식후경'이라는 결과값이, '동해물과'을 입력한 뒤에는 '백두산이'라는 결과값이 나올 것이라고 대부분의 사람이 그렇게 예측한다. 순환신경망은 이러한 글이나 문장을 보고 앞뒤의 데이터 간의 연관성을 파악하여 완성시키는 알고리즘이다. 인공 신경망의 한 종류이며, 순차적인 정보를 처리하는 네트워크이다. 시간에 흐름에 따라 변화하는 데이터를 학습하기 위한 인공신경망으로, 과거에 출력했던 데이터를 기억해서 재귀적으로 참조한다.<ref name="인공지능의 이해 (5/6): 순환 신경망(RNN)"> 라인하트, 〈[https://brunch.co.kr/@linecard/324 인공지능의 이해 (5/6): 순환 신경망(RNN)]〉, 《브런치》, 2019-11-11</ref> 유닛 간의 연결이 순환적 구조인 것이 특징이며, 이러한 구조는 시변적 동적 특징을 모델링 할 수 있도록 신경망 내부에 상태를 저장할 수 있도록 해준다. 내부의 메모리를 사용하여 시퀀스 형태의 입력을 처리할 수 있기 때문에 필기체 인식, 음성 인식, 랭귀지 모델링, 기계번역, 이미지 캡셔닝과 같이 다소 변동이 있을 수 있는 데이터를 처리 할 수 있다는 장점이 있다. 전통적인 뉴럴 네트워크와는 달리 모든 입력값이 독립적이라고 가정하는 특징이 있으며, 순환 신경망(Recurrent Neural Networks)의 'recurrent'는 모델이 입력 시퀀스의 각 인스턴스에 같은 작업을 수행하며, 아웃풋은 이전 결과에 의존하기 때문에 생긴 명칭이다. 유닛에 토큰을 하나씩 입력하면 시퀀스를 표현하기 위해 일정한 크기의 벡터가 생성된다. 순환 신경망은 이 과정에서 기억한 연산 결과를 연산 과정에 활용한다.<ref>순환 신경망 위키백과 - https://ko.wikipedia.org/wiki/%EC%88%9C%ED%99%98_%EC%8B%A0%EA%B2%BD%EB%A7%9D</ref>
+
* '''필요성''' :  
  
* '''필요성''' : 순환 신경망은 데이터를 순차적으로 처리하는 성질을 지니기 때문에, 단어와 단어 사이에서 언어의 고유한 순차적 성격을 알아낼 수 있다. 또한, 매우 긴 문장이나 단락, 문서를 포함하여 다양한 길이의 글을 모델링할 수 있기때문에, 시퀀스 모델링에 적합하다. 컨볼루션 신경망과 달리 제한없이 글을 포착할 수 있는 유연성도 지니고 있으며, 처음부터 문맥 의존성을 모델링하기 위해 만들어졌다. 시간 분산 조인트 처리를 위한 네트워크를 지원하는 등 많은 장점을 가지고 있다. 컨볼루션 신경망과 비교되기도 하는데, 두 방식은 문장을 모델링하는 목적이 다르므로 어느쪽이 더 낫다고 단정할수는 없다. 컨볼루션 신경망은 n-gram을 추출하려고 하고, 순환 신경망은 경계가 없는 긴 문장을 생성하는 것이 목적이다. 둘 모두 n-gram의 피처를 잡는데는 효율적일지 몰라도, 단어 순서에 관한 민감도는 어느정도 제한되는 부분이 있다.<ref name = "딥러닝 기반 자연어처리 기법의 최근 연구 동향"></ref>
+
* '''네트워크 구조''' :
  
* '''구조''' : 자연어 처리에서 순환 신경망의 네트워크 구조는 다층 퍼셉트론이고, 주로 엘먼 네트워크(Elman network)에 기반을 두고 있다. 입력층, 은닉층, 출력층의 3단계 계층구조로 이루어진 네트워크이다. 은닉층은 이전 데이터를 참조하도록 각기 서로 연결되어 있는 형태이다. 즉, 입력값이 <math>x_{t}</math>일 때 출력값이 <math>h_{t}</math>라면, 출력과 동시에 이 사실이 다음 출력값인 <math>h_{t+1}</math>에 영향이 있다. 이전 데이터가 현재 데이터에 영향을 미치는 과정을 수식으로 표현하면 다음과 같다.
+
* '''애플리케이션''' :
  
<math>y_{t}=W_{hy}h_{t}</math>
+
* '''어텐션 매커니즘''' :
<math>h_{t}=tanh</math><math>(W_{hh}h_{t-1}+W_{xh}X_{t})</math>
 
 
 
<math>h_{t-1}</math>은 이전 상태값을 나타내고, 인공지능은 현재 상태값을 계산하기 위해 이전상태값을 매번 참조한다. 즉, <math>y_{t}</math>는 <math>h_{t}</math> 값에 가중치 <math>w_{hy}</math>를 곱한 결괏값이다. 학습 단계에서 이 가중치 <math>w_{hy}</math>는 특정 값에서는 확신이 높고, 다른 값에서는 확신이 낮게 설정되도록 조정해야만 한다. 이 과정에서 은닉층이 여러 층 반복되면 다소 문제가 발생할 수도 있는데, 이를 해결하기 위해서 장단기 메모리(LSTM)가 사용되기도 한다.<ref name="인공지능의 이해 (5/6): 순환 신경망(RNN)"></ref>
 
  
 
== 활용 ==
 
== 활용 ==
273번째 줄: 261번째 줄:
  
 
===사례===
 
===사례===
* '''Wordrep''' : [[카카오브레인]]은 2017년에 설립된 [[㈜카카오]]의 자회사이자 인공지능 연구소이다. Wordrep은 카카오브레인에서 2018년 진행했던 프로젝트이며, 유의미한 단어 간의 관계 데이터를 제공하자는 취지로 진행됐다. 국내에는 다양한 목적의 어휘 관계 사전이 개발되고 있으나, 이러한 대규모 사전을 편집하는데 투입되는 인력과 자금은 많지 않아 시간이 오래 걸린다는 문제가 발생하고 있다. 카카오브레인은 유의어와 반의어에 대해 알고 싶은 전 세계의 작가나 기자 등을 위해 다국어 서비스를 지원하겠다는 것이 목표였고, 단어 벡터 사전의 수집, 불필요한 자원 절약, 유사 단어 검색과 시각화 등의 단계를 거쳐 단어 간의 유사도를 표현해냈다. 자연어 문제를 해결할 때마다 단어 임베딩을 수행하는 것은 매우 비효율적이다. 카카오브레인은 페이스북이 페스트테스트(FastText) 임베딩 기법을 이용하여 생성한 벡터 사전을 이용하여 이를 해결했다.<ref name="인공지능의 이해 (5/6): 순환 신경망(RNN)"></ref>
 
 
 
* ''' 자연어 API ''' : 2017년 11월 27일, 구글 클라우드 플랫폼(GCP)에서 자연어 API를 배포했다.<ref name="구글 클라우드 홈페이지 자연어"> 구글 클라우드 홈페이지 자연어 - https://cloud.google.com/natural-language/</ref> 자연어 API는 영어뿐만 아니라 한국어, 중국어, 일본어, 이탈리어어, 독일어, 스페인어 등 다양한 언어의 분석이 가능하고, 일부 기술은 영어에만 적용이 된다. 구글 자연어 API에서는 감성 분석, 엔티티 분석, 구문 분석, 엔티티 감성 분석, 내용 분류 다섯 가지 메소드를 제공했는데, 엔티티 감성 분석과 내용 분류는 영어에만 기능이 적용된다. 감성 분석의 경우, 감성을 정향화한 스코어와, 스코어의 정도를 나타내는 수치로 나누어 점수를 매긴다. 감성을 정향화한 스코어는 -1에 가까우면 부정, +1에 가까우면 긍정의 의미를 갖게 되고, 스코어의 정도를 나타내는 수치는 0에서 무한대의 값을 가진다. 만약 긍정적인 문장 세 줄과 부정적인 문장 두 줄을 입력할 시, 시스템은 스코어와 수치를 계산하여 긍정적인 문서라고 판단한다. 엔티티 분석은 문장에서 고유 명사나 식당, 유명인 단어를 분석한다. 구문 분석은 문장을 토큰 단위로 분리하여 분석한다. 의존성, 품사, 기본형 등 분석 결과를 제공한다.<ref name="구글의 자연어 처리 기술"> 이영민, 〈[https://brunch.co.kr/@mapthecity/25 구글의 자연어 처리 기술]〉, 《브런치》, 2017-11-27</ref>  
 
* ''' 자연어 API ''' : 2017년 11월 27일, 구글 클라우드 플랫폼(GCP)에서 자연어 API를 배포했다.<ref name="구글 클라우드 홈페이지 자연어"> 구글 클라우드 홈페이지 자연어 - https://cloud.google.com/natural-language/</ref> 자연어 API는 영어뿐만 아니라 한국어, 중국어, 일본어, 이탈리어어, 독일어, 스페인어 등 다양한 언어의 분석이 가능하고, 일부 기술은 영어에만 적용이 된다. 구글 자연어 API에서는 감성 분석, 엔티티 분석, 구문 분석, 엔티티 감성 분석, 내용 분류 다섯 가지 메소드를 제공했는데, 엔티티 감성 분석과 내용 분류는 영어에만 기능이 적용된다. 감성 분석의 경우, 감성을 정향화한 스코어와, 스코어의 정도를 나타내는 수치로 나누어 점수를 매긴다. 감성을 정향화한 스코어는 -1에 가까우면 부정, +1에 가까우면 긍정의 의미를 갖게 되고, 스코어의 정도를 나타내는 수치는 0에서 무한대의 값을 가진다. 만약 긍정적인 문장 세 줄과 부정적인 문장 두 줄을 입력할 시, 시스템은 스코어와 수치를 계산하여 긍정적인 문서라고 판단한다. 엔티티 분석은 문장에서 고유 명사나 식당, 유명인 단어를 분석한다. 구문 분석은 문장을 토큰 단위로 분리하여 분석한다. 의존성, 품사, 기본형 등 분석 결과를 제공한다.<ref name="구글의 자연어 처리 기술"> 이영민, 〈[https://brunch.co.kr/@mapthecity/25 구글의 자연어 처리 기술]〉, 《브런치》, 2017-11-27</ref>  
  
293번째 줄: 279번째 줄:
 
== 참고자료 ==
 
== 참고자료 ==
 
* 자연어 처리 위키백과 - https://ko.wikipedia.org/wiki/%EC%9E%90%EC%97%B0%EC%96%B4_%EC%B2%98%EB%A6%AC
 
* 자연어 처리 위키백과 - https://ko.wikipedia.org/wiki/%EC%9E%90%EC%97%B0%EC%96%B4_%EC%B2%98%EB%A6%AC
* 순환 신경망 위키백과 - https://ko.wikipedia.org/wiki/%EC%88%9C%ED%99%98_%EC%8B%A0%EA%B2%BD%EB%A7%9D
 
 
* 자연 언어 처리 나무위키 - https://namu.wiki/w/%EC%9E%90%EC%97%B0%20%EC%96%B8%EC%96%B4%20%EC%B2%98%EB%A6%AC#s-4.1
 
* 자연 언어 처리 나무위키 - https://namu.wiki/w/%EC%9E%90%EC%97%B0%20%EC%96%B8%EC%96%B4%20%EC%B2%98%EB%A6%AC#s-4.1
 
* 네이버 지식백과 자연어 처리1 - https://terms.naver.com/entry.nhn?docId=5917571&cid=66682&categoryId=66682
 
* 네이버 지식백과 자연어 처리1 - https://terms.naver.com/entry.nhn?docId=5917571&cid=66682&categoryId=66682
315번째 줄: 300번째 줄:
  
 
== 같이 보기 ==
 
== 같이 보기 ==
* [[자연어]]
 
 
* [[인공지능]]
 
* [[인공지능]]
 
* [[딥러닝]]
 
* [[딥러닝]]
  
 
{{인공지능 기술|검토 필요}}
 
{{인공지능 기술|검토 필요}}

해시넷에서의 모든 기여는 다른 기여자가 편집, 수정, 삭제할 수 있다는 점을 유의해 주세요. 만약 여기에 동의하지 않는다면, 문서를 저장하지 말아 주세요.
또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다 (자세한 사항은 해시넷:저작권 문서를 보세요). 저작권이 있는 내용을 허가 없이 저장하지 마세요!

취소 | 편집 도움말 (새 창에서 열림)