- Lec & Rec์ ๋์์์ด ๋ฐฐ์ฐ๊ณ ์ ํ๋ ๋ถ๋ค์ด ๋ณด๋ค ํจ์จ์ ์ผ๋ก ํ์ตํ ์ ์๋ ๋๊ตฌ๋ฅผ ์ ๊ณตํด์
- Lec & Rec์ ๋ฌด์์ธ๊ฐ๋ฅผ ๋ฐฐ์ฐ๊ณ ์ ํ๋ ๋ชจ๋ ๋ถ๋ค์ ์ํด ํ์ํ์ด์
Lec & Rec์ ๊ฐ์ ์ ํ๋ธ ๋งํฌ๋ ์์ฑ ํ์ผ์ ์ ๋ ฅ ๋ฐ์
1) ๋ชจ๋ ๋ด์ฉ์ ์ ์ ์๊ธฐ๋ณธ 2) ํต์ฌ์ ๋น ๋ฅด๊ณ ์ฝ๊ฒ ํ์ ํ ์ ์๋ ์์ฝ๋ณธ 3) ์ดํด๋๋ฅผ ์ฒดํฌํด๋ณผ ์ ์๋ ํด์ฆ๋ฅผ ์ ๊ณตํด์
- ์ ํ๋ธ ๋งํฌ๋ ์์ฑ ํ์ผ์ ์ ๋ ฅ์ผ๋ก ๋ฐ์ ๋จผ์ ์๊ธฐ๋ณธ์ ๋ง๋ค์ด์
- AI ๋ชจ๋ธ์ด ์๊ธฐ๋ณธ์ผ๋ก ์์ฝ๋ณธ๊ณผ ํด์ฆ๋ฅผ ์์ฑํ๊ฒ ๋ผ์
- ๊ฐ๊ฐ์ ๊ฒฐ๊ณผ๋ ๋ง๋ค์ด์ง๋ ์ฆ์ ํ์ธํ์ค ์ ์์ด์
๋ ํจ์จ์ ์ธ ํ์ต์ ์ํด Lec & Rec์ด ์ถ๊ฐ๋ก ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ์์.
- ํ๋ฒ ํ์ต์ผ๋ก ๋? โ
- ์๊ฐ์ด ์ง๋๋๋ผ๋ ์ธ์ ๋ผ๋ ๋ค์ ํ์ตํ์ค ์ ์๊ฒ ํ์คํ ๋ฆฌ ๊ธฐ๋ฅ์ ์ ๊ณตํด์
- ์์ ๋ง์ ๋
ธํธ๋ฅผ ๋ง๋ค๊ณ ์ถ์ผ์ ๊ฐ์? โญ
- ๋ชจ๋ ๋ด์ฉ์ ์ปค์คํฐ๋ง์ด์ฆํ์ค ์ ์๊ฒ ์์ , ์ญ์ ๊ธฐ๋ฅ์ ์ ๊ณตํด์
- ํ์ผ๋ก ํ์ตํ๊ณ ์ถ์ผ์ ๊ฐ์? โญ
- ์๊ธฐ๋ณธ, ์์ฝ๋ณธ, ํด์ฆ ์ํ๋ ์๋ฃ๋ฅผ ๊ณจ๋ผ pdf ํํ๋ก ๋ค์ด๋ฐ์ผ์ค ์ ์์ด์
python 3.10
$ git clone https://github.com/boostcampaitech5/level3_nlp_finalproject-nlp-09.git
$ cd level3_nlp_finalproject-nlp-09
$ chmod +x setting.sh
$ ./setting.sh
frontend/.env.development ์์
REACT_APP_BACKEND_SERVER_ADDRESS=<IP์ฃผ์:ํฌํธ๋ฒํธ>
Database setting
$ sudo apt install -y alembic
$ cd backend
$ source .venv/bin/activate
$ alembic init migrations
backend/alembic.ini ์์
sqlalchemy.url = sqlite:///./project.db
backend/migrations/env.py ์์
import sys
sys.path.append('../backend')
import models
...
...
target_metadata = models.Base.metadata
$ alembic revision --autogenerate
$ alembic upgrade head
backend/secret.py ์์
JWT_SECRET_KEY = <์์์ ๋ฌธ์์ด>
JWT_ALGORITHM = <์ํธํ ์๊ณ ๋ฆฌ์ฆ> # ex) HS256, AES128
OPENAI_API_KEY = <openai api key>
PORT = <ํฌํธ๋ฒํธ>
# backend ์คํ
$ python main.py
# frontend ์คํ
$ cd ..
$ cd frontend
$ sudo npm start
[๋ชฉํ]
์์ฑ ํ์ง ๋๋น ๊ฐ๊ฑด์ฑ
/ ์ ๋ฌธ ์ฉ์ด ์ธ์ ์ ํ๋
/ ๋น ๋ฅธ ์ถ๋ก ์๋
[๋ชจ๋ธ ํ์ต]
- OpenAI Whisper API๋ฅผ ์ด์ฉํ ์ถ๋ก ์ฌ์ฉ
[๋ฌธ์ ํด๊ฒฐ ๊ณผ์ ]
- Whisper large-v2 ๋ชจ๋ธ ์ถ๋ก ์ ๊ฐ๊ฑด์ฑ๊ณผ ์ ํ๋๊ฐ ํ๋ณด๋๋, ์ถ๋ก ์ ์์ฑ ํ์ผ ์๊ฐ์ 1/4๊ฐ ์์๋๋ ๋ฌธ์ (1์๊ฐ ์์ฑ โ 15๋ถ ์ถ๋ก )
- ๋์ผ ์ฑ๋ฅ์ ๋น ๋ฅธ ์ถ๋ก ์๊ฐ ํ๋ณด ๊ฐ๋ฅํ OpenAI API ์ฌ์ฉ ๊ฒฐ์
- GPU ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฏ๋ก, ์์ฑ์ ์ฒญํนํ์ฌ ๋ฉํฐ ์ค๋ ๋๋ก ์์ ํ ์ฌ์กฐํฉ
- ์๊ธฐ๋ณธ ๋ฌธ์ฅ์ ๋ง์นจํ๊ฐ ์ ๋๋ก ํ๊ธฐ๋์ง ์๋ ๋ฌธ์ (์ดํ ์์ฝ ๋ชจ๋ธ ์
๋ ฅ ์ ์ ์ฒ๋ฆฌ๋ฅผ ์ํด ์ฌ๋ฐ๋ฅธ ๋ถํธ ํ๊ธฐ ํ์)
- ์๋๊ฐ ๋น ๋ฅธ KoBART ๊ธฐ๋ฐ ๋ชจ๋ธ์ ํตํด ๋ง์นจํ ํ์ฒ๋ฆฌ ํ์ต
[๊ฒฐ๊ณผ]
- 1์๊ฐ ์์ฑ ๊ธฐ์ค, 1๋ถ ๋ด๋ก ๋์ ์ ํ๋์ ์๊ธฐ๋ณธ ๋์ถ
- 1์๊ฐ ์์ฑ ๊ธฐ์ค, 2๋ถ ๋ด๋ก ํ์ฒ๋ฆฌ ํ DB ์ ๋ฐ์ดํธ ๋ฐ ์์ฝ ๋ชจ๋ธ ์ ๋ฌ
[๋ชฉํ]
ํต์ฌ ๋ด์ฉ ์ถ์ถ
/ ์์ฝ๋ฌธ ๊ฐ๋
์ฑ
/ ๊ตฌ์ด์ฒด๋ฅผ ๋ฌธ์ด์ฒด๋ก
[๋ชจ๋ธ ํ์ต]
- ํ๊ตญ์ด T5 ๋ชจ๋ธ paust/pko-t5-large
- AI Hub์ ๋ฐฉ์ก ์ฝํ ์ธ ๋๋ณธ ์์ฝ ๋ฐ์ดํฐ ์ฌ์ฉ
- IN: Passage / OUT: Summary
[๋ฌธ์ ํด๊ฒฐ ๊ณผ์ ]
- ๋ฌธ๋จ ๊ตฌ๋ถ ์๋ ๊ธด ์๊ธฐ๋ณธ์ ์์ฝ ๋ชจ๋ธ์ ํ ๋ฒ์ ์
๋ ฅํ ์ ์๋ ๋ฌธ์
- ์ ์ฌ๋ ๊ธฐ๋ฐ์ผ๋ก ๋ฌธ๋จ์ ๋ถ๋ฆฌํ๊ณ , ๋ถ๋ฆฌ๋ ๋ฌธ๋จ์ ์์ฝ ๋ชจ๋ธ์ ์ฃผ์
- ์์ฝ ๋ฌธ์ฅ์ด ํ์ ์ด์์ผ๋ก ์งง์์ง๊ณ , ๊ธ์ ๊ฐ๋
์ฑ์ด ์ ํ๋๋ ๋ฌธ์
- ์์ง ๋ฐ์ดํฐ์์ ์์ฝ ๊ธธ์ด๊ฐ ๊ธด ๋ฐ์ดํฐ๋ง ์ถ์ถํด ํ์ต
- ๊ฐ์ ํน์ฑ์ ๋ง๋ ๊ตฌ์ด์ฒด ๋ฐ์ดํฐ๋ก ํ์ต
[๊ฒฐ๊ณผ]
- 1์๊ฐ ๋ถ๋ ์์ ๊ธฐ์ค ์ฝ 20๊ฐ ๋ด์ธ์ ๋ฌธ๋จ ์์ฑ
- ์ ์ ํ ๊ธธ์ด์ ํต์ฌ ๋ด์ฉ์ ํจ์ถ์ ์ผ๋ก ํฌํจํ ๋ฌธ์ด์ฒด ์์ฝ ์์ฑ
[๋ชฉํ]
์ฃผ์ ์ํฐํฐ์ ๋ํ ํด์ฆ ์์ฑ
/ ๋ฌธ์ ์ ๋ค์์ฑ ํ๋ณด
[๋ชจ๋ธ ํ์ต]
- ๋ค๊ตญ์ด T5 ๋ชจ๋ธ google/mt5-large
- KLUE (MRC)์ SQuAD-Kor-V1์์ Wikipedia ์ถ์ฒ์ธ ๋ฐ์ดํฐ ์ฌ์ฉ
- IN: Context / OUT: Question + [SEP] + Answer
[๋ฌธ์ ํด๊ฒฐ ๊ณผ์ ]
- ํ๋์ ๋ฌธ๋จ์ ์ฌ๋ฌ ์ธ๋ถ ์ฃผ์ ๊ฐ ๋ด๊ฒจ์์์๋ ๋ถ๊ตฌํ๊ณ , ๋์ผ ๋ฌธ๋จ์ ๋์ผ ํด์ฆ๋ง ์์ฑ์ด ๊ฐ๋ฅ
- Beam search์ ๋ฒ์๋ฅผ ์ฆ๊ฐ์์ผ ์ง๋ฌธ์ ๋ค์์ฑ ํ๋ณด ์๋
- Beam search๋ก ๋์ถ๋ ๋ค์ค ๊ฒฐ๊ณผ๊ฐ ์ง๋ฌธ๊ณผ ๋ต์ด ๋งค์ฐ ์ ์ฌํ๊ฑฐ๋ ์ค๋ณต๋๋ ๋ฌธ์
- ํฌํจ ๊ด๊ณ์ ๋ํ rule-based ํ์ฒ๋ฆฌ๋ฅผ ํตํด ํด์ฆ ํ๋ฆฌํฐ ํ๋ณด
[๊ฒฐ๊ณผ]
- 1๊ฐ์ ์์ฝ ๋ฌธ๋จ์ ๋ํด ์ต๋ 3๊ฐ์ ์๋ก ๋ค๋ฅธ ํด์ฆ ์ ๊ณต
- 1์๊ฐ ์์ฑ ๊ธฐ์ค, ์ฝ 20~30๊ฐ์ ํด์ฆ ์ ๊ณต ๊ฐ๋ฅ
[๋ชฉํ]
- ๊ฐ๋ ์ฑ ํฅ์์ ํตํ ์ ์ง ๋ณด์ ์ฉ์ด
- ์์ฒญ ๋ฐฉ์์ ์ต์ ํ๋ฅผ ํตํ UI/UX ๊ฐ์
- Single Page Application์ ํตํ ๋ก๋ฉ ์๊ฐ ๋จ์ถ
[๊ณผ์ ]
- ํ๋์ ํ์ด์ง๋ฅผ ํ๋์ ์ปดํฌ๋ํธ๋ก ์์ฑํ๋ ๊ฐ๋
์ฑ์ด ๋จ์ด์ง
- ๋ฉ์ธ ํ์ผ์ ์ด ์ธ ๊ฐ์ ์๋ธ ์ปดํฌ๋ํธ๋ก ๊ตฌ์ฑ
- Long polling์ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๊ฐ ์์ฑ ๋์ง ์์ผ๋ฉด ๋ค๋ฅธ ์์
์ ์ํํ ์ ์์
- Short polling ์ด์ฉ
- ๊ณตํต๋ถ๋ชจ๋ฅผ ๊ฐ์ง๋ ์ปดํฌ๋ํธ๋ค์ ๊ฐ๊ฐ์ ํ์ด์ง๋ก ๋ถ๋ฆฌํ์ฌ ๋ผ์ฐํ
์ ์ ์ฉํ ๊ฒฐ๊ณผ Single Page Application์ด ๋์ง ์๋ ๋ฌธ์ ๋ฐ์
- ์ค์ฒฉ ๋ผ์ฐํ ์ ๋์ ํ์ฌ ๊ฐ๊ฐ์ ํ์ด์ง๋ฅผ ํ๋์ ์ปดํฌ๋ํธ๋ก ํตํฉ
[๊ฒฐ๊ณผ]
- ๋ฉ์ธ ํ์ผ ๋ด์ ์ปดํฌ๋ํธ๋ค์ ๊ด๋ฆฌ, ๋ณ๊ฒฝํ๊ธฐ ์ฉ์ดํด์ง
- ์์ฝ๋ณธ, ํด์ฆ๊ฐ ์์ฑ ๋๋ ๋์ ์์ฑ๋ ์๊ธฐ๋ณธ ๋ฐ ์ด์ ํ์คํ ๋ฆฌ ๋ด์ฉ์ ํ์ธํ ์ ์์
- ๋ผ์ฐํ ์ ์ ์ฒดํ์ด์ง๊ฐ ์๋ก๊ณ ์นจ ๋์ง ์์ ๋ก๋ฉ ์๊ฐ ๋จ์ถ
[๋ชฉํ]
- ์ ๋ก๋ ์ดํ ์ฌ์ฉ์์ ๋๊ธฐ์๊ฐ ๊ฐ์
- ์ฌ์ฉ์์ ํธ์์ฑ ์ฆ๋์ ๊ณผ๊ฑฐ ๊ธฐ๋ก ๊ด๋ฆฌ ์ฉ์ด์ฑ ํ๋ณด
- ์๋น์ค ๋ณด์์ฑ ํฅ์
[๊ณผ์ ]
- ์๊ธฐ๋ณธ, ์์ฝ๋ณธ, ํด์ฆ ์์ฑ์ด ๋ชจ๋ ์๋ฃ๋ ๋๊น์ง ๋ฐํ ์ง์ฐ
- ์๊ธฐ๋ณธ ์์ฑ ํ ๋ฐํ
- ์์ฝ ๋ฐ ํด์ฆ ์์ฑ์ ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ์คํ
- ๊ณผ๊ฑฐ ๊ธฐ๋ก ์ด๋ ๋ฐ ์์ ํ์
- User, History, QnA ์ธ ๊ฐ์ ํ ์ด๋ธ๋ก DB ๊ตฌ์ถ
- URL์ ํตํ ๋ค๋ฅธ ๊ณ์ ์ ๊ทผ์ด ๊ฐ๋ฅ ํ์
- POST ๋ฐฉ์์ ์ฌ์ฉํด URL์ ํตํ ์ ๊ทผ ์ฐจ๋จ
- Json Web Token๋ก ์ฌ์ฉ์ ์ธ์ฆ ๋ฐ ๋ณด์ ๊ฐํ
[๊ฒฐ๊ณผ]
- ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํ์ ํตํ ๋๊ธฐ์๊ฐ 60% ๊ฐ์
- ๊ณผ๊ฑฐ ๊ธฐ๋ก์ ์์ ๋ก์ด ์์ ๋ฐ ์ญ์ ๋ฅผ ํตํ UX ํฅ์
- GCP๋ฅผ ์ฌ์ฉํ์ฌ ์น ํ์ด์ง ์คํ
- AI Stage ์๋ฒ๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ธ ์ถ๋ก ๋ฐ ๋ฐฑ์๋ ์๋ฒ ์คํ