๐ŸŽ ์‹ํ’ˆ์—์„œ AI ๊ณต๋ถ€ํ•˜๊ธฐ

Yum-Me: A Personalized Nutrient-Based Meal Recommender System ๋ณธ๋ฌธ

Food_Health_AI/๋…ผ๋ฌธ ๊ณต๋ถ€

Yum-Me: A Personalized Nutrient-Based Meal Recommender System

FoodAI 2025. 4. 11. 22:30

๐Ÿ’ก๋“ค์–ด๊ฐ€๋ฉฐ

์•ˆ๋…•ํ•˜์„ธ์š”, ์˜ค๋Š˜์€ "Yum-Me: A Personalized Nutrient-Based Meal Recommender System" ๋…ผ๋ฌธ์— ๋Œ€ํ•œ ์„ธ๋ฏธ๋‚˜ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ณธ ๋…ผ๋ฌธ์€ ACM Trans Inf Syst์— 2017๋…„์— ๋ฐœํ‘œ๋œ ์—ฐ๊ตฌ๋กœ, ๊ฐœ์ธ ๋งž์ถคํ˜• ์˜์–‘์†Œ ๊ธฐ๋ฐ˜ ์‹์‚ฌ ์ถ”์ฒœ ์‹œ์Šคํ…œ์— ๊ด€ํ•œ ์ค‘์š”ํ•œ ๋ฐœ๊ฒฌ์„ ๋‹ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์˜์–‘ ๊ด€๋ฆฌ์™€ ๊ฑด๊ฐ•ํ•œ ์‹์Šต๊ด€ ํ˜•์„ฑ์— ์–ด๋ ค์›€์„ ๊ฒช๋Š” ํ˜„๋Œ€์ธ๋“ค์—๊ฒŒ ๋งค์šฐ ์œ ์šฉํ•œ ์ ‘๊ทผ๋ฒ•์„ ์ œ์‹œํ•˜๊ณ  ์žˆ์–ด ์ฃผ๋ชฉํ•  ๋งŒํ•ฉ๋‹ˆ๋‹ค.

https://doi.org/10.1145/3072614


I. ๋…ผ๋ฌธ ๊ฐœ์š”

๋ณธ ์—ฐ๊ตฌ๋Š” ๊ฐœ์ธ์˜ ์˜์–‘ ์š”๊ตฌ์‚ฌํ•ญ๊ณผ ์‹๋‹จ ์ œํ•œ, ๊ทธ๋ฆฌ๊ณ  ์„ธ๋ถ€์ ์ธ ์‹ํ’ˆ ์„ ํ˜ธ๋„๋ฅผ ๊ณ ๋ คํ•œ ๋งž์ถคํ˜• ์‹์‚ฌ ์ถ”์ฒœ ์‹œ์Šคํ…œ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ์ง„ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ์‚ฌ์šฉ์ž์˜ ์ƒ์„ธํ•œ ์Œ์‹ ์ทจํ–ฅ์„ ํšจ๊ณผ์ ์œผ๋กœ ํŒŒ์•…ํ•˜๋Š” ๋ฐฉ๋ฒ•๋ก ์— ์ดˆ์ ์„ ๋งž์ถ”๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋…ผ๋ฌธ ์ œ๋ชฉ Yum-Me: A Personalized Nutrient-Based Meal Recommender System
์ €์ž Longqi Yang, Cheng-Kang Hsieh, Hongjian Yang, John P. Pollak, Nicola Dell,
Serge Belongie, Curtis Cole, Deborah Estrin
์ €๋„ ๋ฐ ๋ฐœํ–‰ ์ •๋ณด ACM Trans Inf Syst. 2017 Aug; 36(1): 7
DOI 10.1145/3072614

์—ฐ๊ตฌ์˜ ์ค‘์š”์„ฑ

์ด ์—ฐ๊ตฌ๊ฐ€ ์˜์–‘ํ•™/์‹ํ’ˆ๊ณผํ•™ ๋ถ„์•ผ์—์„œ ๊ฐ–๋Š” ์˜๋ฏธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  • ๊ธฐ์กด ์‹ํ’ˆ ์ถ”์ฒœ ์‹œ์Šคํ…œ์˜ '์ฝœ๋“œ ์Šคํƒ€ํŠธ ๋ฌธ์ œ'๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ํ•ด๊ฒฐ
  • ์‹œ๊ฐ์  ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•œ ์‚ฌ์šฉ์ž ์นœํ™”์  ์„ ํ˜ธ๋„ ํ•™์Šต ๋ฐฉ์‹ ์ œ์•ˆ
  • ๊ฐœ์ธ์˜ ๊ฑด๊ฐ• ๋ชฉํ‘œ์™€ ์‹์ด ์ œํ•œ์„ ๊ณ ๋ คํ•œ ๋งž์ถคํ˜• ์ถ”์ฒœ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐœ๋ฐœ

II. ๊ธฐ์กด ์ถ”์ฒœ ์‹œ์Šคํ…œ์˜ ํ•œ๊ณ„

์‹ํ’ˆ ์„ ํ˜ธ๋„ ํŒŒ์•…์˜ ์–ด๋ ค์›€

ํ˜„์žฌ ์‹ํ’ˆ ์ถ”์ฒœ ์‹œ์Šคํ…œ์—์„œ ์‚ฌ์šฉ์ž ์„ ํ˜ธ๋„๋ฅผ ํŒŒ์•…ํ•˜๋Š” ๋ฐฉ์‹์€ ๋‘ ๊ฐ€์ง€ ์ฃผ์š” ์ ‘๊ทผ๋ฒ•์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋‚˜, ๊ฐ๊ฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ•œ๊ณ„์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค:

  • ์ดˆ๊ธฐ ์„ค๋ฌธ์กฐ์‚ฌ ๋ฐฉ์‹: ์‹๋‹จ ์ œํ•œ์ด๋‚˜ ๊ธฐํ”ผ ์‹ํ’ˆ์„ ์กฐ์‚ฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ, ํฐ ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ๊ตฌ๋ถ„ํ•  ์ˆ˜๋Š” ์žˆ์ง€๋งŒ ๊ฐœ์ธ์˜ ์„ธ๋ถ€์ ์ธ ์Œ์‹ ์„ ํ˜ธ๋„๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ค์›€
  • ์‹ํ’ˆ ์ผ์ง€ ๊ธฐ๋ก ๋ฐฉ์‹: ์‚ฌ์šฉ์ž์˜ ์‹ํ’ˆ ์„ญ์ทจ ๊ธฐ๋ก์„ ํ†ตํ•ด ์„ ํ˜ธ๋„๋ฅผ ํ•™์Šตํ•˜์ง€๋งŒ, ์ถฉ๋ถ„ํ•œ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘์— ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ณ (ํ•˜๋ฃจ ํ‰๊ท  3.5๊ฐœ ํ•ญ๋ชฉ ์ž…๋ ฅ), ํ‘œ๋ณธ ํŽธํ–ฅ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Œ

์ฝœ๋“œ ์Šคํƒ€ํŠธ ๋ฌธ์ œ

์ƒˆ๋กœ์šด ์‚ฌ์šฉ์ž์—๊ฒŒ ์ ์ ˆํ•œ ์ถ”์ฒœ์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ์ถฉ๋ถ„ํ•œ ์ •๋ณด๊ฐ€ ์—†๋Š” '์ฝœ๋“œ ์Šคํƒ€ํŠธ ๋ฌธ์ œ'๋Š” ์‹ํ’ˆ ์ถ”์ฒœ ์‹œ์Šคํ…œ์—์„œ ํŠนํžˆ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด์˜ ์˜ํ™”๋‚˜ ์Œ์•… ์ถ”์ฒœ ์‹œ์Šคํ…œ๊ณผ ๋‹ฌ๋ฆฌ, ์‹ํ’ˆ ์„ ํ˜ธ๋„๋Š” ๋‹จ์ˆœํ•œ ์นดํ…Œ๊ณ ๋ฆฌ๋‚˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์™€์˜ ์—ฐ๊ด€์„ฑ์ด ์•ฝํ•œ ๊ฒฝํ–ฅ์ด ์žˆ์–ด ๋”์šฑ ๋ณต์žกํ•œ ๋ฌธ์ œ๋กœ ๋‹ค๊ฐ€์˜ต๋‹ˆ๋‹ค.


III. Yum-Me ์‹œ์Šคํ…œ ๊ตฌ์กฐ

Yum-Me๋Š” ์‚ฌ์šฉ์ž์˜ ์‹์Šต๊ด€ ์ด๋ ฅ์— ์˜์กดํ•˜์ง€ ์•Š๊ณ ๋„ ์„ธ๋ถ€์ ์ธ ์Œ์‹ ์ทจํ–ฅ์„ ํšจ๊ณผ์ ์œผ๋กœ ํ•™์Šตํ•˜๋Š” ์‹œ์Šคํ…œ์œผ๋กœ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ 2๋‹จ๊ณ„ ์ ‘๊ทผ๋ฒ•์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค:

1๋‹จ๊ณ„: ๊ธฐ๋ณธ ์ •๋ณด ์ˆ˜์ง‘

๊ฐ„๋‹จํ•œ ์„ค๋ฌธ์กฐ์‚ฌ๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž์˜ ์‹์‚ฌ ์ œํ•œ์‚ฌํ•ญ๊ณผ ์˜์–‘ ๋ชฉํ‘œ๋ฅผ ํŒŒ์•…ํ•ฉ๋‹ˆ๋‹ค:

  • ์‹์‚ฌ ์ œํ•œ: ์ œํ•œ ์—†์Œ, ์ฑ„์‹์ฃผ์˜์ž, ๋น„๊ฑด, ์ฝ”์…”, ํ• ๋ž„ ๋“ฑ์˜ ์˜ต์…˜ ์ค‘ ์„ ํƒ
  • ์˜์–‘ ๊ธฐ๋Œ€์น˜: ์—ด๋Ÿ‰, ๋‹จ๋ฐฑ์งˆ, ์ง€๋ฐฉ์— ๋Œ€ํ•ด '๊ฐ์†Œ', '์œ ์ง€', '์ฆ๊ฐ€' ์˜ต์…˜ ์ค‘ ์„ ํƒ

์ด ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ ์ ˆํ•œ ์‹ํ’ˆ ๋ฐ์ดํ„ฐ ์„ธํŠธ๋ฅผ ์„ ํƒํ•˜๊ณ , ์‚ฌ์šฉ์ž์˜ ๊ฑด๊ฐ• ๋ชฉํ‘œ์— ์ ํ•ฉํ•œ ์˜์–‘ํ•™์  ์ˆœ์œ„๋ฅผ ๋งค๊น๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ์€ ๋‹ค์Œ ์ˆ˜์‹์„ ํ†ตํ•ด ์‹ํ’ˆ์˜ ์˜์–‘ํ•™์  ์ ํ•ฉ์„ฑ์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค:

# ์‹ํ’ˆ ์ˆœ์œ„ ๊ณ„์‚ฐ ์ˆ˜์‹
# u = Σ(α_n,a * r_n,a) + Σ(α_n,d * r_n,d), n∈U
# U = {calories, protein, fat}
# α_n,a = ์˜ค๋ฆ„์ฐจ์ˆœ ์ง€ํ‘œ ๊ณ„์ˆ˜ (nutrient n์ด ๊ฐ์†Œํ•  ๊ฒฝ์šฐ 1, ์ฆ๊ฐ€ํ•  ๊ฒฝ์šฐ 0)
# α_n,d = ๋‚ด๋ฆผ์ฐจ์ˆœ ์ง€ํ‘œ ๊ณ„์ˆ˜ (nutrient n์ด ์ฆ๊ฐ€ํ•  ๊ฒฝ์šฐ 1, ๊ฐ์†Œํ•  ๊ฒฝ์šฐ 0)
# r_n,a = ํ•ด๋‹น ์˜์–‘์†Œ์˜ ์˜ค๋ฆ„์ฐจ์ˆœ ์ˆœ์œ„
# r_n,d = ํ•ด๋‹น ์˜์–‘์†Œ์˜ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ˆœ์œ„

def calculate_nutritional_ranking(recipe, nutrition_goals):
    u = 0
    for nutrient in ['calories', 'protein', 'fat']:
        if nutrition_goals[nutrient] == 'decrease':
            u += 1 * recipe[f'{nutrient}_ascending_rank']
        elif nutrition_goals[nutrient] == 'increase':
            u += 1 * recipe[f'{nutrient}_descending_rank']
        # ์œ ์ง€ ์˜ต์…˜์˜ ๊ฒฝ์šฐ ๋ชจ๋“  ๋ ˆ์‹œํ”ผ ์ˆœ์œ„ ๋™์ผ
    return u

2๋‹จ๊ณ„: ์‹œ๊ฐ์  ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•œ ์„ ํ˜ธ๋„ ํ•™์Šต

Yum-Me์˜ ํ•ต์‹ฌ์€ ์‹œ๊ฐ์  ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž์˜ ์„ธ๋ถ€์ ์ธ ์Œ์‹ ์„ ํ˜ธ๋„๋ฅผ ํšจ์œจ์ ์œผ๋กœ ํŒŒ์•…ํ•˜๋Š” ๋ฐ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์€ ๋‘ ๋‹จ๊ณ„๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค:

  • Phase 1: 10๊ฐ€์ง€ ์‹ํ’ˆ ์ด๋ฏธ์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ  ๋ง›์žˆ์–ด ๋ณด์ด๋Š” ์Œ์‹์„ ์„ ํƒํ•˜๋„๋ก ํ•จ (2ํšŒ ๋ฐ˜๋ณต)
  • Phase 2: ๋‘ ๊ฐ€์ง€ ์‹ํ’ˆ ์Œ์„ ๋ณด์—ฌ์ฃผ๊ณ  ๋” ๋ง›์žˆ์–ด ๋ณด์ด๋Š” ์‹ํ’ˆ์„ ์„ ํƒํ•˜๊ฑฐ๋‚˜, ๋‘˜ ๋‹ค ๋ง›์—†์–ด ๋ณด์ด๋ฉด "Yuck" ์˜ต์…˜์„ ์„ ํƒํ•˜๋„๋ก ํ•จ (13ํšŒ ๋ฐ˜๋ณต)

์ด๋Ÿฌํ•œ ์‹œ๊ฐ์  ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ง๊ด€์ ์œผ๋กœ ์Œ์‹ ์„ ํ˜ธ๋„๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋ฉฐ, ์ ์€ ์ˆ˜์˜ ์ƒํ˜ธ์ž‘์šฉ๋งŒ์œผ๋กœ๋„ ๋‹ค์–‘ํ•œ ์‹ํ’ˆ์— ๋Œ€ํ•œ ์„ ํ˜ธ๋„๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ํ•™์Šตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


IV. ํ•ต์‹ฌ ๊ธฐ์ˆ  ์š”์†Œ

1. FoodDist ๋ชจ๋ธ

Yum-Me์˜ ํ•ต์‹ฌ ๊ธฐ์ˆ  ์ค‘ ํ•˜๋‚˜๋Š” 'FoodDist'๋ผ๋Š” ์‹ํ’ˆ ์ด๋ฏธ์ง€ ๋ถ„์„ ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค.

์ด ๋ชจ๋ธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค:

  • ๋”ฅ ์ปจ๋ณผ๋ฃจ์…˜ ๋„คํŠธ์›Œํฌ์™€ ๋ฉ€ํ‹ฐํƒœ์Šคํฌ ํ•™์Šต ๊ธฐ๋ฐ˜์˜ ์ด๋ฏธ์ง€ ๋ถ„์„ ๋ชจ๋ธ
  • ์‹ํ’ˆ ์ด๋ฏธ์ง€๋ฅผ 1000์ฐจ์› ํŠน์„ฑ ๊ณต๊ฐ„์— ์ž„๋ฒ ๋”ฉํ•˜์—ฌ ์œ ์‚ฌ๋„๋ฅผ ๋ถ„์„
  • ์œ ์‚ฌํ•œ ์‹ํ’ˆ์€ ๊ฐ€๊น๊ฒŒ, ๋‹ค๋ฅธ ์‹ํ’ˆ์€ ๋ฉ€๋ฆฌ ์œ„์น˜์‹œํ‚ค๋Š” ์œ ํด๋ฆฌ๋“œ ๊ฑฐ๋ฆฌ ์ž„๋ฒ ๋”ฉ ํ™œ์šฉ
  • ์‚ฌ์ „ ํ›ˆ๋ จ๋œ VGG CNN ๋ชจ๋ธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•
  • ๋ถ„๋ฅ˜ ์ž‘์—…์—์„œ Top-1 ์ •ํ™•๋„ 83.09%, Top-5 ์ •ํ™•๋„ 95.82%๋กœ ๊ธฐ์กด ์ตœ๊ณ  ๋ชจ๋ธ ๋Šฅ๊ฐ€
  • ๊ฒ€์ƒ‰ ์ž‘์—…์—์„œ mAP(mean Average Precision) 0.6670์œผ๋กœ ์ด์ „ ๋ชจ๋ธ๋ณด๋‹ค 2๋ฐฐ ์ด์ƒ ํ–ฅ์ƒ

2. ์˜จ๋ผ์ธ ํ•™์Šต ํ”„๋ ˆ์ž„์›Œํฌ

Yum-Me๋Š” ์‚ฌ์šฉ์ž์™€์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ํ†ตํ•ด ์ ์ง„์ ์œผ๋กœ ์„ ํ˜ธ๋„ ๋ชจ๋ธ์„ ๊ฐœ์„ ํ•˜๋Š” ์˜จ๋ผ์ธ ํ•™์Šต ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค:

  • LE+EE(Label propagation, Exponentiated Gradient + Exploration-Exploitation) ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๊ฐ€์žฅ ํšจ๊ณผ์ 
  • 15ํšŒ ๋ฐ˜๋ณต ํ•™์Šต ํ›„ ์•ฝ ์ ˆ๋ฐ˜์˜ ์‚ฌ์šฉ์ž๊ฐ€ 80% ์ด์ƒ์˜ ์˜ˆ์ธก ์ •ํ™•๋„ ๊ธฐ๋ก
  • ์‚ฌ์šฉ์ž๊ฐ€ ์„ ํƒํ•œ ์„ ํ˜ธ ์‹ํ’ˆ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ชจ๋“  ์‹ํ’ˆ์— ๋Œ€ํ•œ ์„ ํ˜ธ๋„ ๋ฒกํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธ
  • ์ด๋ฏธ ํƒ์ƒ‰๋œ ์‹ํ’ˆ ์ด๋ฏธ์ง€ ์„ธํŠธ๋ฅผ ์ง€์†์ ์œผ๋กœ ํ™•์žฅํ•˜๋ฉฐ ํ•™์Šต
  • ์‹ํ’ˆ ์ด๋ฏธ์ง€ ๊ฐ„ ์œ ์‚ฌ๋„๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ง์ ‘ ํ‰๊ฐ€ํ•˜์ง€ ์•Š์€ ์‹ํ’ˆ์— ๋Œ€ํ•œ ์„ ํ˜ธ๋„ ์˜ˆ์ธก
# ์„ ํ˜ธ๋„ ์—…๋ฐ์ดํŠธ ๋ชจ๋ธ ์˜์‚ฌ์ฝ”๋“œ
def update_preference_model(user_responses, food_embeddings):
    # K_t: t๋ฒˆ์งธ ๋ฐ˜๋ณต์—์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ง„ ์‹ํ’ˆ ์„ธํŠธ
    # L_t: t๋ฒˆ์งธ ๋ฐ˜๋ณต์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์„ ํ˜ธํ•œ๋‹ค๊ณ  ๋‹ตํ•œ ์‹ํ’ˆ ์„ธํŠธ
    # p_t: t๋ฒˆ์งธ ๋ฐ˜๋ณต์—์„œ์˜ ๋ชจ๋“  ์‹ํ’ˆ์— ๋Œ€ํ•œ ์‚ฌ์šฉ์ž ์„ ํ˜ธ๋„ ๋ฒกํ„ฐ
    # B_t: t๋ฒˆ์งธ ๋ฐ˜๋ณต๊นŒ์ง€ ํƒ์ƒ‰๋œ ์‹ํ’ˆ ์ด๋ฏธ์ง€ ์„ธํŠธ
    
    # ์‚ฌ์šฉ์ž ์‘๋‹ต ์ฒ˜๋ฆฌ
    L_t = get_user_liked_foods(user_responses, K_t)
    
    # ์„ ํ˜ธ๋„ ๋ฒกํ„ฐ ์—…๋ฐ์ดํŠธ
    p_t = update_preference_vector(p_t_minus_1, L_t, food_embeddings)
    
    # ํƒ์ƒ‰๋œ ์‹ํ’ˆ ์„ธํŠธ ์—…๋ฐ์ดํŠธ
    B_t = B_t_minus_1.union(K_t)
    
    # ๋‹ค์Œ ๋ฐ˜๋ณต์—์„œ ๋ณด์—ฌ์ค„ ์‹ํ’ˆ ์„ธํŠธ ์„ ํƒ
    K_t_plus_1 = select_next_foods(p_t, B_t, food_embeddings)
    
    return p_t, B_t, K_t_plus_1

3. ์‹œ์Šคํ…œ ํšจ์œจ์„ฑ

Yum-Me ์‹œ์Šคํ…œ์€ ์‹ค์‹œ๊ฐ„ ์‚ฌ์šฉ์— ์ ํ•ฉํ•œ ๋†’์€ ํšจ์œจ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:

  • ์‹œ์Šคํ…œ ์‹คํ–‰ ์‹œ๊ฐ„: ์ฒซ ๋‘ ๋ฒˆ์˜ ๋ฐ˜๋ณต์—์„œ ์•ฝ 0.35์ดˆ, ์ดํ›„์—๋Š” 0.025์ดˆ ๋ฏธ๋งŒ
  • ์‚ฌ์šฉ์ž ์‘๋‹ต ์‹œ๊ฐ„: 10๊ฐœ ์ด๋ฏธ์ง€ ๋น„๊ต์— ๋Œ€๋ถ€๋ถ„ 15์ดˆ ๋ฏธ๋งŒ ์†Œ์š”
  • 15ํšŒ ํ•™์Šต์„ ์™„๋ฃŒํ•˜๋Š” ๋ฐ ํ‰๊ท  53.22์ดˆ ์†Œ์š”
  • ๊ฐ€๋ฒผ์šด ์›น ์„œ๋น„์Šค๋กœ ๊ตฌํ˜„๋˜์–ด ๋‹ค์–‘ํ•œ ๊ธฐ๊ธฐ์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅ

V. ์—ฐ๊ตฌ ๊ฒฐ๊ณผ

์‹ํ’ˆ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์ถ•

์—ฐ๊ตฌ์ง„์€ Yummly API๋ฅผ ํ†ตํ•ด ๋‹ค์–‘ํ•œ ์‹๋‹จ ์ œํ•œ ์˜ต์…˜๋ณ„๋กœ ๋ ˆ์‹œํ”ผ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ–ˆ์Šต๋‹ˆ๋‹ค:

์‹๋‹จ ์œ ํ˜• ์›๋ณธ ํฌ๊ธฐ ์ตœ์ข… ํฌ๊ธฐ
์ œํ•œ ์—†์Œ 9,405 7,938
์ฑ„์‹ 10,000 6,713
๋น„๊ฑด 9,638 6,013
์ฝ”์…” 10,000 4,825
ํ• ๋ž„ 10,000 5,002

์‚ฌ์šฉ์ž ์—ฐ๊ตฌ ๊ฒฐ๊ณผ

60๋ช…์˜ ์‚ฌ์šฉ์ž๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•œ ์‹คํ—˜์—์„œ Yum-Me๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์˜€์Šต๋‹ˆ๋‹ค:

  • ๊ธฐ์กด ์„ค๋ฌธ ๊ธฐ๋ฐ˜ ์ ‘๊ทผ ๋ฐฉ์‹๊ณผ ๋น„๊ตํ•˜์—ฌ ์ถ”์ฒœ ์ˆ˜์šฉ๋ฅ ์„ 42.63% ํ–ฅ์ƒ
  • ์‚ฌ์šฉ์ž๋“ค์˜ ๋†’์€ ๋งŒ์กฑ๋„์™€ ์‹œ์Šคํ…œ ์œ ์šฉ์„ฑ ํ‰๊ฐ€ ํš๋“
  • FoodDist ๋ชจ๋ธ์ด ์œ ์‚ฌํ•œ ์‹ํ’ˆ์„ ํšจ๊ณผ์ ์œผ๋กœ ๊ทธ๋ฃนํ™”ํ•˜๋Š” ๋Šฅ๋ ฅ ์ž…์ฆ
  • ์„ ํ˜ธ๋„ ๋ถ„ํฌ์˜ ์—”ํŠธ๋กœํ”ผ๊ฐ€ ๋‚ฎ์„์ˆ˜๋ก(๋” ์ง‘์ค‘๋ ์ˆ˜๋ก) ์ถ”์ฒœ ์„ฑ๋Šฅ ํ–ฅ์ƒ

์˜์–‘ ๋ชฉํ‘œ ๋‹ฌ์„ฑ ํšจ๊ณผ

Yum-Me ์‹œ์Šคํ…œ์ด ์‚ฌ์šฉ์ž์˜ ๋‹ค์–‘ํ•œ ์˜์–‘ ๋ชฉํ‘œ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ๋ถ„์„ํ–ˆ์Šต๋‹ˆ๋‹ค:

  • ์นผ๋กœ๋ฆฌ ๊ฐ์†Œ, ๋‹จ๋ฐฑ์งˆ ์ฆ๊ฐ€, ์ง€๋ฐฉ ๊ฐ์†Œ ๋“ฑ ๋Œ€๋ถ€๋ถ„์˜ ์˜์–‘ ๋ชฉํ‘œ์—์„œ ํšจ๊ณผ์ 
  • ๋‹จ๋ฐฑ์งˆ ์œ ์ง€์™€ ์ง€๋ฐฉ ์œ ์ง€ ๋ชฉํ‘œ์—์„œ๋Š” ๊ฐœ์„  ํ•„์š”
  • ์˜์–‘์†Œ ๊ฐ„ ์ƒํ˜ธ์˜์กด์„ฑ์œผ๋กœ ์ธํ•œ ํ•œ๊ณ„ ์กด์žฌ (์˜ˆ: ์ง€๋ฐฉ ๊ฐ์†Œ๊ฐ€ ๋‹จ๋ฐฑ์งˆ๊ณผ ์นผ๋กœ๋ฆฌ ๊ฐ์†Œ๋กœ ์ด์–ด์ง)
  • ์˜์–‘์†Œ ๊ธฐ๋ฐ˜ ๋งž์ถคํ˜• ์ถ”์ฒœ์ด ์‚ฌ์šฉ์ž์˜ ์‹ํ’ˆ ์„ ํ˜ธ๋„์™€ ์กฐํ™”๋ฅผ ์ด๋ฃธ


VI. ๐ŸŽฏ ๊ฒฐ๋ก 

Yum-Me๋Š” ์˜์–‘ํ•™์  ๋ชฉํ‘œ์™€ ๊ฐœ์ธ์˜ ๋ฏธ๊ฐ ์„ ํ˜ธ๋„๋ฅผ ๊ฒฐํ•ฉํ•œ ๋งž์ถคํ˜• ์‹์‚ฌ ์ถ”์ฒœ ์‹œ์Šคํ…œ์œผ๋กœ, ์ฝœ๋“œ ์Šคํƒ€ํŠธ ๋ฌธ์ œ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ํ•ด๊ฒฐํ•˜๋Š” ํ˜์‹ ์ ์ธ ์ ‘๊ทผ๋ฒ•์„ ์ œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์‹œ๊ฐ์  ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•œ ์ง๊ด€์ ์ธ ์„ ํ˜ธ๋„ ํ•™์Šต ๋ฐฉ์‹์€ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๊ฐœ์„ ํ•˜๊ณ , ์ถ”์ฒœ ์‹œ์Šคํ…œ์˜ ์ •ํ™•๋„๋ฅผ ๋†’์ด๋Š” ๋ฐ ํฌ๊ฒŒ ๊ธฐ์—ฌํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ์—ฐ๊ตฌ๋Š” ๊ฑด๊ฐ•ํ•œ ์‹์Šต๊ด€ ํ˜•์„ฑ์„ ์ง€์›ํ•˜๋Š” ๊ฐœ์ธํ™”๋œ ์˜์–‘ ๊ด€๋ฆฌ ๋„๊ตฌ์˜ ๋ฐœ์ „ ๊ฐ€๋Šฅ์„ฑ์„ ๋ณด์—ฌ์ฃผ๋ฉฐ, ํ–ฅํ›„ ๋” ๋‹ค์–‘ํ•œ ์˜์–‘์†Œ์™€ ๊ฑด๊ฐ• ์ง€ํ‘œ๋ฅผ ๊ณ ๋ คํ•œ ํ™•์žฅ ์—ฐ๊ตฌ๊ฐ€ ๊ธฐ๋Œ€๋ฉ๋‹ˆ๋‹ค. ํŠนํžˆ FoodDist์™€ ๊ฐ™์€ ์ด๋ฏธ์ง€ ๊ธฐ๋ฐ˜ ์‹ํ’ˆ ๋ถ„์„ ๊ธฐ์ˆ ์€ ์˜์–‘ํ•™๊ณผ AI์˜ ์œตํ•ฉ ์—ฐ๊ตฌ์— ์ค‘์š”ํ•œ ๊ธฐ์—ฌ๋ฅผ ํ•  ๊ฒƒ์œผ๋กœ ์ „๋ง๋ฉ๋‹ˆ๋‹ค.


์ฐธ๊ณ  ๋ฌธํ—Œ:

  • Yang, L., Hsieh, C. K., Yang, H., Pollak, J. P., Dell, N., Belongie, S., Cole, C., & Estrin, D. (2017). Yum-Me: A Personalized Nutrient-Based Meal Recommender System. ACM Trans Inf Syst, 36(1), 7.
  • Food-101 dataset: https://www.vision.ee.ethz.ch/datasets_extra/food-101/
  • Yummly API: https://developer.yummly.com/