-
FastText ๊ธฐ๋ฐ ์นดํ ๊ณ ๋ฆฌ ๋ถ๋ฅ ๋ชจ๋ธ ๋ง๋ค๊ณ ๋ฐฐํฌํ๊ธฐProject/DEVOOK 2022. 5. 17. 20:12
๐ ๋จธ์ ๋ฌ๋ ์ํฌ ํ๋ก์ฐ
์์ ์ํฌ ํ๋ก์ฐ๋ฅผ ๋ฐํ์ผ๋ก
๋ฐ์ดํฐ ์์ง → ๋ฐ์ดํฐ ์ ๊ฒ ๋ฐ ํ์ → ํ ์คํธ ์ ์ฒ๋ฆฌ ๋ฐ ํ ํฐํ → ๋ฐ์ดํฐ์ ๊ตฌ์ฑ(ํ์ต์ฉ, ๊ฒ์ฆ์ฉ) → ์ง๋ ํ์ต์ ํตํ ๋ถ๋ฅ๊ธฐ ์์ฑ(๋ชจ๋ธ๋ง ๋ฐ ํ๋ จ, ํ๊ฐ) → ์นดํ ๊ณ ๋ฆฌ ๋ถ๋ฅ ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ APIํ ์์๋ก ์งํํ์๋ค.
๐ ๊ฐ๋ฐ ํ๊ฒฝ ์์ฝ
Google Colab, PyCharm, AWS EC2, Docker
๐ 1. ๋ฐ์ดํฐ ์ ๊ฒ ๋ฐ ํ์
๊ตฌ๊ธ ์ฝ๋ฉ ํ๊ฒฝ์ค์ ๋ฐ ์ฌ์ฉ๋ฒ
https://theorydb.github.io/dev/2019/08/23/dev-ml-colab/
์์งํ ๋ฐ์ดํฐ ์ ๊ฒ ๋ฐ ํ์ ์์
### ์์ฐ์ด ์ฒ๋ฆฌ๋ฅผ ์ํ NLTK์ KoNLPY ์ค์น import nltk # import all the resources for Natural Language Processing with Python nltk.download("book") pip install konlpy ## ํ๋ค์ค ํ๋กํ์ผ๋ง(Pandas-Profiling) pip install -U pandas-profiling ### 1. ์ค์ต ํ์ผ ๋ถ๋ฌ์ค๊ธฐ import pandas as pd import pandas_profiling data = pd.read_csv('surfit_csv_files/Android.csv', encoding='utf-8') # 5๊ฐ์ ํ๋ง ์ถ๋ ฅ data[:5] ### 2. ๋ฆฌํฌํธ ์์ฑํ๊ธฐ pr = data.profile_report() # ํ๋กํ์ผ๋ง ๊ฒฐ๊ณผ ๋ฆฌํฌํธ๋ฅผ pr์ ์ ์ฅ pr.to_file('./android_report.html') # android_report.html ํ์ผ๋ก ์ ์ฅ pr
๐ 2. ํ ์คํธ ์ ์ฒ๋ฆฌ ๋ฐ ํ ํฐํ
๋ฐ์ดํฐ์ ๋ ธ์ด์ฆ ์ ๊ฑฐ์ ์ ๊ทํ ๊ณผ์ ์ ๋ช ํํ ์์๊ฐ ์๊ธฐ๋ณด๋ค ๋ฒ๊ฐ์ ์ ์ฉํ๋ฉฐ ๊ธฐ์ค์น๊น์ง ๋ง์ถฐ๊ฐ๋๋ก ํ๋ ๊ฒ์ด๋ค.
ํ ์คํธ๋ฅผ ์์นํํ๊ธฐ ์ ํ ์คํธ์ผ ๋๋ง ํ ์ ์๋ ์ต๋ํ์ ์ ์ฒ๋ฆฌ๋ฅผ ๋๋ด๋์์ผ ํ๋ค.
2-1. ํํ์ ํ ํฐํ ํ csv ํ์ผ์ ์ ์ฅ
> ๊ฐ๋ฐ ํ๊ฒฝ
Google Colab, Python
> ์ ์ฉ ๋์ : title
description์ ๊ฒฝ์ฐ ๋ธ๋ก๊ทธ ์์ฑ์๊ฐ ์ง์ ์์ฝํ์ง ์์๋ค๋ฉด ๋ธ๋ก๊ทธ ๊ธ์ ์์ ๋ถ๋ถ์ ์ผ๋ถ ๋ณด์ฌ์ฃผ๋ฏ๋ก ์๋ฏธ์๋ ๋ฐ์ดํฐ๊ฐ ๋ค์ ์กด์ฌํ์ฌ title ๋ฐ์ดํฐ๋ง์ ๋์์ผ๋ก ํ์ ํ๋ค.
๊ฐ๋ฐ ๊ธ์ ๊ฒฝ์ฐ ๋๋ถ๋ถ ๊ฐ๋ฐ ๊ด๋ จ ์ ๋ฌธ ์ฉ์ด(ํ๊ตญ์ด, ์์ด)๋ก ๊ตฌ์ฑ๋๊ณ , ์ฌ์ฉํ๋ ํํ์ ๋ถ์๊ธฐ(KoNLPY์ PyKomoran)๋ ์ด๋ฅผ ํ๊ตญ์ด์ ๊ฒฝ์ฐ ๊ณ ์ ๋ช ์ฌ(NNP), ์์ด์ ๊ฒฝ์ฐ ์ธ๊ตญ์ด(SL)๋ก ํ ํฐํํ๋ฏ๋ก title ๋ฐ์ดํฐ์ ํํ์ ์ค ์ด 2๊ฐ์ง๋ฅผ ์ ์ฅํ๋๋ก ํ์๋ค.
> ์ฌ์ฉ ์ฃผ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ : KoNLPY์ PyKomoran ํํ์ ๋ถ์๊ธฐ
Q. ํ ์คํธ ์ ์ฒ๋ฆฌ ๋ฐ ํ ํฐํ๋ฅผ ์ํด ์ด๋ค ํํ์ ๋ถ์๊ธฐ๋ฅผ ์ฌ์ฉํ ๊ฒ์ธ๊ฐ?
KoNLPY vs. SOYNLP ์ค ๊ณ ๋ฏผ์ ํ์๊ณ , ์ต์ข ์ ์ผ๋ก KoNLPY๋ฅผ ์ฌ์ฉํ์๋ค.
๊ทธ ์ด์ ๋ SOYNLP์ ๊ฐ์ ์ ์ ๊ธฐ์กด์ KoNLPY ํํ์ ๋ถ์๊ธฐ๋ ์ ์กฐ์ด๋ ํํ์ ๋ถ์๊ธฐ์ ๋ฑ๋ก๋์ง ์์ ๋จ์ด์ ๊ฒฝ์ฐ ์ ๋๋ก ๊ตฌ๋ถํ์ง ๋ชปํ๋ค๋ ์ ์ธ๋ฐ, ๊ฐ๋ฐ ๊ด๋ จ ๊ธ์์๋ ์ ์กฐ์ด์ ๋ฑ์ฅ ๋น๋๊ฐ ๊ทน์์์ด๊ณ , KoNLPY ํํ์ ๋ถ์๊ธฐ๋ ์ฌ์ฉ์ ์ฌ์ ์ ์ถ๊ฐํ์ฌ Customized KoNLPY ๊ตฌํ์ด ๊ฐ๋ฅํด ๋ฑ๋ก๋์ด ์์ง ์์ ๊ฐ๋ฐ ์ ๋ฌธ ์ฉ์ด์ ๋ํ ์ฌ์ฉ์ ์ฌ์ ์ ์ถ๊ฐํด ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
Q. ๊ทธ๋ ๋ค๋ฉด KoNLPY์ ์ด๋ค ํํ์ ๋ถ์๊ธฐ๋ฅผ ์ฌ์ฉํ ๊ฒ์ธ๊ฐ?
์ด Okt, Mecab, Komoran, Hannanum, Kkma 5๊ฐ์ง์ ํํ์ ๋ถ์๊ธฐ๋ฅผ ํ ์คํธํด๋ณด์๊ณ , ์ต์ข ์ ์ผ๋ก PyKomoran(Java๋ก ๊ฐ๋ฐ๋ ํํ์ ๋ถ์๊ธฐ์ธ Komoran์ Python์์๋ ์ฌ์ฉ๊ฐ๋ฅํ๋๋ก ๊ฐ๋ฐํ ๊ฒ)์ ์ฌ์ฉํ์๋ค.
ํํ์ ๋ถ์๊ธฐ ์ ํ์ ๊ณ ๋ คํ ์ํฉ์ ๋ค์๊ณผ ๊ฐ๋ค.
1) ๋ธ๋ก๊ทธ ๊ธ์ด๊ธฐ ๋๋ฌธ์ ๋์ด์ฐ๊ธฐ๊ฐ ์ ๋์ด ์์
2) ๊ฐ๋ฐํ๊ฒฝ์ Python
3) ๊ฐ๋ฐ ๊ด๋ จ ์ ๋ฌธ ์ฉ์ด(ex. ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ)๋ฅผ ํ๋์ ๊ณ ์ ๋ช ์ฌ๋ก ์ธ์ํด์ผ ํจ
Komoran์ ๋ค์๊ณผ ๊ฐ์ ์ฅ์ ๋ค์ ๋ฐํ์ผ๋ก ํ์ฌ ๊ฐ๋ฐ ์ํฉ์ ๊ฐ์ฅ ์ ํฉํ๋ค๊ณ ํ๋จํด ์ ํํ๊ฒ ๋์๋ค.
1) ์ฌ๋ฌ ์ด์ ์ ํ๋์ ํ์ฌ๋ก ๋ถ์ ๊ฐ๋ฅํจ์ผ๋ก์จ ํํ์ ๋ถ์๊ธฐ์ ์ ์ฉ ๋ถ์ผ์ ๋ฐ๋ผ ๊ณต๋ฐฑ์ด ํฌํจ๋ ๊ณ ์ ๋ช ์ฌ(์ํ ์ ๋ชฉ, ์์์ ๋ช , ๋ ธ๋ ์ ๋ชฉ, ์ ๋ฌธ ์ฉ์ด ๋ฑ)๋ฅผ ๋ ์ ํํ๊ฒ ๋ถ์ํ ์ ์๋ค. → ๊ฐ์ฅ ์ค์ํ ํน์ง!
2) ๊ฐ๋ฐ์๊ฐ ์ง์์ ์ผ๋ก ์ ๋ฐ์ดํธ
3) Komoran๋ง ์ ์ผํ๊ฒ ์์๊ฐ ๋ถ๋ฆฌ๋ ๋ฌธ์ฅ์ด๋ ์คํ์์ ๋ํด์๋ ๊ด์ฐฎ์ ๋ถ์ ํ์ง์ ๋ณด์ฌ์ค๋ค.
4) ํ๊ณ์ ๋ค๋ฅธ ํํ์ ๋ถ์๊ธฐ์ ๋นํด ๋ก๋ฉ์๊ฐ์ด ๊ธธ๋ค. ํ์ง๋ง ๋ถ์์๋๋ ๋น ๋ฅด๋ค.
5) ๋์ด์ฐ๊ธฐ ์๋ ๋ฌธ์ฅ ๋ถ์์ ์ทจ์ฝํํธ์ด์ง๋ง, ํ๋ก์ ํธ์์ ์ฌ์ฉํ ๋ฐ์ดํฐ๋ ๋ธ๋ก๊ทธ ์ ๋ชฉ ๋ฐ์ดํฐ์ด๋ฏ๋ก ๋์ด์ฐ๊ธฐ๊ฐ ์ ๋์ด ์์ด ๊ด์ฐฎ๋ค.
Q. Komoran์ STABLE vs. EXP ๋ชจ๋ธ ์ค ์ด๋ค ๊ฒ์ ์ฌ์ฉํ ๊ฒ์ธ๊ฐ?
EXP ๋ชจ๋ธ์ STABLE ๋ชจ๋ธ ํ์ต์ ์ฌ์ฉํ ๋ฐ์ดํฐ์ ์ถ๊ฐ๋ก Wikipedia ์ ๋ฌธ์ ์ ๋ชฉ๋ค์ ํ์ตํ ๋ชจ๋ธ์ด๋ค.
EXP ๋ชจ๋ธ์ ๊ฒฝ์ฐ ๋ด์ค ๋ถ๋ฅ, SNS ๋ฐ์ดํฐ ๋ถ์ ๋ฑ๊ณผ ๊ฐ์ด ์ ์กฐ์ด ๋ฐ ๊ณ ์ ๋ช ์ฌ ๋ฑ์ด ์ค์ํ ์์ง๋ก ์ฌ์ฉ๋๋ ํ์ํ ๋ถ์ผ์์ ์ฌ์ฉํ ์ ์๋ค.
์๋์ ๊ฐ์ด ํ ์คํธ ํด ๋ณธ ๊ฒฐ๊ณผ EXP ๋ชจ๋ธ์ ๋ถ์ ๊ฒฐ๊ณผ๊ฐ ๋ ์๋ง์ EXP ๋ชจ๋ธ์ ์ฌ์ฉํ์๋ค.
์๋ณธ ๋ฐ์ดํฐ: ์ฐฝ์์ ์จ๋ฐ ์ผ์ด๊ฐ ๋งํ๋, ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๋ณธ์ง # STABLE ๋ชจ๋ธ ์ฌ์ฉ ๊ฒฐ๊ณผ ๋ช ์ฌ ์ถ์ถ: ['์ฐฝ์์', '์จ๋ฐ', '์ผ์ด', '๋ง', '๊ฐ์ฒด', '์งํฅ', 'ํ๋ก๊ทธ๋๋ฐ', '๋ณธ์ง'] # EXP ๋ชจ๋ธ ์ฌ์ฉ ๊ฒฐ๊ณผ ๋ช ์ฌ ์ถ์ถ: ['์ฐฝ์์', '์จ๋ฐ ์ผ์ด', '๋ง', '๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ', '๋ณธ์ง']
์ฐธ๊ณ )
https://velog.io/@metterian/ํ๊ตญ์ด-ํํ์-๋ถ์๊ธฐPOS-๋ถ์-3ํธ.-ํํ์-๋ถ์๊ธฐ-๋น๊ต
2-2. ํํ์ ํ ํฐํ ์ฑ๋ฅ ํฅ์ ์ํค๊ธฐ
[1] ์ฌ์ฉ์ ์ฌ์ ์ฌ์ฉํ๊ธฐ (PyKomoran ํํ์ ๋ถ์๊ธฐ์ ๊ธฐ๋ฅ์)
๋ฌธ์ฅ ๋ด์ ์ฌ์ฉ์ ์ฌ์ ์ ํฌํจ๋ ๋จ์ด๊ฐ ์ถํํ๋ฉด ์ฌ์ฉ์ ์ฌ์ ์ ์ ์๋ ํ์ฌ๋ฅผ ์ฐ์ ์ ์ผ๋ก ๊ฐ๊ฒ๋๋ค.
์์)
# ์ฌ์ฉ์ ์ฌ์ ์ถ๊ฐ ์ ์๋ณธ ๋ฐ์ดํฐ: ์๋ผ์คํฑ ์์น๋ ๊ฑฐ๋ํ ์ฝ๋ผ๋ฆฌ ๊ฐ์ ์กด์ฌ๋ค. EXP ๊ฒฐ๊ณผ ์ธ๊ตญ์ด ์ถ์ถ: ['์๋ผ', '์คํฑ', '์์น'] # ์ฌ์ฉ์ ์ฌ์ ์ถ๊ฐ ํ (์๋ผ์คํฑ ์์น : ๊ณ ์ ๋ช ์ฌ) ์๋ณธ ๋ฐ์ดํฐ: ์๋ผ์คํฑ ์์น๋ ๊ฑฐ๋ํ ์ฝ๋ผ๋ฆฌ ๊ฐ์ ์กด์ฌ๋ค. EXP ๊ฒฐ๊ณผ ์ธ๊ตญ์ด ์ถ์ถ: ['์๋ผ์คํฑ ์์น']
์ฐธ๊ณ )
https://komorandocs.readthedocs.io/ko/latest/manual/manual.html
[2] SL ํ์ฌ ํ๊น ๋ ์์ด ๋จ์ด ๋ฆฌ์คํธ๋ฅผ ๋์์ผ๋ก NLTK ์ ์ฉํด ๋ถ์ฉ์ด ์ ๊ฑฐ
๋ถ์ฉ์ด ์ ๊ฑฐ ์ ์ ์ํฉ์ to, from๊ณผ ๊ฐ์ด ์๋ฏธ์์ ์๋จ์ด๊ฐ ํํ์ ํ ํฐํ ๊ฒฐ๊ณผ๋ก ๊ฐ์ด ์ ์ฅ๋์๋ค. ์๋ฏธ์๋ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋ ์ํ๋ก ๋ชจ๋ธ ํ์ต์ ์ํจ๋ค๋ฉด ์ฑ๋ฅ์ ์ํฅ์ ๋ผ์น ๊ฒ์ด๋ผ ์๊ฐํด ์ด๋ฌํ ์๋ฏธ์์ ์๋จ์ด๋ฅผ ์ ๊ฑฐํ์๋ค.
nltk ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ถ์ฉ์ด(stopword) ๋ฆฌ์คํธ์ ๊ธฐ๋ณธ์ผ๋ก ๋จ์ด๋ค์ด ๋ฑ๋ก๋์ด ์์ด ์ด๋ฅผ ์ฌ์ฉํ์๋ค.
์ฌ์ฉ ์์)
import nltk nltk.download('stopwords') from nltk.corpus import stopwords text = "RxJava to Coroutine, ๋คํธ์ํฌ ์ฒ๋ฆฌ์ ์ฝ๋ฃจํด์ ์ ์ฉํ๋๋?!" #์๋ณธ ๋ฐ์ดํฐ en_words = komoran.get_morphes_by_tags( data, tag_list=["SL"] ) # ์ธ๊ตญ์ด ํํ์๋ง ์ถ์ถ stop_words = set(stopwords.words("english")) #์์ด ๋ถ์ฉ์ด ๋ฆฌ์คํธ result = [] for w in en_words: if w not in stop_words: #๋ถ์ฉ์ด ๋ฆฌ์คํธ์ ์กด์ฌํ์ง ์๋ ์๋จ์ด๋ง result์ ์ ์ฅ result.append(w) print(en_words) print(result) # ์ถ๋ ฅ ๊ฒฐ๊ณผ ['RxJava', 'to', 'Coroutine'] #๋ถ์ฉ์ด ์ ๊ฑฐ ์ ['RxJava', 'Coroutine'] #๋ถ์ฉ์ด ์ ๊ฑฐ ํ
[3] ์๋จ์ด์ ๋ํด ์๋ฌธ์๋ก ๋ณํ, ๊ธธ์ด๊ฐ ์งง์(1~2๋ฌธ์) ๋จ์ด ์ ๊ฑฐ
์์ด๊ถ ์ธ์ด์์ ๋, ์๋ฌธ์๋ฅผ ํตํฉํ๋ ๊ฒ์ ๋จ์ด์ ๊ฐ์๋ฅผ ์ค์ผ ์ ์๋ ์ ๊ทํ ๋ฐฉ๋ฒ ์ค ํ๋์ด๋ค.
์ฐธ๊ณ )
๐ 3. FastText ํ ์คํธ ๋ถ๋ฅ๊ธฐ ๋ชจ๋ธ ํ์ต
Q. FastText ํ ์คํธ ๋ถ๋ฅ๊ธฐ๋ฅผ ์ฌ์ฉํ ์ด์ ?
๋ฆฌ์์น๋ฅผ ํตํด ์ฐพ์๋ธ [๋น๊ทผ๋ง์ผ]๊ธ์ฐ๊ธฐ ํ๋ฉด์์ ์นดํ ๊ณ ๋ฆฌ ์๋ ์ถ์ฒํ๋ ๋ชจ๋ธ ๋ง๋ค๊ธฐ ๊ธ์์ FastText๋ฅผ ์ฒ์ ์ ํ์๊ณ , ๊ณต์๋ฌธ์๋ฅผ ์ฐพ์๋ณด๋ ๋ฐ์ดํฐ๋ง ์์ผ๋ฉด ๋น ๋ฅด๊ฒ ์ง๋ ํ์ต์ผ๋ก ์นดํ ๊ณ ๋ฆฌ ๋ถ๋ฅ ๋ชจ๋ธ์ ๋ง๋ค์ด๋ผ ์ ์์ด ์ฌ์ฉํ์๋ค.
๋จ๊ณ1 - ๋ฐ์ดํฐ ์ค๋น
__label__{category}\\t{ํ ์คํธ ์ ์ฒ๋ฆฌ ๊ฑฐ์น ๋ฐ์ดํฐ}
์์ ๊ฐ์ ํ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง txt ํ์ผ์ ์ค๋นํ๋ค.
FastText์์ ์ ๊ณตํ๋ ์นดํ ๊ณ ๋ฆฌ ๋ถ๋ฅ ๋ชจ๋ธ ํ์ต์ ์ํ ํ์ ๋ฐ์ดํฐ ํ์์ด๋ค.
๋จ๊ณ2 - ๋ฐ์ดํฐ ๋ถ๋ฆฌ
train_test_split ๋ฐฉ์์ ์ฌ์ฉํ๋ค. ํ์ต์ฉ ๋ฐ์ดํฐ(train)์ ํ ์คํธ์ฉ ๋ฐ์ดํฐ(test)๋ฅผ 8:2 ๋ก ๋ถ๋ฆฌํ์๋ค.
ํด๋น ๋ฐฉ์์ ์ฌ์ฉํ๊ธฐ ์ํด ๊ธฐ์กด์ ์นดํ ๊ณ ๋ฆฌ๋ณ๋ก ์์๋๋ก ์ ์ฅ๋์ด ์๋ txt ํ์ผ์ shuffle ํ์๋ค.
๋จ๊ณ3 - ๋ชจ๋ธ ์ง๋ ํ์ต
https://fasttext.cc/docs/en/supervised-tutorial.html → ๊ณต์๋ฌธ์์ ๋์์๋ ์์๋๋ก ์งํํ์๋ค.
train_supervised()์ ์ธ์๋ก learning rate, wordNgrams๋ ์ฃผ์ง ์๋๊ฒ ํ ์คํธ ๋ฐ์ดํฐ๋ก ์ธก์ ํ ๊ฒฐ๊ณผ ์ฑ๋ฅ์ด ๋ ๋์๊ณ , epoch=25๋ก ์ค์ ํ์๋ค.
๋จ๊ณ4 - ๋ชจ๋ธ ์ ํ๋ ์ธก์
์์ ๋ถ๋ฆฌํ ํ ์คํธ์ฉ ๋ฐ์ดํฐ๋ก ๋ชจ๋ธ์ ์ ํ๋๋ฅผ ์ธก์ ํ์๋ค.
10271๊ฐ์ ๋ฐ์ดํฐ๋ก ํ์ต์ํจ ๊ฒฐ๊ณผ ์ ํ๋๊ฐ 92.3%๊ฐ ๋์๋ค.
๐ 4. Django์ Docker & AWS EC2๋ฅผ ์ฌ์ฉํด ์์ฑํ ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ ๋ฐฐํฌ ๋ฐ APIํ
์นดํ ๊ณ ๋ฆฌ ๋ถ๋ฅ๊ฐ ์๋น์ค์ ํต์ฌ ๊ธฐ๋ฅ์ด์๊ณ , ๋ฐฑ์๋ ์๋ฒ์์ ํต์ ํ ์คํธ๋ ์ํํด์ผ ํ๊ธฐ์ ๋น ๋ฅด๊ฒ ๋ชจ๋ธ์ ๋ฐฐํฌํ๊ณ APIํ ํด์ผ ํด์ ๋์๊ฒ ์ต์ํ Django REST Framework, Docker, AWS EC2๋ฅผ ์ฌ์ฉํ์๋ค.
github์์ ๊ตฌํ ์ฝ๋ ํ์ธํ๊ธฐ ๐ป
์ฒ์์ ํ๋ฆฌํฐ์ด์์ ๊ณต์ง๋ก ์ ๊ณตํด์ฃผ๋ AWS EC2์ Ubuntu 18.04 t2.small์ ์ฌ์ฉํ์๋๋ฐ, CPU ์ฉ๋ ๋๋ฌธ์ pip install๋ก ํ์ํ ํ์ด์ฌ ๋ชจ๋์ ๋ค์ด๋ก๋ํ ๋ fasttext ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ค์ด๋ก๋๊ฐ ์๋ฃ๋์ง ์๊ณ ๊ณ์ ๋ฉ์ถ์๋ค. ๋ด ๋ก์ปฌ ์ปดํจํฐ์์๋ ์ ์์ ์ผ๋ก ์คํ๋๋ ๊ฒ์ผ๋ก ๋ณด์ t2.small์ Ubuntu ์๋ฒ ์ฌ์ฉ ๊ฐ๋ฅ ์์์ ์ด๊ณผํ๊ธฐ ๋๋ฌธ์ด๋ผ๋ ๊ฒ์ ์ฐพ์๋๋ค. (AWS์ EC2 CPU ๋ชจ๋ํฐ๋ง์์๋ CPU ์ฌ์ฉ๋์ด 100์ด์๋ค. ๋ฉ์ถ ์ ๋ฐ์ ์์๋ค.)
์ต๋ํ ๋ฌด๋ฃ ๋ฒ์ ์ ์ฌ์ฉํ๊ณ ์ถ์์ง๋ง, CPU ์ฉ๋ ๋ฌธ์ ์์ ์๊ฒ ๋์ด t2.small ๋์ AWS EC2์ t2.micro ์๋ฒ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ฒ์ ํด๊ฒฐํ์๋ค.
๋จธ์ ๋ฌ๋ ๋ชจ๋ธ ๋ฐฐํฌ์๋ ์๋์ ์ฐธ๊ณ ๋ด์ฉ๊ณผ ๊ฐ์ด ๋ค์ํ ๋ฐฉ๋ฒ์ด ์๋ค. ์ถํ์ ์๋ก์ด ๋ฐฐํฌ ๋ฐฉ์์ ์ ์ฉํด ๊ฐ์ ํด๋ณด๊ณ ์ถ๋ค.
์ฐธ๊ณ )
๋จธ์ ๋ฌ๋ ๋ชจ๋ธ์ ๋ฐฐํฌํ๋ 5๊ฐ์ง ๋ฐฉ๋ฒ์ ๋ํ ์ข์ ๊ธ๐ - EC2 ์ธ์คํด์ค, AWS Lambda function, EKS(Kubernetes), AWS ECS, Sagemaker
https://medium.com/hackernoon/auto-generating-tags-for-content-using-amazon-sagemaker-blazingtext-with-fasttext-335c38429de0 - Amazon SageMaker & Fasttext ๋ฐฐํฌ ๊ด๋ จ
https://brunch.co.kr/@chris-song/91#comment - AWS Lambda & API Gateway
๐ [์ถ๊ฐ] ํฌ๋กค๋งํ ๋ฐ์ดํฐ๋ฅผ MySQL ๋์ csv ํ์ผ์ ์ ์ฅํ๊ธฐ
๊ธฐ์กด์๋ MySQL์ ์ ์ฅ๋๋๋ก ํ์๋๋ฐ, ๋ฐ์ดํฐ ๋ถ์ ์ csv ํ์ผ์ด ๋ ์ ์ฉํ๊ฒ ์ฐ์ด๊ธฐ ๋๋ฌธ์ csv ํ์ผ์ ์ ์ฅํ๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์๋ค.
ํฌ๋กค๋งํ ๋ฐ์ดํฐ๋ [(url, title, description, category), ...] ํํ์ธ ์ธ๋ถ๋ list, ๋ด๋ถ๋ tuple๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
์์ ๊ฐ์ ๋ฐ์ดํฐ ํํ๋ฅผ ์ฌ์ฉํด csv ํ์ผ์ ๋ฐ๋ก ์ ์ฅ๋๋๋ก ๊ตฌ์ฑํ์๋ค.
์์ ์ฝ๋)
def save_to_csv( file_name, column, data ): # file_name: string, columns: list, data: [(), (), ..] list(tuple) with open(file_name, mode="w", newline="", encoding="utf-8") as out: csv_out = csv.writer(out) csv_out.writerow(column) for row in data: csv_out.writerow(row)
์ฐธ๊ณ )
https://stackoverflow.com/questions/15578331/save-list-of-ordered-tuples-as-csv/15578485
๐ ์ฐธ๊ณ
[๋ฒ์ญ] ๋จธ์ ๋ฌ๋์ ํ์ฉํ ์ ํ ์นดํ ๊ณ ๋ฆฌ ๋ถ๋ฅํ๊ธฐ
๋ฐ์ด๋ธ - [๊ฐ๋ฐ] ์ฝํ ์ธ ์นดํ ๊ณ ๋ฆฌ ๋ถ๋ฅ๊ธฐ ๊ฐ๋ฐ ๋ด์ฉ๊ณผ ๋ฐ๋ชจ๋ฅผ ์ ๊ณตํฉ๋๋ค
๋จธ์ ๋ฌ๋ ๋ชจ๋ธ APIํ - ์ํ ์นดํ ๊ณ ๋ฆฌ ๋ถ๋ฅ๊ธฐ
[๋น๊ทผ๋ง์ผ]๊ธ์ฐ๊ธฐ ํ๋ฉด์์ ์นดํ ๊ณ ๋ฆฌ ์๋ ์ถ์ฒํ๋ ๋ชจ๋ธ ๋ง๋ค๊ธฐ → title๋ง ๊ฐ์ง๊ณ ๋ ์ฑ๋ฅ์ด ์ข์ title๋ก๋ง ๋ถ๋ฅ ๋ชจ๋ธ ํ์ต์ํจ ์ฌ๋ก, ์นดํ ๊ณ ๋ฆฌ ์ถ์ฒ ๋ชจ๋ธ๋ก FastText ์ฌ์ฉ
์ํค๋ถ์ค - ๋ฅ ๋ฌ๋์ ์ด์ฉํ ์์ฐ์ด ์ฒ๋ฆฌ ์ ๋ฌธ → ๊ฐ์ฅ ๋์์ด ๋ง์ด ๋ ์ฑ
'Project > DEVOOK' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐ์ดํฐ ์ ๊ฒ ๋ฐ ํ์ (0) 2022.02.08 ๋จธ์ ๋ฌ๋, ์์ฐ์ด ์ฒ๋ฆฌ, ๋ฐ์ดํฐ ๋ถ์ ๊ด๋ จ ๊ฐ๋ ์ ๋ฆฌ (0) 2022.02.08 ํฌ๋กค๋งํ ๋ฐ์ดํฐ๋ฅผ MySQL Docker ์ปจํ ์ด๋์ ์ ์ฅํ๊ธฐ (0) 2022.01.31 Selenium์ ์ฌ์ฉํ ๋์ ํ์ด์ง ํฌ๋กค๋ฌ ๊ตฌํ (0) 2022.01.31 Azure ํต์ฌ ๋ฌธ๊ตฌ ์ถ์ถ ์๋น์ค๋ฅผ ์ฌ์ฉํ ํค์๋ ์ถ์ถ ํ ์คํธ (0) 2022.01.29