Skip to content

boostcampaitech4lv23nlp1/final-project-level3-nlp-07

Repository files navigation

You Only Use a Minute

카카오톡 오픈 채팅방의 대화 내용을 요약해주는 서비스  

최종 발표 PDF & YOUTUBE

개요

YOUM은 카카오톡 오픈 채팅방의 대화 내용을 요약해주는 서비스입니다. 현재 카카오톡 오픈 채팅방은 월간 900만 ~ 1000만 명이 사용할 정도로 수요가 많은 서비스이며 그 수요는 꾸준히 증가하고 있습니다. 하지만 대화 참여자가 많아짐에 따라 대화의 흐름을 파악하기 어렵게 되고 원하는 주제가 아닌 대화가 오고 가게 되어 그에 대한 관심과 참여가 떨어지는 문제가 발생하고 있습니다.

YOUM은 오픈 채팅방 대화 요약으로 비가독성 문제를 해결하고자 합니다. YOUM을 통해 유저의 불편을 해소하고 유저 편의성을 증대하여 서비스의 실질 수요를 높일 수 있을 것이라 기대하고 있습니다.

Architecture

 

Members

김한성 염성현 이재욱 최동민 홍인희
Github Github Github Github Github
Project Design
DTS modeling
FrontEnd
Deployment
Dataset Search
FrontEnd
BackEnd
TroubleShooting
Data post-processing
Data Guideline
Summarization
DB build
Dataset Search
Data pre-processing
DTS
BackEnd
Project Manager
Data Guideline
Summarization
FrontEnd

Demo

 

Train Data

 

Model

Dialogue Topic Segmentation

  • 개요
    • 여러 대화를 주제적인 일관성을 가지는 segment로 나누는 방법
  • 모델 구조
    • klue/roberta-large
    • 추가로 Coherence Scoring model이라는 이름의 MLP Head
  • Train Dataset
    • 임의의 Dialogue로 부터 dialogue flow를 활용해 positive, negative utterance pair 생성
  • finetuning
    • 생성된 positive pair, negative pair를 활용해 Marginal ranking loss로 모델 학습.

 

Summarization

  • 개요
    • 대화문을 토대로 내용을 파악하여 관련된 요약문을 생성
  • 모델 구조
    • yeombora/kobart_r3f
    • yeombora/Kobart_SimCLS

 

How to Run

Poetry dependency

$ poetry shell
$ poetry install

Dialogue Topic Segmentation model download

$ git clone https://github.com/dataKim1201/dialouge_Topic_Segmentation

bentoml packing

  • app 폴더에 들어가서 실행하기
  • DTS model path 변경 필요
$ python bentoml_packing.py

server run

$ bentoml serve SummaryService:latest
  • 다른 터미널에서 실행 (default port == 30001)
$ python backend_hub.py

streamlit run

$ streamlit run app.py --server.port 30002

 

프로젝트 구조

├─ DTS
│  ├─ __init__.py
│  ├─ config
│  │  └─ config.yaml
│  ├─ ...
│  └─ main.py
│
├─ app
│  ├─ app.py
│  ├─ backend_hub.py
│  ├─ bentoml_packing.py
│  ├─ load_dataset.py
│  ├─ model.py
│  ├─ paper-dashboard-master
│  │  ├─ assets
│  │  │  ├─ js
│  │  │  │  ├─ core
│  │  │  │  │  ├─ bootstrap.min.js
│  │  │  │  │  ├─ jquery.min.js
│  │  │  │  │  └─ popper.min.js
│  │  │  │  ├─ ...
│  │  │  │  ├─ get_keyword.js
│  │  │  │  ├─ get_timeline.js
│  │  │  │  ├─ dashboard_input.js
│  │  │  │  └─ paper-dashboard.js
│  │  │  └─ scss
│  │  ├─ examples
│  ├─ prediction.py
│  ├─ requirements.txt
│  └─ validation.py
├─ deploy_ssh.sh
├─ notebooks
│  ├─ ...
│  ├─ extract_dialogue.ipynb
│  └─ predict_test_DTS.ipynb
├─ summarization
│  ├─ ...
│  └─ train.py
└─ utils
│   ├─ __init__.py
│   ├─ ...
│   └─ stopword.txt
├─ README.md
├─ poetry.lock
├─ py_template
├─ pyproject.toml
│
└── thanks for comming I'm Yeombora

reference

  • TextTiling: segmenting text into multi-paragraph subtopic passages
  • Unsupervised Topic Segmentation of Meetings with BERT Embeddings
  • Improving Unsupervised Dialogue Topic Segmentation with Utterance-Pair Coherence Scoring (Xing et al, 2021)
  • BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension
  • SimCLS: A Simple Framework for Contrastive Learning of Abstractive Summarization
  • https://github.com/Hanul/BadWordFilter