๋น๊ณ : ๊ธฐ์
ํ์
ํ๋ก์ ํธ
1. ํ๋ก์ ํธ ์ ๋ชฉ
2. ํ๋ก์ ํธ ๊ฐ์
3-1. ํ๋ก์ ํธ ๋ฐฉ๋ฒ๋ก - ํ๊น
๋ชจ๋ธ
3-2. ํ๋ก์ ํธ ๋ฐฉ๋ฒ๋ก - ์ถ์ฒ๋ชจ๋ธ
4-1. ํ๋ก์ ํธ ๊ฒฐ๊ณผ ๋ฐ ๋ณด์ - ํ๊น
๋ชจ๋ธ
4-2. ํ๋ก์ ํธ ๊ฒฐ๊ณผ ๋ฐ ๋ณด์์ - ์ถ์ฒ๋ชจ๋ธ
5. ํ๊ณ
6. Next step after lesson learned
- ๊ฐ์งํธ
- ์ด๋จ์ค
- 2021.12.27 - 2022.01.19 (4์ฃผ)
- ๋ํ๋ฏผ๊ตญ์๋ ์๋ง์ ์ ์ฑ ์ด ์์์๋, ์ ์ฑ ๋์์๋ค์ ํด๋น ์ ์ฑ ์ ์กด์ฌ๋ฅผ ์์ง ๋ชปํ๊ณ , ๊ธฐ๊ด์ ์ฅ์์๋ ์ ์ฑ ๋์์๋ฅผ ์ ๋ณํ์ฌ ํ๋ณดํ๋ ๊ณผ์ ์ด ๋ฒ๊ฑฐ๋กญ๋ค.
- ๋ํ๋ฏผ๊ตญ ์ ์ฑ /์ฌ์ ๊ณต๊ณ ๋ฌธ context์์ ์ ์ฑ ์ ํน์ฑ์ ์๋์ผ๋ก ์ถ์ถํ๊ณ , ๊ฐ์ธ์ ํ๋กํ์ ๊ธฐ๋ฐ์ผ๋ก ์ ์ฑ ์ ์ถ์ฒํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋ง๋ ๋ค.
-
์ฐ๋ก๋ก๋ถํฐ ์ ๊ณต๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํจ.
-
USER (2๋ง๊ฐ)
์ฑ๋ณ, ๋์ด, ๊ฑฐ์ฃผ์ง์ญ(์๋, ์๊ตฐ๊ตฌ), ๊ด์ฌ์ง์ญ(์๋, ์๊ตฐ๊ตฌ), ํ๋ ฅ, ์ง์ฅ, ๊ฐ๊ตฌ์ ์ ํ, ๊ฒฐํผ, ์๋ , ์๋ ์, ์๋ ์ ๋ณด, ํน์์ํฉ, ๊ด์ฌ์ํฉํน์ฑ, ์ฅ์ ์ํฉ, ๋ณดํ๋์ ์ํฉ, ์์ ์ํฉ, ์๋ ์ ๋ณด, ๊ด์ฌ ์ ์ฑ
-
POLICY (8.8๋ง๊ฐ)
์ ์ฑ ID, ์ ์ฑ ์๋น์คID, ์๋น์ค๋ช , ์๊ด๊ธฐ๊ด, ์๊ด๊ธฐ๊ด์ ํ, ์์ ์ฃผ๊ธฐ, ์ ์ฒญ์ ์ฐจ, ์ ์ ๊ธฐ์ค, ์ง์์ ํ, ์๋น์ค๋ชฉ์ , ์ง์๋ด์ฉ, ์ง์๋์
-
user์์ ์ถ์ถํ ํ๊ทธ feature (13๊ฐ)
: ์ฑ๋ณ, ๋์ด, ์๋, ์๊ตฐ๊ตฌ, ํ๋ ฅ, ์ง์ฅ, ๊ฐ๊ตฌ์ ์ ํ, ๊ฒฐํผ, ์๋ , ์๋ ์์ธ, ๋์ํน์ฑ, ๊ด์ฌ์ํฉํน์ฑ, ์ค์์๋, ๊ด์ฌ์ ์ฑ -
policy์์ ์ถ์ถํ ํ๊ทธ feature (20๊ฐ)
: ์ ์ฑ ID, ์ ์ฑ ์๋น์คID, ์๋น์ค๋ช , ์๊ด๊ธฐ๊ด, ์๊ด๊ธฐ๊ด์ ํ, ์์ ์ฃผ๊ธฐ, ์ ์ฒญ์ ์ฐจ, ์ ์ ๊ธฐ์ค, ์ง์์ ํ, ์๋น์ค๋ชฉ์ , ์ง์๋ด์ฉ, ์ง์๋์
A. ํค์๋ ๊ธฐ๋ฐ label ์์ฑ (filtering_smilarity_code.ipynb)
-
๋ฐฉ๋ฒ
- feature๋ณ๋ก ์นดํ ๊ณ ๋ฆฌ์ class๋ฅผ ๋ํํ๋ ํค์๋๋ฅผ ์ค์
- context์ ํด๋น ํค์๋๊ฐ n๊ฐ ์ด์์ผ ๊ฒฝ์ฐ class ์ถ์ถ
# example if sum(text.count(x) for x in ['์์ ', '์์ฐ๋ถ', '์ถ์ฐ']) >= 3: text_tag.append('์ฌ์ฑ')
-
๋ฐฉ๋ฒ๋ก ์ ์ ์ด์
- ์ ๊ฒฝ๋ง ๋ชจ๋ธ ํ์ต์ ํ์ํ label๊ฐ์ด ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ ๋จผ์ ๋ผ๋ฒจ์ ์์ฑํด์ฃผ์ด์ผ ํจ.
- ์ ์ฑ
๋๋ฉ์ธ์ ๋ง๋ ํค์๋์ ํจ๊ป ๊ฐ์ฒด๋ช
์ธ์๊ธฐ๋ฅผ ์ง์ ๋ง๋ค๋ ค๊ณ ํ์ผ๋, ์กด์ฌํ๋ ๊ฐ์ฒด๋ช
์ธ์๊ธฐ๋ฅผ ํ์ฉํ๋ ๊ฒ์ด ์๋๋ผ ์ง์ ๋ง๋๋ ๊ฒ์ ์๋นํ ์ด๋ ค์ด ์ผ.
ํ๋ก์ ํธ์ ๋ชฉ์ ์ context ์ ํ๊น ์ถ์ถ๊ณผ ์ถ์ฒ ๋ชจ๋ธ ๊ตฌ์ถ์ด๊ธฐ ๋๋ฌธ์ for๋ฌธ๊ณผ if๋ฌธ์ผ๋ก ํ๊ทธ ์ถ์ถํ์ฌ label์ ์์ฑํจ. - ๋ฒ ์ด์ค๋ผ์ธ ๋ชจ๋ธ๋ก์ ์ฌ์ฉ๋ ์ ์์.
B. ์ถ์ถ๋ label ๊ธฐ๋ฐ KoBERT ํ์ต (Pytorch) (KoBERT_tagging_model.ipynb)
-
๋ฐฉ๋ฒ
-
์ถ์ถํ๊ณ ์ ํ๋ ํ๊น ๊ฐ๊ณผ ๊ด๋ จ๋ ํค์๋๋ฅผ ํด๋น ๊ฐ์ผ๋ก ๋ฐ๊ฟ.
# example word = ['์์ ', '์์ฐ๋ถ', '์ถ์ฐ'] tag = '์ฌ์ฑ' df['์ฑ๋ณ'].apply(lambda x: re.sub(word, tag, x)) # ๊ฒฐ๊ณผ # ์ฑ๋ณ feature์context๊ฐ '์์ฐ๋ถ๋ฅผ ์ํ ์น๋ฃ๋น ์ง์ ์ ์ฑ '์ผ ๊ฒฝ์ฐ, # => '์ฌ์ฑ๋ฅผ ์ํ ์น๋ฃ๋น ์ง์ ์ ์ฑ '๋ก ๋ณ๊ฒฝ๋จ
-
A์์ ์ถ์ถํ ๊ฒฐ๊ณผ๊ฐ์ ๋ชจ๋ธ์ label๋ก ์ฃผ๊ณ , KoBERT ์ฌ์ฉํ์ฌ feature๋ณ๋ก ํ์ต.
Bert Tokenizer๋ก ํ ํฐํ ํ CrossEntropyLoss๋ฅผ ์ต์ํํ๋ฉฐ ํ์ต
-
-
๋ฐฉ๋ฒ๋ก ์ ์ ์ด์
- ์ ์ฑ ํ ์คํธ์ ๊ธธ์ด๊ฐ ๊ธธ๊ณ , ๋ณต์กํ๊ธฐ ๋๋ฌธ์ ์๋ฐฉํฅ ํ์ต์ด ๊ฐ๋ฅํด์ผํ๋ฉฐ, ๋ฐ์ดํฐ๊ฐ ํฌ๊ธฐ ๋๋ฌธ์ ๋ณ๋ ฌ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ KoBERT ๋ชจ๋ธ์ ์ ํ.
- KoBERT๋ ํ๊ตญ์ด ํ์ต์ด ์งํ๋ ๋ชจ๋ธ์ด๋ฏ๋ก ๊ธฐ์กด BERT์ ์ฌ์ ํ์ต๋ bert-base-multilingual-cased ๋ณด๋ค ์ฑ๋ฅ์ด ์ข์ ๊ฒ์ผ๋ก ์์.
- context์์ ํค์๋๋ฅผ ๋ณํํจ์ผ๋ก์จ ์ ํ๋๋ฅผ ๋์ผ ์ ์์ ๊ฒ์ด๋ผ ์์ํจ
A. ์ ์ฌ๋ ๊ธฐ๋ฐ ์ถ์ฒ {filteirng_similarity_code.ipynb)
-
๋ฐฉ๋ฒ
- USER ๋ฐ์ดํฐ์ ๊ณผ POLICY ๋ฐ์ดํฐ์ ์ ๊ณตํต๋ feature ์ถ์ถ.
- ๋ชจ๋ feature๋ฅผ One-Hot์ผ๋ก ๋ง๋ค์ด์ np.array(USER * feature) X np.array(feature * POLICY) ๋ฅผ ์งํํ์ฌ ์ต๊ณ ์ ์์ ์ ์ฑ
์ ์ถ์ฒ.
-
๋ฐฉ๋ฒ๋ก ์ ์ ์ด์
- ์ ์ฑ ์ ๊ฐฏ์๊ฐ ๋งค์ฐ ๋ง๊ธฐ ๋๋ฌธ์ 1์ฐจ์ ์ผ๋ก basicํ ์ ์ฌ๋ ๋ชจ๋ธ์ ํตํด ๊ณ ๊ฐ์ด ๊ด์ฌ์ ๊ฐ์ง๋งํ ์ ์ฑ ์ ์ ๋ณํ๊ธฐ ์ํจ.
- CF๋ CB๋ฅผ ์ฌ์ฉํ๊ธฐ์๋ ์ ์ ๊ฐ ๊ฒฝํํ ์ ์ฑ ์ ์ฌ๋ถ๋ฅผ ์ ์ ์์.
- ํผ์ฒ๋ณ๋ก ๊ฐ์ค์น๋ฅผ ๋ค๋ฅด๊ฒ ์ค ์ ์์.
B. Wide & Depp ๊ธฐ๋ฐ ์ถ์ฒ {filteirng_similarity_code.ipynb)
-
๋ฐฉ๋ฒ
-
label: ์ ์ ๊ฐ ์ ํธํ๋ ์ ์ฑ (์ค๋ณต๊ฐ๋ฅ 11๊ฐ)๊ณผ ์ ์ ํ๊ทธ๊ฐ ์ ์ฑ ๋ฐ์ดํฐ ํน์ฑ๊ณผ์ ์ผ์น์ฌ๋ถ์ ๋ฐ๋ผ 1,0์ผ๋ก ๋ถ์ฌ.
- ์ ์ ์ ์ ์ฑ ๋ฐ์ดํฐ์ ์ '์ ํธ์ ์ฑ '์ One Hot Encoding ํ์ฌ ์ ์ฑ ๋ฐ์ดํฐ๊ฐ ์ ์ ์ ํธ์ ์ฑ (์ค๋ณต ์ ํ ์ค) ํ๊ฐ๋ผ๋ ํฌํจ๋ ๊ฒฝ์ฐ.
- ์ ์ ์ ์ ์ฑ ๋ฐ์ดํฐ์ ์ ์ค์ํ๊ทธ(๋์ํน์ฑ, ์ง์ฅ, ๊ฐ๊ตฌ์ ๋ฑ)๊ฐ ๋ชจ๋ ๋ถํฉํ ๊ฒฝ์ฐ.
- ์ ๋๊ฐ์ง ์กฐ๊ฑด(๊ด์ฌ์ ์ฑ & ์ค์ํ๊ทธ) ์ผ์น ์ฌ๋ถ์ ๋ฐ๋ผ ๋ผ๋ฒจ 1 ๋๋ 0์ผ๋ก ๋ถ์ฌ.
-
train
- wide part(w/ cross product transformation) & deep part input ์งํ ๋ฐ ํ์ต.
-
recommendation
- ํน์ ์ ์ ์ ํน์ฑ๊ณผ ์ ์ฒด ์ ์ฑ ์ ํน์ฑ ์กฐํฉ์ ๋ํ label์ ์์ธก.
- ๊ฐ์ฅ ๋์ ์ ์์ ์ ์ฑ 5๊ฐ ~10๊ฐ ์ถ์ฒ ์งํ.
-
์ ์ ์ํ๋ก ํ ์คํธ ํ True์ ๋ํ f1-score๊ฐ ๋งค์ฐ ๋ฎ๊ฒ ๋์์ ํ์ ํน์ฑ์ ์ถ๊ฐํ๊ณ ํด๋ฌ์คํฐ๋ง ํ ๊ตฐ์ง ๋ณ ํ๋ณธ์ถ์ถ๋ก ํ์ต์ ์งํํ๋ค.
-
before
""" _x: ์ ์ ๋ฐ์ดํฐ ํน์ฑ _y: ์ ์ฑ ๋ฐ์ดํฐ ํน์ฑ ๋ ๊ฐ์ง๊ฐ ๋ชจ๋ 1์ด ๋๋ ๊ฒฝ์ฐ๋ฅผ ๊ธฐ์ตํ๊ธฐ ์ํ crossed_cols ์ค์ """ # wide part ํน์ฑ wide_cols = ['์ฑ๋ณ_x', '์๋ _x', 'mb_10+๋์ํน์ฑ', 'mb_11+๊ด์ฌ์ํฉํน์ฑ','๋์ํน์ฑ', '๋์ํน์ฑ์์ธ', '์๊ด๊ธฐ๊ด์ ํ', '์ง์์ ํ', '์ง์์ ํ์์ธ', '์ ์ฒญ์ ์ฐจ', '์ฑ๋ณ_y','์๋ _y'] # wide part์ cross layer ์ค์ crossed_cols = (['์ฑ๋ณ_x', '์ฑ๋ณ_y'], ['์๋ _x', '์๋ _y'], ['mb_10+๋์ํน์ฑ','๋์ํน์ฑ']) # deep part ํน์ฑ embedding_cols = ['์ฑ๋ณ_x', '์๋ _x', 'mb_10+๋์ํน์ฑ', 'mb_11+๊ด์ฌ์ํฉํน์ฑ','๋์ํน์ฑ', '๋์ํน์ฑ์์ธ', '์๊ด๊ธฐ๊ด์ ํ', '์ง์์ ํ', '์ง์์ ํ์์ธ', '์ ์ฒญ์ ์ฐจ', '์ฑ๋ณ_y','์๋ _y'] cont_cols = ['๋์ด','๋์์ฐ๋ น์์','๋์์ฐ๋ น๋']
# ์์ธก ๊ฒฐ๊ณผ precision recall f1-score support False 0.93 0.76 0.84 17132 True 0.32 0.67 0.43 2868 accuracy 0.75 20000 macro avg 0.63 0.72 0.64 20000 weighted avg 0.84 0.75 0.78 20000
-
after
# wide part ํน์ฑ wide_cols = [ '์ฑ๋ณ_x', 'ํ๋ ฅ_x', '์ง์ฅ_x', '๊ฒฐํผ_x', ' ๋์ถ์์ฐ์ธ', 'ํด๋น์ฌํญ์์_x', '์๋_x', 'ํ๋ถ๋ชจ๊ฐ์ /์กฐ์๊ฐ์ _x', '๊ตญ๊ฐ์ ๊ณต์_x', '๋ถํ์ดํ์ฃผ๋ฏผ_x', '์ง๋ณ/๋ถ์/์งํ์_x', '์ฅ์ ์ธ_x', '๋ค๋ฌธํ๊ฐ์กฑ_x', '๋ค์๋ ๊ฐ์ _x', '๋ฌธํ์ํ ์ง์_x', '์ฃผํ-๋ถ๋์ฐ ์ง์_x', '๊ด์ฌ์ ์ฑ ์์', '๊ทผ๋ก์ ์ง์_x', '์๋ฃ ์ง์_x', '๋ณด์ก์ง์(๋ง0~7์ธ)', '๊ฐ์ธ๊ธ์ต์ง์_x', '๊ต์ก์ง์(๋ง8~19์ธ)', '์ฑ์ธ๊ต์ก์ง์_x', '๊ธฐ์ ๊ธ์ต์ง์_x', '์ทจ์ ์ง์_x', '์ฐฝ์ ์ง์_x', '์๋_y', '์ง์์ ํ', 'ํ๋ ฅ_y', '์ฑ๋ณ_y', '๊ฒฐํผ_y', '์ง์ฅ_y','์ง๋ณ/๋ถ์/์งํ์_y', '๊ตญ๊ฐ์ ๊ณต์_y', 'ํ๋ถ๋ชจ๊ฐ์ /์กฐ์๊ฐ์ _y', '๋ค์๋ ๊ฐ์ _y', 'ํด๋น์ฌํญ์์_y', '๋ค๋ฌธํ๊ฐ์กฑ_y', '๋ถํ์ดํ์ฃผ๋ฏผ_y', '๋์ถ์์ฐ์ธ', '์ฅ์ ์ธ_y', '๊ฐ์ธ๊ธ์ต์ง์_y', '๋ฌธํ์ํ ์ง์_y', '์ทจ์ ์ง์_y', '์ฐฝ์ ์ง์_y', '๊ต์ก์ง์(8~19์ธ)', '์๋ฃ ์ง์_y', '๋ณด์ก์ง์(0~7์ธ)', '์ฃผํ-๋ถ๋์ฐ ์ง์_y', '์ฑ์ธ๊ต์ก์ง์_y', '๊ธฐ์ ๊ธ์ต์ง์_y', '๊ทผ๋ก์ ์ง์_y'] # deep part ํน์ฑ crossed_cols = (['์ฑ๋ณ_x', '์ฑ๋ณ_y'], ['๊ฒฐํผ_x', '๊ฒฐํผ_y']) embedding_cols = ['์๋_x', 'ํ๋ ฅ_x', '์ง์ฅ_x', '๊ฒฐํผ_x', ' ๋์ถ์์ฐ์ธ', 'ํด๋น์ฌํญ์์_x', 'ํ๋ถ๋ชจ๊ฐ์ /์กฐ์๊ฐ์ _x', '๊ตญ๊ฐ์ ๊ณต์_x', '๋ถํ์ดํ์ฃผ๋ฏผ_x','์ง๋ณ/๋ถ์/์งํ์_x', '์ฅ์ ์ธ_x', '๋ค๋ฌธํ๊ฐ์กฑ_x', '๋ค์๋ ๊ฐ์ _x', '๋ฌธํ์ํ ์ง์_x', '์ฃผํ-๋ถ๋์ฐ ์ง์_x', '๊ด์ฌ์ ์ฑ ์์', '๊ทผ๋ก์ ์ง์_x','์๋ฃ ์ง์_x', '๋ณด์ก์ง์(๋ง0~7์ธ)', '๊ฐ์ธ๊ธ์ต์ง์_x', '๊ต์ก์ง์(๋ง8~19์ธ)', '์ฑ์ธ๊ต์ก์ง์_x','๊ธฐ์ ๊ธ์ต์ง์_x', '์ทจ์ ์ง์_x', '์ฐฝ์ ์ง์_x', '์๋_y', '์๊ด๊ธฐ๊ด์ ํ', '์ง์์ ํ', 'ํ๋ ฅ_y', '์ฑ๋ณ_y', '๊ฒฐํผ_y', '์๋ ', '์ง์ฅ_y', '๋์ถ์์ฐ์ธ', 'ํด๋น์ฌํญ์์_y','ํ๋ถ๋ชจ๊ฐ์ /์กฐ์๊ฐ์ _y', '๊ตญ๊ฐ์ ๊ณต์_y', '๋ถํ์ดํ์ฃผ๋ฏผ_y', '์ง๋ณ/๋ถ์/์งํ์_y', '์ฅ์ ์ธ_y', '๋ค๋ฌธํ๊ฐ์กฑ_y', '๋ค์๋ ๊ฐ์ _y', '๊ฐ์ธ๊ธ์ต์ง์_y', '๋ฌธํ์ํ ์ง์_y', '์ทจ์ ์ง์_y', '์ฐฝ์ ์ง์_y', '๊ต์ก์ง์(8~19์ธ)','์๋ฃ ์ง์_y', '๋ณด์ก์ง์(0~7์ธ)', '์ฃผํ-๋ถ๋์ฐ ์ง์_y', '์ฑ์ธ๊ต์ก์ง์_y', '๊ธฐ์ ๊ธ์ต์ง์_y','๊ทผ๋ก์ ์ง์_y'] cont_cols = ['๋์ด','max_income_x','min_income_x','๋์์ฐ๋ น์์','๋์์ฐ๋ น๋','max_income_y', 'min_income_y']
# accuracy ์ธก์ ๊ฒฐ๊ณผ accuracy: 0.8740 wide and deep model accuracy: 0.873960018157959 precision recall f1-score support 0 0.89 0.88 0.89 342435 1 0.85 0.86 0.85 257565 accuracy 0.87 600000 macro avg 0.87 0.87 0.87 600000 weighted avg 0.87 0.87 0.87 600000
-
-
-
๋ฐฉ๋ฒ๋ก ์ ์ ์ด์
- ์ ์ฑ ๋๋ฉ์ธ ํน์ฑ์ ์ถ์ฒ๋ ์ ์ฑ ๊ณผ ์ ์ ์ ์กฐ๊ฑด์ด ๋ถํฉํ๋ ๊ฒ์ด ์ค์ํ๋ฉด์๋, ์๋ก์ด ์ ์ฑ ์ ์ถ์ฒํ ์ ์์ด์ผ ํจ.
- Wide Part๋ Linearํ ๋ถ๋ถ์ผ๋ก, ์ ์ ์ ์ ์ฑ ์ ํน์ฑ์ด ์ ํํ ์ผ์นํ๋ ๋ถ๋ถ์ ๋ํด memorization. ์์ธํ๋ ์์ธก ๊ฒฐ๊ณผ๋ฅผ ์ ์ํ ์ ์์. ๊ณผ์ ํฉ ๋ฐ์ ๊ฐ๋ฅ.
- Deep Part๋ Non-Linearํ ๋ถ๋ถ์ผ๋ก, ์ ์ ์ ์ ์ฑ ์ ํน์ฑ์ generalizationํ์ฌ freshness๋ฅผ ๋์ผ ์ ์์. ๊ณผ์ ํฉ ๋ฐฉ์ง.
-
๊ฒฐ๊ณผ
์๋กญ๊ฒ ๋ง๋ label๋ค์ ์ ํ๋๊ฐ ์ต๋ 99% ~ ์ต์ 40% ์ ๋์.
-
ํ๊ณ ๋ฐ ๋ณด์์
- ํ๊น ์ด ์ฌ์ด feature๋ ์ ํ๋๊ฐ ๋๊ฒ ๋์์ผ๋, ๋ณต์กํ context๋ฅผ ๊ฐ์ง feature๋ ์ ํ๋๊ฐ ๋ฎ๊ฒ ๋์ด. => ์ ํ๋๋ฅผ ๋์ด๊ธฐ ์๊ณ ๋ฆฌ์ฆ์ ๋ณด์ํด์ผ ํจ.
- ๊ธฐ์ ์์ ์ ๊ณตํด์ค ํ๊น ๋ต์ง๋ก ์ ํ๋๋ฅผ ์ธก์ ํ์ผ๋, ๋ต์ง ์์ฒด๊ฐ 100%์ ์ ํ๋๋ฅผ ๊ฐ์ง ์์. ์ ๋ขฐ๋๊ฐ ์ด๋์ ๋์ธ์ง ์ ์ ์์.
-
๊ฒฐ๊ณผ
-
ํ๊ณ ๋ฐ ๋ณด์์
-
์ ์ฒญ์ ์ฐจ, ์ฑ๋ณ, ์๋ , ์ ์ฑ ์ง์์ ํ ๋ฑ์ ๋ผ๋ฒจ์ ์ค๋ณต๋๋ ๊ฐ์ด ์์. ๊ทธ๋ฌ๋ ๊ทธ ์ธ์ ํน์ฑ๋ค์ ๋ผ๋ฒจ์ ์ค๋ณต๋๋ ๊ฐ๋ค์ด ์๋๋ฐ, ๋ผ๋ฒจ๊ฐ์ด ํ๋์ผ์๋, ์ด ๊ฐ์ผ์๋ ์์.
policy_label['์ ์ฒญ์ ์ฐจ'] = ['๋ฌด๊ด', '๋ฌด๊ด', '์ฌ์ฑ', '๋จ์ฑ'...] policy_label['๋์ํน์ฑ'] = ['ํด๋น์ฌํญ์์', '์ฅ์ ์ธ, ๋ค๋ฌธํ๊ฐ์กฑ', '์์ ๋ถ', '๋ ๊ฑฐ๋ ธ์ธ, ๊ธฐ๊ด/์์ค, ์ฅ์ ์ธ', 'ํด๋น์ฌํญ์์'...]
์ด ๋ถ๋ถ์ ๋ํด ํ์ต ์, loss๋ฅผ ๋ฐ์ดํฐ ๊ฐฏ์์ ๋ง๊ฒ ๊ทธ๋๊ทธ๋ ๊ตฌํด์ฃผ๋ ค๊ณ ํด๋ณด์์ผ๋, ๊ฒฐ๊ตญ ์ต์ข ์ ์ผ๋ก test์์ n๊ฐ์ ์์ํ ๊ฒฐ๊ณผ๋ฅผ ์ค์ ํด์ค์ผํจ.out = model(token_ids, valid_length, segment_ids) label = label[0] if ',' in label: labels = list(map(int, label.split(','))) loss = 0 for i in range(len(labels)): label = labels[i] # label = tuple(label, ) label = torch.from_numpy(np.array([np.int32(label)])).long().to(device) loss += loss_fn(out, label) loss /= len(labels) else: label = torch.from_numpy(np.array([np.int32(label)])).long().to(device) loss = loss_fn(out, label) loss.backward()
-
ํ์ต์ ์ฌ์ฉ๋ ๋ผ๋ฒจ๊ฐ์ ๊ธฐ์กด์ for๋ฌธ, if๋ฌธ์ ์ด์ฉํด์ ํค์๋๋ฅผ ๊ธฐ์ค์ผ๋ก ํ๊น ์ ์งํํ ๊ฐ.
์ฆ, 100%์ ์ ํ๋๋ฅผ ๊ฐ์ง๋ ๋ผ๋ฒจ๊ฐ์ด ์๋๋ผ, ํผ์ฒ๋ง๋ค ์ต์ 40% ์ต๋ 98% ์ฌ์ด์ ์ ํ๋๋ฅผ ๊ฐ์ง๋ ๋ผ๋ฒจ๊ฐ์ด๊ธฐ ๋๋ฌธ์ ์ ์ด์ ๋์ ๋ชจ๋ธ ์ฑ๋ฅ์ ๊ธฐ๋ํ๊ธฐ ์ด๋ ค์. -
Input์ label์ One-Hot ํํ๋ก ๋ณํํ์ง ์์์.
-
label๊ฐ์ด ์ฌ๋ฌ๊ฐ์ธ feature์ ๊ฒฝ์ฐ ์ด๋ป๊ฒ ํด์ผํ ์ง ๋ชจ๋ฅด๊ฒ ์ด์ ํ๊น ๋ชจ๋ธ A์ ์ด์ฉํจ.
ํ๋ก์ ํธ๋ฅผ ํ๊ณ ํ๋ฉฐ ์๊ฒ๋ multi label classification ๋ฐฉ๋ฒ์ ๊ณต๋ถํ๋ค๋ฉด ํด๊ฒฐํ ์ ์์ ๊ฒ์ผ๋ก ๋ณด์. ์ฐธ๊ณ ์๋ฃ
-
-
๊ฒฐ๊ณผ
๋ฐ๋ก ์ฑ๋ฅ์ ํ๊ฐํ ์ ์๋ ์งํ๊ฐ ์๊ธฐ ๋๋ฌธ์ USER์ ์ ๋ณด๋ฅผ ์์๋ก ๋ฃ์์ ๋ ์๋์ ๊ฐ์ POLICY๊ฐ ์ถ์ฒ๋จ.
-
ํ๊ณ ๋ฐ ๋ณด์์
- USER๋ POLICY context ์ ๋ณด์ ์ง์ ๋ฐ๋ผ ๋ค๋ฅธ ๋ชจ๋ธ์ ๊ตฌ์ถํ๋ ๋ฐฉํฅ์ผ๋ก ์งํํด๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ์.
USER๊ฐ ํ๋กํ์ ๊ฐ๋ ์ฑ์ด ๊ฒฝ์ฐ ๋ specificํ ๋ชจ๋ธ๋ก, POLICY์ context์ ์ง์ด ์ข์ง ์์ ๊ฒฝ์ฐ generalํ ๋ชจ๋ธ๋ก ๋๋๋ ๋ฐฉ๋ฒ.
- USER๋ POLICY context ์ ๋ณด์ ์ง์ ๋ฐ๋ผ ๋ค๋ฅธ ๋ชจ๋ธ์ ๊ตฌ์ถํ๋ ๋ฐฉํฅ์ผ๋ก ์งํํด๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ์.
-
๊ฒฐ๊ณผ
# model predict ๋ฐ ์์์ ์ ์ ์ถ์ฒ ์งํ ๊ฒฐ๊ณผ ์ ์ ํ ์ด๋ธ 100๋ฒ ์ ์ ์ ๋ณด user1.iloc[100] num 4969 ์ฑ๋ณ ์ฌ์ฑ ๋์ด 54 ์๋ ์์ธํน๋ณ์ ์๊ตฐ๊ตฌ ๊ฐ์๊ตฌ ํ๋ ฅ ๊ณ ๋ฑํ๊ต์กธ์ ์ง์ฅ ์์๊ณต์ธ,์ค์๊ธฐ์ ๊ฐ๊ตฌ์ ๋ฌด์ฃผํ ์ธ๋์ฃผ,์ฃผํ ์ธ๋์ฃผ ๊ฒฐํผ ๊ธฐํผ ์๋ ์์ ์๋ ์์ธ ํด๋น์ฌํญ์์ ์๋ ์ no mb_10 ์ ์๋์ธต mb_10+๋์ํน์ฑ ์ ์๋์ธต mb_11 ํด๋น์์ mb_11+๊ด์ฌ์ํฉํน์ฑ None mb_12 ์ค์์๋ 60~80% ์ฌ์ด mb_13 no mb_14 no mb_15 ์ฃผํ-๋ถ๋์ฐ ์ง์ Name: 100, dtype: object -------------------------------------------- 100๋ฒ ์ ์ ๊ด๋ จ ์ถ์ฒ ์ ์ฑ run.Recommendation(user1.iloc[100]) ์ ์ฑ ID ์๋น์ค๋ช prob 0 51650 ๊ธด๊ธ๋ณต์ง ์ง์ 0.979127 1 22676 ๊ธด๊ธ๋ณต์ง ์ง์ 0.942127 2 70552 ๊ธด๊ธ๋ณต์ง ์ง์ 0.942127 3 45770 ๊ธด๊ธ๋ณต์ง ์ง์ 0.942127 4 44396 ๊ธด๊ธ๋ณต์ง ์ง์ 0.942127 5 47027 ๊ธด๊ธ ๋ณต์ง์ง์ ์ ๋ 0.939212 6 46117 ์ ์๋ ๊ฐ์ ์ฒญ์๋ ๋ณดํธ (์๋ฌธ ๊ฒฉ๋ ค๊ธ) 0.929142 7 24786 ๊ฐ์ ์ํ๋ณดํธ ์ง์ 0.924070 8 53930 ์๋ ์๋ ๊ฐ์ ๋ฐ ๊ฐ์ ์ํ๊ฐ์ ์๋ ์๋ จํ๋น ๋๋ ์ํ์ฌํ๋น ์ง์ 0.909780 9 46253 ์๋ ์๋ ๊ฐ์ ๋ฐ ๊ฐ์ ์ํ๋ณดํธ์๋์ง์ 0.909780
-
ํ๊ณ ๋ฐ ๋ณด์์
-
ํ์ต์ ์ํ ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ ๊ณผ์ ์์ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ๋ฌธ์ ๋ฐ์.
- ์์ธ: ๋๋ฌด ๋ง์ ์ํ ๋ฐ ํน์ฑ์ ์. (USER * POLICY) = (20,000 * 88,000) = 1,760,000,000 ๊ฐ
- ๋ณด์๋ฐฉ๋ฒ1) : High cardinality์ ํน์ฑ ์ค ์ค์๋๊ฐ ๋ํ ํน์ฑ์ ์ ์ธ(ex: ์๋, ์๊ตฐ๊ตฌ) ๋ฐ ์ํ ์ ์ค์ด๋ ๋ฐฉ๋ฒ.
- ๋ณด์๋ฐฉ๋ฒ2) : Batch Size๋งํผ๋ง ๋ถ๋ฌ์์ ํ์ต ์ํ ํ, ๋ค์ Batch๋ฅผ ๋ถ๋ฌ์ค๋ ๋ฐฉ๋ฒ.
- ์์ธ: ๋๋ฌด ๋ง์ ์ํ ๋ฐ ํน์ฑ์ ์. (USER * POLICY) = (20,000 * 88,000) = 1,760,000,000 ๊ฐ
-
ํ์ต์ ํตํ ์ฑ๋ฅ ํฅ์์ด 90% ์ด์ ์งํ๋์ง ์์.
- ์์ธ: ํน์ฑ ๊ฐ ๊ต์ฐจ๋ฅผ ์งํํ๋ cross product๋ฅผ '๊ฒฐํผ','์ฑ๋ณ'๊ณผ ๊ฐ์ด ์ฝ๊ณ ๋ณต์กํ์ง ์์ ํน์ฑ๋ค๋ก๋ง ์ฌ์ฉ.
- ๋ณด์๋ฐฉ๋ฒ: ์ง์ฅ, ๋์ํน์ฑ๊ณผ ๊ฐ์ ๋ค์ ์ค์ํ ์ ์ฑ ์กฐ๊ฑด์ผ๋ก ์ฌ์ฉ๋๋ ํน์ฑ์ cross product ์งํ.
- ์์ธ: ํน์ฑ ๊ฐ ๊ต์ฐจ๋ฅผ ์งํํ๋ cross product๋ฅผ '๊ฒฐํผ','์ฑ๋ณ'๊ณผ ๊ฐ์ด ์ฝ๊ณ ๋ณต์กํ์ง ์์ ํน์ฑ๋ค๋ก๋ง ์ฌ์ฉ.
-
model.predict์ ์ถ์ฒ ์๊ฐ์ด ํ๊ท 23์ด๋ก ๋งค์ฐ ์ค๋๊ฑธ๋ฆผ.
- ์์ธ: ์ ์ ๋ฐ์ดํฐ๋ฅผ ์
๋ ฅ๋ฐ๊ณ , ์ถ์ฒ์ ์ํ model predict ์ธํ๊ฐ์ผ๋ก์ ์ ์ฒ๋ฆฌ ์์
์์ ๊ธฐ์กด ์ ์ฑ
8๋ง8์ฒ๊ฐ์ ๋ฐ์ดํฐ๋ค๊ณผ์ ํฉ์ ๋ง๋๋ ๊ณผ์ ์์ ์๊ฐ์ด ๋ค์ ์์๋จ.
- ๋ณด์๋ฐฉ๋ฒ: ์ ์ ์ ์ ์ฑ ์ ๋ฐ์ดํฐ ์ง์ ๋ฐ๋ฅธ ๊ตฌ๋ถ. ํ๊ทธ๊ฐ ์ ์ ํ ๋ฝํ ๋ฐ์ดํฐ๊ทธ๋ฃน๊ณผ / '๋ฌด๊ด'์ด๋ '์์'์ด ๋ง์ ๋ฐ์ดํฐ ๊ทธ๋ฃน์ผ๋ก ๋๋์ด ์งํํ๋ค๋ฉด ๋ฐ์ดํฐ ์ํ์ ์ค์ผ ์ ์์.
- ์์ธ: ์ ์ ๋ฐ์ดํฐ๋ฅผ ์
๋ ฅ๋ฐ๊ณ , ์ถ์ฒ์ ์ํ model predict ์ธํ๊ฐ์ผ๋ก์ ์ ์ฒ๋ฆฌ ์์
์์ ๊ธฐ์กด ์ ์ฑ
8๋ง8์ฒ๊ฐ์ ๋ฐ์ดํฐ๋ค๊ณผ์ ํฉ์ ๋ง๋๋ ๊ณผ์ ์์ ์๊ฐ์ด ๋ค์ ์์๋จ.
-
์ถ์ฒ ์งํ ๊ฒฐ๊ณผ, ๊ฑฐ์ ์ถ์ฒ ๋์๊ณผ ์ ์ฑ ์ด ์ ๋ง์ง ์์.
- ์์ธ1: ์๊ณ ๋ฆฌ์ฆ ์์ฒด์์ ์ ๊ฐ ์ค์ํด์ ์๋น์ค๋ช ์ด๋ ์ ์ฑ ID๊ฐ ์๋ชป๊ธฐ์ฌ ๋๋ ๋ฑ์ ํด๋จผ ์๋ฌ ๊ฐ๋ฅ์ฑ.
- ์์ธ2: ๋ฌด์๋ฏธํ ์ ์ฑ
๋ฐ์ดํฐ์
(88000๊ฐ ์ํ)์ ์์ด ๋๋ฌด ๋ง์.
- ํด๊ฒฐ๋ฐฉ์: 1๋ฒ๊ณผ ๊ฐ์ด Query๋ฅผ ํตํด ๋จผ์ ์ํ ์๋ฅผ ๊ฑธ๋ฌ๋ด๋ ๋ฐฉ๋ฒ, ๋๋ Matrix ๋ชจ๋ธ์ ๋ฐํ์ผ๋ก 1์ฐจ์ ์ผ๋ก ์ ์ฑ ์ ๊ฑธ๋ฌ๋ธ ๋ค, ์์ด๋์ค๋ฅ ๋ชจ๋ธ๋ก ์ต์ข ๋์ score์ ์ ์ฑ ์ ์ถ์ฒํ๋ ๋ฐฉ๋ฒ.
-
๊ธฐ์กด ํ๋ จ ์งํ์ ๋ชจ๋ ์ค๋ณตํ๊ทธ๋ฅผ one-hot ์ธ์ฝ๋ฉ ํ์ง ์๋ ๊ฒฝ์ฐ, training์ ์งํ๋์ง๋ง, ์ถ์ฒ์ ์ํ ์ ์ฒ๋ฆฌ ๊ณผ์ ์์ ์ ํํ๊ฒ feature ์์ฑ์ด ๋งค์ฐ ๋ฒ๊ฑฐ๋ก์.
๋ชจ๋ ์ํ๋ก๋ถํฐ ๊ฒฝ์ฐ์ ์๋ฅผ ํ์ ํด์ feature๋ก ์์ฑํ์ฌ ํ์ต ๋ฐ์ดํฐ์ ๊ณผ ์์ธก ๋ฐ์ดํฐ์ ์ feature๋ฅผ ๋์ผํ๊ฒ ์์ฑ ๊ฐ๋ฅํ์ง๋ง, ์๊ฐํจ์จ์ด ๋จ์ด์ง.- ํด๊ฒฐ๋ฐฉ์: ํ์์ ํด๋น ์ค์ํ ํน์ฑ๋ค์ ํํด์๋ one-hot encoding์ ํตํด get_dummies๋ฅผ ํผํด์ค๋ค. -> ๋จ, ๊ณต์๊ฐ ๋์ฑ ๋ง์ด ๋ค์ด๊ฐ๋ฉฐ, ์๊ฐ ํจ์จ์ด ๋จ์ด์ง ์ ์์.
-
- ์ฝ๋๋ฆฌํฉํ ๋ง: ํ์๊ณผ ํจ๊ป ์ฝ๋๋ฅผ ์ง๋ค๋ณด๋ ์๋๋ฐฉ์ด ์ดํดํ๊ธฐ ์ฝ๊ฒ, ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ๊ฒ ๊ตฌํํด์ผํ๋ฉฐ, ์ด์์ด๋ฉด ์ฒ์ ์ฝ๋๋ฅผ ์งค ๋๋ถํฐ ์ค๊ณฝ์ ์ธ์๋๊ณ ๊ตฌํํด์ผ ํจ์ ๊นจ๋ฌ์.
- ๋จ์ํ ๋ชจ๋ธ์ ๊ฐ๋ ์ ์ด๊ณ ์ด๋ก ์ ์ผ๋ก ์๋ ๊ฒ๊ณผ ์ค์ ๋ฐ์ดํฐ์ ์ ์ฉํด๋ณด๋ ๊ฒ์ ๋ง์ด ๋ฌ๋์. pretrained๋ ๋ชจ๋ธ์ customizeํ๊ธฐ ์ํด ํ๋ ์์ํฌ ๊ธฐ๋ฅ์ ๋ํด ๋ ๊ณต๋ถํด์ผ๊ฒ ๋ค๊ณ ์๊ฐํจ.
- ์ถ์ฒ์์คํ ์๋ ๋ค์ํ ํน์ฑ์ด ๊ณ ๋ ค๋๋๋ฐ ์ด๋ฒ์๋ NLP๋ฅผ ํ์ฉํ์. ์ถ์ฒ๋๋ฉ์ธ์์ CV์ NLP๋ ์๋จ์์ ํ์ฉ๋ ์ ๋ฐ์ ์๊ธฐ ๋๋ฌธ์ CV์ NLP ๋ชจ๋ธ์ ๋ํ ์ดํด๊ฐ ํ์ํ ๊ฒ ๊ฐ์.
- ๋ฅ๋ฌ๋ CNN ๊ณต๋ถ
- ๋ฅ๋ฌ๋ ๊ธฐ์ด ์ด๋ก ๋ณต์ต, computer vision ๊ณต๋ถ, keras ํ๋ ์์ํฌ ๊ธฐ๋ฅ ๊ตฌํ์ ์ํด.
- ์ํฐ๋ ํ๋ฆฌ์จ๋ณด๋ฉ AI/ML ์ฝ์ค(NLP) ์ฐธ๊ฐ
- NLP ๊ณต๋ถ, pytorch ํ๋ ์์ํฌ ๊ณต๋ถ๋ฅผ ์ํด.