"미네르바"의 두 판 사이의 차이
(→설계 사양) |
(→상세설계 내용) |
||
(같은 사용자의 중간 판 47개는 보이지 않습니다) | |||
112번째 줄: | 112번째 줄: | ||
- 웹 컨텐츠의 경우, 단순한 데이터의 축적에 불과하다면 특허출원이 곤란하지만, 웹 컨텐츠를 운영하는 방식이나 알고리즘의 특이성이 인정된다면 그 부분에 대해서는 출원이 가능하다. | - 웹 컨텐츠의 경우, 단순한 데이터의 축적에 불과하다면 특허출원이 곤란하지만, 웹 컨텐츠를 운영하는 방식이나 알고리즘의 특이성이 인정된다면 그 부분에 대해서는 출원이 가능하다. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
<br> | <br> | ||
<br> | <br> | ||
286번째 줄: | 279번째 줄: | ||
===기술개발 일정 및 추진체계=== | ===기술개발 일정 및 추진체계=== | ||
====개발 일정==== | ====개발 일정==== | ||
− | + | ||
+ | [[파일:미네르바 개발일정.JPG|600픽셀]] | ||
<br> | <br> | ||
<br> | <br> | ||
292번째 줄: | 286번째 줄: | ||
====구성원 및 추진체계==== | ====구성원 및 추진체계==== | ||
− | [[파일: | + | [[파일:미네르바 역할분담.JPG|600픽셀]] |
<br> | <br> | ||
<br> | <br> | ||
300번째 줄: | 294번째 줄: | ||
====제품의 요구사항==== | ====제품의 요구사항==== | ||
− | [[파일: | + | [[파일:미네르바 요구사항.JPG|700픽셀]] |
<br> | <br> | ||
<br> | <br> | ||
331번째 줄: | 325번째 줄: | ||
===개념설계안=== | ===개념설계안=== | ||
− | |||
− | + | [[파일:미네르바 시스템구조.JPG|700픽셀]] | |
− | + | ||
+ | 1. 웹 클라이언트가 Django에서 제공하는 웹 서버(Django WSGI)에 HTTP 프로토콜로 요청하게 된다. | ||
+ | |||
+ | 2. CSS, JS, Img파일 등은 ‘static’ 폴더에 따로 관리되어 html이나 Python 코드와 달리 Django를 거치지 않고서도 서버가 바로 처리할 수 있다. | ||
+ | |||
+ | 3. 동적인 부분은 웹 서버가 처리 불가능하기 때문에 HTTP 프로토콜 요청을 Python 요청으로 변환하여 Django에 전달한다. | ||
+ | |||
+ | 4. Django는 사용자가 Python으로 작성한 어플리케이션 코드를 실행하거나 DB에서 데이터를 불러온다. | ||
+ | |||
+ | <br> | ||
+ | <br> | ||
===상세설계 내용=== | ===상세설계 내용=== | ||
− | + | ||
+ | '''1. 모델 학습 및 적용''' | ||
+ | |||
+ | '''1.1 KoGPT2 사용''' | ||
+ | |||
+ | - SKT-AI가 Git Open source로 공개한 KoGPT2 모델 사용 (https://github.com/SKT-AI/KoGPT2) | ||
+ | |||
+ | - 2500만 뉴스 데이터로 Pre-Training 상태이기 때문에 "..한다", "..하다" 형태의 기사 문체 및 맥락 없는 문장 생성하는 문제점 발생 | ||
+ | |||
+ | - Fine-Tuning 필요 (이미 학습된 모델 Weights를 목적에 맞게 변형하는 2차 학습 과정) | ||
+ | <br> | ||
+ | <br> | ||
+ | |||
+ | '''1.2 Fine-Tuning''' | ||
+ | |||
+ | - PyTorch 사용 | ||
+ | |||
+ | - Google 'Colab' GPU 환경에서 진행 | ||
+ | |||
+ | - Object Function: Cross Entropy Loss | ||
+ | |||
+ | - Optimizer: Adam | ||
+ | <br> | ||
+ | <br> | ||
+ | |||
+ | |||
+ | '''1) 학습 데이터 준비''' | ||
+ | |||
+ | - 인터넷에서 무료로 제공하는 김동인 작가의 단편 소설을 사용 | ||
+ | |||
+ | |||
+ | '''2) 파일 경로 설정''' | ||
+ | |||
+ | [[파일:미네르바 상세1.JPG]] | ||
+ | |||
+ | - cache_dir : SK에서 제공하는 모델 경로 | ||
+ | |||
+ | - save_path : 학습을 마친 후 결과물인 tar파일을 저장할 경로 | ||
+ | |||
+ | - data_file_path : 학습할 데이터 경로 (다운 받은 소설이나 기타 등등) | ||
+ | |||
+ | |||
+ | '''3) 변수 설정''' | ||
+ | |||
+ | [[파일:미네르바 상세2.JPG]] | ||
+ | |||
+ | - SK에서 제공하는 모델로 model과 vocab 변수를 설정한다. | ||
+ | |||
+ | - 이 부분은 Fine-Tuning을 진행하지 않고 문장만 생성하려 할 때도 필요한 부분이다. | ||
+ | |||
+ | - epoch, learning_rate, batch_size를 설정한다.(바꿔보면서 할 수 있음) | ||
+ | |||
+ | |||
+ | '''4) 학습 진행''' | ||
+ | |||
+ | [[파일:미네르바 상세3.JPG]] | ||
+ | |||
+ | 1. 소설 파일 등에 공백인 줄이 있는 경우엔 학습이 진행되지 않아 설정 | ||
+ | |||
+ | 2. Count가 10의 배수가 될 때마다 현재 진행 중인 epoch, train no, loss를 출력 | ||
+ | |||
+ | 3. Count가 100의 배수가 되거나 일정 조건에서 학습한 내용을 저장 | ||
+ | |||
+ | 4. 짧은 문장들이 많은 경우(노래 가사) 또는 학습할 데이터의 크기가 너무 큰 경우 RuntimeError 발생 | ||
+ | |||
+ | GPU가 아닌 CPU로 진행 할 경우 문제 해결이 가능하나 그러기엔 학습 속도가 너무 느림 | ||
+ | |||
+ | 짧은 문장들을 합쳐 긴 문장들로 바꾼 후 학습을 진행했을 때 loss가 잘 줄어드는 것을 확인 후 문제 해결 | ||
+ | <br> | ||
+ | <br> | ||
+ | |||
+ | [[파일:미네르바 상세4.JPG]] | ||
+ | <br> | ||
+ | <br> | ||
+ | <br> | ||
+ | |||
+ | '''1.3 Multi-Model 구축''' | ||
+ | |||
+ | [[파일:미네르바 상세5.JPG]] | ||
+ | |||
+ | 1) Fine-Tuning 완료시 약 1~2GB의 tar 파일 생성 | ||
+ | |||
+ | 2) 해당 모델의 경로를 변수를 통해 설정하면 정상적으로 적용 가능 | ||
+ | <br> | ||
+ | <br> | ||
+ | |||
+ | |||
+ | '''2. 이미지 크롤링''' | ||
+ | |||
+ | '''목적''' | ||
+ | |||
+ | - 제목 값을 입력으로 받아 Selenium을 통해 구글 이미지 크롤링 시스템을 구현한다. | ||
+ | |||
+ | |||
+ | '''요구사항 및 구현''' | ||
+ | |||
+ | - txt 값을 입력으로 받을 수 있게 한다. | ||
+ | |||
+ | - 이미지 URL을 이용하여 사진을 받을 수 있게 한다. | ||
+ | |||
+ | - 이미지를 긁어와 개별적인 폴더를 구성할 수 있게 한다. | ||
+ | |||
+ | - 이미 존재하는 폴더가 있는 경우 선택적으로 재검색을 수행할 수 있게 한다. | ||
+ | |||
+ | |||
+ | '''주요 함수''' | ||
+ | |||
+ | class CollectLinks | ||
+ | |||
+ | - def get_scroll(self) : 자동 스크롤 기능 | ||
+ | |||
+ | - def wait_and_click(self, xpath) : 오류 발생 시 2초 간 sleep | ||
+ | |||
+ | - def highlight(self, element) : google_full에서 이미지가 체크된 곳에 하이라이트 표시 | ||
+ | |||
+ | - def remove_duplicates(_list) : 중복 제거 | ||
+ | |||
+ | - def google(self, keyword, add_url=””) : 썸네일 가져오기 | ||
+ | |||
+ | - def google_full(self, keyword, add_rurl) : 원본 사진 가져오기 | ||
+ | |||
+ | |||
+ | '''실행 결과''' | ||
+ | |||
+ | [[파일:미네르바 상세6.JPG]] | ||
+ | |||
+ | |||
+ | [[파일:미네르바 상세7.JPG]] | ||
+ | |||
+ | - 키워드를 입력 받으면 OS를 탐지하고, 구글에서 이미지를 검색한다. | ||
+ | |||
+ | - 스크롤은 4페이지 이내만 수행하고, 최대 10장의 사진만 저장하도록 동작한다. | ||
+ | |||
+ | - robotx.txt에서 크롤링을 허가하지 않은 홈페이지에 게재된 파일의 경우 스크롤을 진행하지 않는다. | ||
+ | |||
+ | - 열 장의 사진에서 URL을 입력 받아 원본 사진을 크롤링 한다. | ||
==결과 및 평가== | ==결과 및 평가== | ||
===완료 작품의 소개=== | ===완료 작품의 소개=== | ||
+ | |||
====프로토타입 사진 혹은 작동 장면==== | ====프로토타입 사진 혹은 작동 장면==== | ||
− | + | <br> | |
+ | |||
+ | '''1. 메인 페이지''' | ||
+ | |||
+ | [[파일:미네르바 메인페이지.JPG|800픽셀]] | ||
+ | |||
+ | * '''헤드라인 뉴스''' | ||
+ | ** 전체 뉴스 최신순 | ||
+ | |||
+ | * '''카테고리별 뉴스''' | ||
+ | ** 카테고리별 최신순 | ||
+ | |||
+ | * '''투데이 랭킹''' | ||
+ | ** 스크랩 기반 순위 | ||
+ | ** 우측 사이드바 위치 | ||
+ | <br> | ||
+ | <br> | ||
+ | |||
+ | '''2. 글쓰기 페이지''' | ||
+ | |||
+ | [[파일:미네르바 글쓰기상단.JPG|800픽셀]] | ||
+ | |||
+ | [[파일:미네르바 글쓰기하단.JPG|800픽셀]] | ||
+ | |||
+ | * '''글 스타일 (핵심 1)''' | ||
+ | ** 다양한 스타일의 멀티모델 사용 가능 | ||
+ | |||
+ | * '''실시간 단어 추천 (핵심 2)''' | ||
+ | ** 더 나은 제목을 위한 단어 추천 | ||
+ | |||
+ | * '''기사 자동 완성 (핵심 3)''' | ||
+ | ** 첫 문장과 연결되는 문장 완성 | ||
+ | |||
+ | * '''이미지 추천 (핵심 4)''' | ||
+ | ** 구글 이미지 크롤링을 통해 제공 | ||
+ | <br> | ||
+ | <br> | ||
+ | |||
+ | '''3. 카테고리별 페이지''' | ||
+ | |||
+ | [[파일:미네르바 카테고리별.JPG|800픽셀]] | ||
+ | |||
+ | * '''핫이슈''' | ||
+ | ** 카테고리 최다 스크랩 기사 | ||
+ | |||
+ | * '''뉴스 리스트''' | ||
+ | ** 10개 단위 페이지네이션 | ||
+ | <br> | ||
+ | <br> | ||
+ | |||
+ | '''4. 스크랩 페이지''' | ||
+ | |||
+ | [[파일:미네르바 스크랩페이지.JPG|800픽셀]] | ||
+ | |||
+ | * '''스크랩 글 조회''' | ||
+ | |||
+ | * '''스크랩 삭제''' | ||
+ | ** 체크박스 통한 복수 삭제 가능 | ||
+ | |||
+ | <br> | ||
+ | <br> | ||
+ | |||
+ | '''5. 뉴스 상세 페이지''' | ||
+ | |||
+ | [[파일:미네르바 뉴스상세.JPG|800픽셀]] | ||
+ | |||
+ | * '''요약 봇 (핵심 5)''' | ||
+ | ** Text-Rank 통한 기사 3줄 요약 | ||
+ | |||
+ | * '''스크랩''' | ||
+ | ** 스크랩 페이지에 추가 | ||
+ | |||
+ | * '''댓글''' | ||
+ | ** Disqus API 사용 | ||
+ | <br> | ||
+ | <br> | ||
+ | |||
====포스터==== | ====포스터==== | ||
− | |||
− | + | [[파일:미네르바 포스트.JPG|600픽셀]] | |
− | + | <br> | |
+ | <br> | ||
===완료작품의 평가=== | ===완료작품의 평가=== | ||
− | + | ||
+ | [[파일:미네르바 완료작품평가.JPG|800픽셀]] | ||
+ | <br> | ||
+ | <br> | ||
===향후계획=== | ===향후계획=== | ||
− | |||
− | + | - React 라이브러리를 통한 반응형 웹 제작 | |
− | + | ||
+ | - 안드로이드 어플리케이션 형태로 이식 | ||
+ | |||
+ | - 웹 호스팅 서비스 | ||
+ | |||
+ | - 키워드 자동 크롤링을 통하여 자동으로 기사 쓰기 | ||
+ | |||
+ | - 사용자가 직접 학습시킬 수 있는 웹 기반 머신러닝 | ||
+ | |||
+ | - SNS 기반 로그인 API | ||
+ | |||
+ | - 자유게시판을 통한 유저간의 소통 및 글쓰기 모델 체험 | ||
+ | |||
+ | - GPT-2보다 향상된 성능의 NLP 모델 사용하기 |
2020년 6월 28일 (일) 10:36 기준 최신판
프로젝트 개요
기술개발 과제
국문 : <MINE-POST> 인공지능의 보조를 통한 가짜뉴스 사이트
영문 : <MINE-POST> Fake news site with the help of artificial intelligence
과제 팀명
미네르바
지도교수
김민호 교수님
개발기간
2020년 3월 ~ 2020년 6월 (총 4개월)
구성원 소개
서울시립대학교 컴퓨터과학부 20159200** 소*진(팀장)
서울시립대학교 컴퓨터과학부 20169200** 정*희
서울시립대학교 컴퓨터과학부 20159200** 박*원
서울시립대학교 컴퓨터과학부 20159200** 이*구
서울시립대학교 컴퓨터과학부 20159200** 지*원
서론
개발 과제의 개요
개발 과제 요약
MINE-POST는 인공지능의 보조를 통한 가짜뉴스 사이트이다. 핵심 기능은 다음과 같다.
1. Fine-Tuning을 통해 구현된 다양한 글 스타일 모델(뉴스, 소설, 노래)을 사용할 수 있다. 2. 기사 제목을 입력하면 이후에 올 적합한 단어들을 Ajax를 통해 실시간으로 추천한다. 3. 사용자가 문장을 입력하면 인공지능이 맥락에 맞는 한 단락의 문장을 완성한다. 4. 완성된 기사는 TextRank 알고리즘을 통해 3줄 요약하여 기사 상단에 보여준다 5. 기사에 어울리는 이미지들을 Selenium을 통해 크롤링하여 제공한다.
개발 과제의 배경
- 가짜뉴스는 진짜뉴스를 뛰어넘을 만큼 많이 존재하며 이로 인한 국가, 경제적 피해가 심각하다.
- 하지만 미국 증권가의 AI Journalism은 속도나 객관성에서 사람을 뛰어넘을 만큼 큰 잠재력을 가졌다.
- 양날의 검인 글쓰기 모델을 올바르게만 사용한다면 훌륭한 글쓰기 보조도구가 될 것이다.
- 그래서 우리는 인공지능이 뉴스 작성을 보조해주는 기계+인간 협업 형태의 새로운 뉴스 사이트를 제시한다.
개발 과제의 목표 및 내용
- Pre-Traning상태인 GPT-2 모델에 대하여 Fine-Tuning을 거쳐 뉴스 사이트에 적합한 형태로 학습 시킨다.
- 아래 제시한 인공지능의 핵심 보조 기능들에 대하여 구현한다.
1. 다양한 글 스타일 모델(뉴스, 소설, 노래) 사용 2. 실시간 제목 추천 3. 인공지능 자동 글쓰기 4. Text-Rank 기사 3줄 요약 5. 크롤링을 통한 이미지 추천
관련 기술의 현황
관련 기술의 현황 및 분석(State of art)
1. 전 세계적인 기술현황
국외
1. BERT - 2018.11 Google 발표. Transformer 신경망 기반. 양방향성 학습 모델
2. GPT-2 - 2019.02 OpenAI 발표. Transformer 신경망 기반. 최대 규모 오픈소스 모델
3. T5 - 2019.10 Google 발표. Transformer 신경망 기반. '전이학습' 이용한 학습 모델
국내
1. KoBERT - 2019.10 SK T-Brain 발표. 데이터 기반 토큰화 기법 통해 한국어 성능 극복
2. KoGPT2 - 2020.04 SK + AWS 발표. GPT-2 Small(117M)을 기반으로 함.
3. KorBERT - 2019.06 한국전자통신연구원(ETRI)발표. 형태소 기반 언어 모델로 한국어 성능 극복
2. 특허조사 및 특허 전략 분석
특허조사
- 자연어처리를 위한 완성형 한글코드 음소정보 추출 방법 (KT, 2003년 출원, 2009년 등록)
- 기사 요약 서비스 서버 및 방법(KaKao, 2015년 출원, 2015년 등록)
- 한국뉴스 요약 시스템 및 방법 (울산과학기술원 산학협력단. 2013년 출원, 2015년 등록)
- 빅데이터 분석 기반의 인공지능 실시간 스포츠 기사 자동 작성 시스템 및 방법(에이피케이어플킹, 2018년 출원, 2019년 등록)
- 작성자 맞춤형 기사 작성 방법(이명환, 2015 출원, 2017년 등록)
- 문서를 이미지 기반 컨텐츠로 요약하여 제공하는 방법 및 시스템(NAVER, 2015년 출원, 2017년 등록)
- 발화 패턴의 무한성 개선을 위한 딥러닝 기반의 텍스트 문장 자동 생성시스템 (미디어젠, 2019년 출원, 2019년 등록)
특허 분석
- 인공지능 글쓰기 보조 웹사이트라는 측면에서 신규성을 갖출 수 있다.
- 오픈 소스로 공개하여 사용, 재포, 개작, 개작 후 재배포를 보장한다.
- 웹 컨텐츠의 경우, 단순한 데이터의 축적에 불과하다면 특허출원이 곤란하지만, 웹 컨텐츠를 운영하는 방식이나 알고리즘의 특이성이 인정된다면 그 부분에 대해서는 출원이 가능하다.
시장상황에 대한 분석
1. 경쟁제품 조사 비교
국외
1. Apple 'Siri'
- 음성인식 형태의 자연어 처리 시스템
- 사용자의 단어, 말투를 프로파일링. 축적한 음성 정보를 통해 사용자의 신원 확인 후 정보 제공
- 최근 인공지능 음성 인식 기술을 보유한 스타트업 'PullString'을 인수하며 엔터테인먼트, 금융, 헬스케어를 위한 솔루션 도입 전망
2. Amazon 'Amazon Comprehend'
- 언어 해석을 중심으로 한 자연어 처리 시스템
- 고객의 이메일, 제품 후기, SNS에 게재된 기업 평가 등을 해석하여 기업이 제공하는 서비스 및 제품에 대한 고객 심리 분석
- 언어 해석을 넘어 비정형 데이터 분석 또한 뛰어나다는 평가를 받음.
3. IBM 'Watson Analytics(Cognos Analytics)'
- 자연어 처리 소프트웨어
- 특정 문서가 내포하는 전반적인 정서 및 감정 또는 키워드 속의 감정을 파악하여 심층 분석
국내
1. ETRI 'KorBERT'
- 혁신성장동력 프로젝트인 '엑소브레인' 사업에서 공개된 국가 주도형 한국어 언어 모델
- 두 종류의 모델 공개 (구글의 기존 언어표현 모델, 한국어의 교착어 특성을 반영한 모델)
2. Kakao 'Khaiii'
- CNN 기반 형태소 분석 모델
- '세종 Corpus'를 기반으로 데이터 오류 수정 및 자체 구축 데이터로 학습(85만 문장, 1003만 어절)
- 딥러닝에 C++ 를 적용하여 일반적인 방식인 GPU 를 사용하지 않고도 빠른 분석 속도 구현
3. Naver
- AI 기술 기반 검색어 교정 시스템인 'AIQSpell'로 기존 교정 시스템 대체
- 홍콩 학회 <EMNLP-IJCNLP 2019> '다국어 읽기 이해도를 위한 제한된 데이터 학습으로 충분한 학습데이터가 존재하지 않는 언어에 대해 기계번역 및 자동 레이블링을 통해 데이터를 자동으로 구축하는 방법' 발표
- 자연어 처리 분야에 있어 업계 가장 선도적으로 개발과 투자를 진행 중인 기업
4. 포티투마루
- 국내 딥러닝 기반 QA(Question Answering) 검색 기술 개발 스타트업
- 'Deep Semantic QA Platform'을 통해 의도를 정확히 이해하고 단 하나의 정답만 도출하는 검색 플랫폼 구축
- 세계 최대 기계 독해 경진대회 SQuAD 2.0에서 기계 독해(MRC)분야 3위 기록 (스타트업 최초)
2. 마케팅 전략 제시(SWOT)
1. Strengths
- 새로운 형태의 인공지능 보조 글쓰기 사이트
- Plug-In 형색으로 타 사이트 연동 가능
2. Weaknesses
- 한국어 언어 모델의 성능 한계
- 웹 기반 AI 서비스의 성능 문제
- 다량 데이터 처리로 인한 막대한 서버 비용
- 기사에 대한 팩트체크가 요구
3. Opportunities
- 인공지능에 대한 관심과 수요 증가
- 해외 인공지능 서비스의 성공 사례
- 앱 분야 진출 용이
4. Threats
- 가짜뉴스 등의 악용성 우려
- 대기업 R&D와의 경쟁 시장
1. SO전략
- 기존 사이트에 플러그인 형식을 통한 제공 및 커스터마이징으로 맞춤형 서비스 제공 전략
- 앱 형태의 개발을 통해 흥미로운 것에 관심이 많은 젊은 층과, 글쓰기에 어려움이 있는 중년 층까지 공략
- 인공지능 보조 사이트라는 독자적인 브랜드 이미지에 초점을 맞춘 마케팅
- 언어에 대한 호환력이 좋아서 전 세계에 서비스 제공 가능
2. ST전략
- 타 뉴스 사이트에서 풍부한 기사를 학습 자료로 제공 받고 우리는 서비스를 제공하는 Win-Win 전략 구상
- 인공지능 뉴스의 가장 큰 문제인 신뢰성에 대해 '인공지능 팩트 체크 기술'과의 협업을 통해 신뢰성 확보
3. WO전략
- 모델을 서버에 업로딩 하는 방식이 아닌 고성능 컴퓨터를 통한 실시간 처리 방식을 구상
4. WT전략
- CDN을 통한 간단한 서비스 제공으로 사업이 확장 되어도 유지 비용을 유지하는 방법 구상
개발과제의 기대효과
기술적 기대효과
- 더 자연스럽고 정확한 결과물을 위해 한국어 고유의 학습 방식이 필요함을 제시한다.
- 국내 도입 단계인 '인공지능 글쓰기' 분야가 어떻게 응용되는지 파악하고 유저의 흥미를 끌어낸다.
- 모델 선정, 데이터 가공 및 적용 등 설계 전반 과정에서 모델의 문제점과 발전 방향을 제시한다.
- '인공지능 글쓰기 보조도구'라는 새로운 분야의 발전에 기여한다.
경제적, 사회적 기대 및 파급효과
- 인공지능이 작성하는 가짜뉴스에 대한 경각심을 제공하여 대비책의 필요성을 제시한다.
- 인공지능과 인간의 협업에 대한 긍정적인 가능성을 제공한다.
- '인공지능 글쓰기'의 발전과 함께 '가짜 뉴스 판별 기술' 또한 발전하게 된다.
- 기존의 사이트에 대해 Plug-In 형태로 해당 프로젝트의 인공지능 기능을 유연하게 적응할 수 있다.
기술개발 일정 및 추진체계
개발 일정
구성원 및 추진체계
설계
설계사양
제품의 요구사항
설계 사양
- Windows, Linux, macOS 구동 가능
Requirements
- gluonnlp == 0.9.1
- mxnet == 1.6.0
- sentencepiece >= 0.1.85
- torch == 1.5.0
- transformers == 2.11.0
- django_extensions==2.2.9
- selenium==3.141.0
- Django==3.0.7
- minegpt2
개념설계안
1. 웹 클라이언트가 Django에서 제공하는 웹 서버(Django WSGI)에 HTTP 프로토콜로 요청하게 된다.
2. CSS, JS, Img파일 등은 ‘static’ 폴더에 따로 관리되어 html이나 Python 코드와 달리 Django를 거치지 않고서도 서버가 바로 처리할 수 있다.
3. 동적인 부분은 웹 서버가 처리 불가능하기 때문에 HTTP 프로토콜 요청을 Python 요청으로 변환하여 Django에 전달한다.
4. Django는 사용자가 Python으로 작성한 어플리케이션 코드를 실행하거나 DB에서 데이터를 불러온다.
상세설계 내용
1. 모델 학습 및 적용
1.1 KoGPT2 사용
- SKT-AI가 Git Open source로 공개한 KoGPT2 모델 사용 (https://github.com/SKT-AI/KoGPT2)
- 2500만 뉴스 데이터로 Pre-Training 상태이기 때문에 "..한다", "..하다" 형태의 기사 문체 및 맥락 없는 문장 생성하는 문제점 발생
- Fine-Tuning 필요 (이미 학습된 모델 Weights를 목적에 맞게 변형하는 2차 학습 과정)
1.2 Fine-Tuning
- PyTorch 사용
- Google 'Colab' GPU 환경에서 진행
- Object Function: Cross Entropy Loss
- Optimizer: Adam
1) 학습 데이터 준비
- 인터넷에서 무료로 제공하는 김동인 작가의 단편 소설을 사용
2) 파일 경로 설정
- cache_dir : SK에서 제공하는 모델 경로
- save_path : 학습을 마친 후 결과물인 tar파일을 저장할 경로
- data_file_path : 학습할 데이터 경로 (다운 받은 소설이나 기타 등등)
3) 변수 설정
- SK에서 제공하는 모델로 model과 vocab 변수를 설정한다.
- 이 부분은 Fine-Tuning을 진행하지 않고 문장만 생성하려 할 때도 필요한 부분이다.
- epoch, learning_rate, batch_size를 설정한다.(바꿔보면서 할 수 있음)
4) 학습 진행
1. 소설 파일 등에 공백인 줄이 있는 경우엔 학습이 진행되지 않아 설정
2. Count가 10의 배수가 될 때마다 현재 진행 중인 epoch, train no, loss를 출력
3. Count가 100의 배수가 되거나 일정 조건에서 학습한 내용을 저장
4. 짧은 문장들이 많은 경우(노래 가사) 또는 학습할 데이터의 크기가 너무 큰 경우 RuntimeError 발생
GPU가 아닌 CPU로 진행 할 경우 문제 해결이 가능하나 그러기엔 학습 속도가 너무 느림
짧은 문장들을 합쳐 긴 문장들로 바꾼 후 학습을 진행했을 때 loss가 잘 줄어드는 것을 확인 후 문제 해결
1.3 Multi-Model 구축
1) Fine-Tuning 완료시 약 1~2GB의 tar 파일 생성
2) 해당 모델의 경로를 변수를 통해 설정하면 정상적으로 적용 가능
2. 이미지 크롤링
목적
- 제목 값을 입력으로 받아 Selenium을 통해 구글 이미지 크롤링 시스템을 구현한다.
요구사항 및 구현
- txt 값을 입력으로 받을 수 있게 한다.
- 이미지 URL을 이용하여 사진을 받을 수 있게 한다.
- 이미지를 긁어와 개별적인 폴더를 구성할 수 있게 한다.
- 이미 존재하는 폴더가 있는 경우 선택적으로 재검색을 수행할 수 있게 한다.
주요 함수
class CollectLinks
- def get_scroll(self) : 자동 스크롤 기능
- def wait_and_click(self, xpath) : 오류 발생 시 2초 간 sleep
- def highlight(self, element) : google_full에서 이미지가 체크된 곳에 하이라이트 표시
- def remove_duplicates(_list) : 중복 제거
- def google(self, keyword, add_url=””) : 썸네일 가져오기
- def google_full(self, keyword, add_rurl) : 원본 사진 가져오기
실행 결과
- 키워드를 입력 받으면 OS를 탐지하고, 구글에서 이미지를 검색한다.
- 스크롤은 4페이지 이내만 수행하고, 최대 10장의 사진만 저장하도록 동작한다.
- robotx.txt에서 크롤링을 허가하지 않은 홈페이지에 게재된 파일의 경우 스크롤을 진행하지 않는다.
- 열 장의 사진에서 URL을 입력 받아 원본 사진을 크롤링 한다.
결과 및 평가
완료 작품의 소개
프로토타입 사진 혹은 작동 장면
1. 메인 페이지
- 헤드라인 뉴스
- 전체 뉴스 최신순
- 카테고리별 뉴스
- 카테고리별 최신순
- 투데이 랭킹
- 스크랩 기반 순위
- 우측 사이드바 위치
2. 글쓰기 페이지
- 글 스타일 (핵심 1)
- 다양한 스타일의 멀티모델 사용 가능
- 실시간 단어 추천 (핵심 2)
- 더 나은 제목을 위한 단어 추천
- 기사 자동 완성 (핵심 3)
- 첫 문장과 연결되는 문장 완성
- 이미지 추천 (핵심 4)
- 구글 이미지 크롤링을 통해 제공
3. 카테고리별 페이지
- 핫이슈
- 카테고리 최다 스크랩 기사
- 뉴스 리스트
- 10개 단위 페이지네이션
4. 스크랩 페이지
- 스크랩 글 조회
- 스크랩 삭제
- 체크박스 통한 복수 삭제 가능
5. 뉴스 상세 페이지
- 요약 봇 (핵심 5)
- Text-Rank 통한 기사 3줄 요약
- 스크랩
- 스크랩 페이지에 추가
- 댓글
- Disqus API 사용
포스터
완료작품의 평가
향후계획
- React 라이브러리를 통한 반응형 웹 제작
- 안드로이드 어플리케이션 형태로 이식
- 웹 호스팅 서비스
- 키워드 자동 크롤링을 통하여 자동으로 기사 쓰기
- 사용자가 직접 학습시킬 수 있는 웹 기반 머신러닝
- SNS 기반 로그인 API
- 자유게시판을 통한 유저간의 소통 및 글쓰기 모델 체험
- GPT-2보다 향상된 성능의 NLP 모델 사용하기