### 기술 설명 문서요약(text summarization)은 자연어처리(natural language processings) 분야에서 중요하고 흥미로운 과제 중 한가지입니다. 그런데도 불구하고 한국어 문서요약을 하는 오픈소스 프로젝트를 쉽게 찾지 못해 여기서 간단하게 시도해봤습니다. 기본 개념은 문서에서 가장 중요한 N개의 문장을 선택해서 개요를 생성하는 추출적 요약(extractive summarization)인데요, 여기서 문장을 선택하는 기준에 따라 다양한 기법이 있죠. 흔히 사용하는 TextRank 알고리즘은 문장 사이의 상호관계를 통해 그중 가장 핵심적인 문장을 찾는 graph-based 기법입니다. 이 프로젝트는 문장임베딩(sentence embedding)을 통해 문장의 의미를 벡터로 나타내고, 클러스터링(clustering)으로 비슷한 의미를 가지고 있는 문장을 서로 모아, 클러스터마다 1개의 핵심 문장을 선택하여 개요를 만드는 기법을 사용합니다. 문장임베딩을 찾는데서 [Sentence-BERT](https://www.sbert.net/)라는 모델로 시도했었지만 기존 모델은 BERT 기반 다중언어 모델을 사용함으로 한국어 문서요약 테스크에 적합하지 않았습니다. 그래서 한국어 임베딩에 트레이닝이된 [KoBERT](https://github.com/SKTBrain/KoBERT)를 뒷받침으로 Sentence-BERT 모델을 사용하게 되었습니다. 문장임베딩을 구하고 개요를 생성하는 과정에서 파이썬 [Summarizer](https://github.com/dmmiller612/bert-extractive-summarizer) 패키지를 사용하고 문장경계식별(sentence boundary detection) 등 전처리 및 후처리를 위해 [Spacy](https://spacy.io/) 라이버리를 활용했습니다. 네이버 뉴스 기사 링크를 입력하는 경우 [BeautifulSoup](https://beautiful-soup-4.readthedocs.io/en/latest/)로 먼저 해당 페이지에서 기사본문을 추출한 후 개요를 생성합니다. 프로젝트에 앞으로 개선해야 할 점이 아직 많습니다. 만족스러운 한글 문서 요약 데이터셋이 없어 fine-tuning 학습이 불가능했고 종종 글에 가장 핵심적인 문장이 개요에서 누락되는 경우가 있고 앞뒤 문맥이 없어서 이해하기 어려운 문장이 포함되는 경우가 있습니다. 언어모델의 크기가 상당해서 CPU 성능도 만족스럽지 않아 더 작은 모델로 실험해보는 것도 좋을것 같습니다. 또한 사용하기 더욱 편리하게 네이버뉴스 뿐만이 아니라 다른 사이트에서도 별도의 web scraping 코드 없이 문서 본문을 지능적으로 추출하는 것도 흥미로운 과제가 될것 같습니다.