-23일차- Text Summarization
23년 이전 글/모두의연구소 아이펠

-23일차- Text Summarization

긴 문서를 읽는 것은 꽤나 큰 인내심이 필요합니다

그래서 사람들이 긴글을 볼때면 누군가 해둔 3줄 요약을 읽고 싶어하곤 합니다

특히 뉴스 같은 경우는 새로운 소식은 많고, 접할 시간은 짧아서 특히 요약이 있으면 읽기가 편합니다

딥러닝을 통해서 이러한 요약을 해낼 수 있습니다

글 요약

글요약은 다시 두개로 나눌 수 있습니다

추출 요약Extractive Summarization

요약하고자 하는 원문에서 주요 문장을 추출해서 요약하는 방법입니다

예를들어 10개의 문장이 있으면 핵심 문장 3개의 문장으로 요약문을 만드는데, 이 문장들이 중요한 문장이겠지만

중요 문장간의 연결이 자연스럽지는 않을 수 있습니다

주로 전통적인 머신러닝 방식에 속하는 TextRank 같은 알고리즘이 이런 방법을 사용합니다

이러한 방식은 이미 네이버 뉴스를 통해서 사용할 수 있습니다

 

추상 요약Abstractive Summarization

요약하려는 원문을 읽고 요약이 된 새로운 문장을 생성해내는 방법입니다

생성해내기 때문에 기존의 없던 문장도 만들어낼 수 있습니다 이는 자연어 처리 분야중 하나인 자연어 생성

NLG(Natural Language Generation) 영역 입니다

딥러닝 영역에서 이런 요약을 사용합니다

구글에서는 이러한 기능을 이용해서 뉴스를 읽고 제목을 자동으로 뽑는 시도도 했었는데요

 

 

Text summarization with TensorFlow

Posted by Peter Liu and Xin Pan, Software Engineers, Google Brain Team Every day, people rely on a wide variety of sources to stay informed ...

ai.googleblog.com

원문에서 발췌하는 방식(Extrative Summarization)의 요약 기법은 어색하거나 문법적으로 이상한 결과물을 만드는 문제가 있었습니다

따라서 이러한 문제를 보완하기 위해 seq2seq 아키텍처를 만들기에 이르렀습니다

 

seq2seq

https://medium.com/dl-for-product-and-service/abstractive-text-summary-with-reinforcement-learning-ab2458ab29d5

1. RNN인코더로 입력하면 하나의 고정 벡터(문맥의 정보를 가진 벡터로 context vector라고도 함)로 변환

2. RNN디코더가 컨텍스트 벡터를 전달받아 한 단어씩 생성해서 요약 문장을 완성합니다

 

LSTM과 컨텍스트 벡터

[RNN과 LSTM] http://colah.github.io/posts/2015-08-Understanding-LSTMs

LSTM이 기존 RNN과 다른점은 time step 셀에 hidden state뿐만 아니라 cell state도 함께 전달한다는 것

즉 인코더가 디코더에 전달하는 컨텍스트 벡터 또한 hidden state의 h, cell state의 c 두개의 값이 존재해야 합니다

 

시작, 종료 토큰

[시작 토큰 SOS와 종료 토큰 EOS는 각각 start of a sequence와 end of a sequence를 나타낸다] https://arxiv.org/pdf/1812.02303.pdf

디코더가 시작 토큰 SOS가 입력되면 각 시점마다 단어를 생성하고 종료 토큰 EOS를 예측하는 순간까지 계속합니다

예측대상 시퀸스 앞, 뒤에 시작 토큰과 종료 토큰을 넣어주는 전처리를 통해 멈출 곳을 정하는 절차가 필요합니다

 

 

어텐션 메커니즘을 통한 새로운 컨텍스트 벡터 사용하기

기존의 seq2seq 인코더는 마지막 time step의 hidden state를 컨텍스트 벡터로 사용했었습니다

하지만 RNN 계열의 인공 신경망(RNN,LSTM,GRU)의 한계로 인해 컨텍스트 정보에 많은 정보가 손실된 상태가 됩니다

 

어텐션 메커니즘은 이와 달리 인코더의 모든 step의 hidden state의 정보를 컨텍스트 벡터에 반영합니다

단 동일한 비중이 아닌 각 step이 얼마나 영향을 미치는지에 따른 가중합의 방식으로 진행됩니다

[기존의 컨텍스트 벡터보다 인코더의 정보를 적극적으로 활용하여 성능을 끌어올리는 어텐션 메커니즘] https://arxiv.org/pdf/1812.02303.pdf

위 그림에서 seq2seq 모델이라면 디코더에 전달되는 인코더의 컨텍스트 벡터는 인코더의 마지막 스텝인 hidden state h5가 되겠지만 어텐션 메커니즘이 적용된 Attentional seq2seq이라면 인코더의 컨텍스트 벡터는 0.2h1 + 0.3h2 + 0.1h3 + 0.15h4 + 0.25h5가 될 수 있습니다

주의할점으로 컨텍스트 벡터 구성에 인코더 hidden state 가중치 값은 디코더 현재 스텝이 어디냐에 따라 달라집니다

디코더의 문장 생성 부위가 주어, 술어, 목적어인지 등에 따라 컨텍스트 벡터는 다른 값이 된다는 것이 기존 seq2seq과 다른 주요한 차이가 되겠습니다

 

문서 요약 예제

 

 

GitHub - dlfrnaos19/rock_scissors_paper_classifier: task 1

task 1. Contribute to dlfrnaos19/rock_scissors_paper_classifier development by creating an account on GitHub.

github.com

 

 

 

 

반응형