챗봇 및 기계번역에 특화된 문장 학습 모델, 시퀀스 투 시퀀스(Seq2Seq)

    시퀀스투시퀀스(Sequence to Sequence)는 RNN(Recurrent Neural Network, 순환신경망)을 사용하여 문장을 학습하는 기법입니다. 인공 신경망의 발전으로 인해 발화들의 서열(Sequence)로 이루어진 대화의 말뭉치(Corpus)를 학습하는 것으로도 선행 발화가 후행발화로 변환되는 확률을 계산하여 대화를 생성해 내는 것이 가능해 졌습니다.


    기존의 챗봇같은 경우는 문장과 유사성을 LSA(Latent Sementic Analysis), cosine 유사도, Term 기반으로 가장 유사한 문장의 정확도를 채택하여, 해당 문장에 연결된 대화셋을 보여주는 것에서 끝났다면, 시퀀스 투 시퀀스는 새로운 응답을 생성할 수 있는 능력이 있습니다. 한마디로 지능적인 창의적이고 지능적인 대화가 가능해지는 것이죠.



    Seq2Seq를 예로 들면 아래와 같은 대화가 있다고 가정해 보겠습니다.


    이야~ 대박, 끝났네~

    망했다, 끝났네~


    둘다 끝났네라는 말이 들어갔지만, "이야~ 대박"과 "망했다"에서 주는 뉘앙스가 전혀 다릅니다. 전자는 긍정적인 감탄사로 상황을 직시하는 것이고, 후자는 자신의 처지를 비관하여 나오는 말이 됩니다. 즉 뒤에 나오는 단어의 의미가 바로 전의 단어에 따라서 의미가 바뀌는 것인데 단순한 학습으로는 캐치를 하기 힘듭니다. 물론 위 2단어를 모두 학습되어 있는 문장이 있다면 당연히 대응을 하겠지만 말이죠.




    시퀀스 투 시퀀스는 기계번역(Neural Machine Translation) 연구를 통해서 나온 기술입니다. 당연하게도 현재 번역기술에 쓰이는 기술입니다. 번역이라는 것이 어떤 문장을 다른 나라의 언어로 변환해주는 기술인데 이를 살짝 틀어서, 다른 나라의 언어가 아니라 응답으로 변환해주는 방식으로 챗봇에 응용하게 됩니다.






    위와같은 RNN 기법인 LSTM(Long Short-Term Memory)으로 대화들을 연결하여, 새로운 응답을 생성해 냅니다. 해당 기법은 텐서플로우(Tensorflow)라는 오픈소스 라이브러리에 잘 구현이 되어 있고, 어렵지 않게 설명이 되어 있어서 아래 경로에서 소스까지 확인하면 편할 것 같네요




    댓글

    Designed by JB FACTORY