GitHub Action
Sync from GitHub
ef78361
Raw
History Blame Contribute Delete
5.34 kB
"""๋ถ„์„ ๊ฐ€์ด๋“œ - ํ† ํ”ฝ ์ธํ…”๋ฆฌ์ „์Šค ๋ฐ์ดํ„ฐ ํ๋ฆ„ ์„ค๋ช….
๋น„๊ธฐ์ˆ  ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•œ ํŒŒ์ดํ”„๋ผ์ธ, ์ ์ˆ˜ ๊ณ„์‚ฐ, ์šฉ์–ด, FAQ.
v9.0 ์‹ ๊ทœ. (renamed from data_flow.py)
"""
import streamlit as st
def render_data_flow():
"""ํ† ํ”ฝ ์ธํ…”๋ฆฌ์ „์Šค ๋ฐ์ดํ„ฐ ํ๋ฆ„ ๊ฐ€์ด๋“œ."""
st.markdown("### ํ† ํ”ฝ ์ธํ…”๋ฆฌ์ „์Šค ๋ถ„์„ ๊ฐ€์ด๋“œ")
st.caption("์ด ํŽ˜์ด์ง€๋Š” ํ† ํ”ฝ ์ธํ…”๋ฆฌ์ „์Šค์˜ ์ž‘๋™ ๋ฐฉ์‹๊ณผ ์ฃผ์š” ์ง€ํ‘œ๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.")
# 1. Pipeline diagram
st.markdown("#### 1. ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ")
st.markdown("""
```
์‚ฌ์šฉ์ž๊ฐ€ AI์— ์งˆ๋ฌธ
โ†“
AI๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ์ถ”๊ฐ€ ์งˆ๋ฌธ(Fanout) ์ƒ์„ฑ
์˜ˆ: "best moisturizer for dry skin"
โ†“
AI๊ฐ€ ์ถ”๊ฐ€ ์งˆ๋ฌธ๋ณ„๋กœ ์›น์„ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์ถœ์ฒ˜๋ฅผ ์ธ์šฉ
โ†“
AI๊ฐ€ ์ข…ํ•ฉํ•˜์—ฌ ์ตœ์ข… ๋‹ต๋ณ€ ์ž‘์„ฑ
```
์ €ํฌ๋Š” ์ด ๊ณผ์ •์—์„œ ์ƒ์„ฑ๋œ **์ถ”๊ฐ€ ์งˆ๋ฌธ**๊ณผ **์ธ์šฉ ์ถœ์ฒ˜**๋ฅผ ์ˆ˜์ง‘ํ•˜์—ฌ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค.
```
์ˆ˜์ง‘๋œ ์ถ”๊ฐ€ ์งˆ๋ฌธ๋“ค
โ†“
์œ ์‚ฌํ•œ ์งˆ๋ฌธ๋ผ๋ฆฌ ์ž๋™ ๊ทธ๋ฃนํ™” (ํด๋Ÿฌ์Šคํ„ฐ๋ง)
โ†’ ๊ฐ ๊ทธ๋ฃน = ํ•˜๋‚˜์˜ "ํ† ํ”ฝ"
โ†“
๊ฐ ํ† ํ”ฝ๋ณ„ ์ ์ˆ˜ ๊ณ„์‚ฐ
โ†’ AI ๊ด€์‹ฌ๋„, ๊ฒฝ์Ÿ ๋ฐ€๋„, ๊ธฐํšŒ ์ ์ˆ˜
โ†“
ํ† ํ”ฝ ๋งต / ๊ธฐํšŒ ์˜์—ญ / ๋ถ„ํฌ ์‹œ๊ฐํ™”
```
""")
st.markdown("---")
# 2. Score explanations
st.markdown("#### 2. ์ ์ˆ˜ ๊ณ„์‚ฐ ๋ฐฉ๋ฒ•")
score_col1, score_col2, score_col3 = st.columns(3)
with score_col1:
st.markdown("""
**AI ๊ด€์‹ฌ๋„ (Attention)**
ํ•ด๋‹น ํ† ํ”ฝ์˜ ์ถ”๊ฐ€ ์งˆ๋ฌธ ์ˆ˜๊ฐ€ ์ „์ฒด์—์„œ
์ฐจ์ง€ํ•˜๋Š” ๋น„์ค‘์ž…๋‹ˆ๋‹ค.
`ํ† ํ”ฝ์˜ ์ถ”๊ฐ€ ์งˆ๋ฌธ ์ˆ˜ / ์ „์ฒด ์ถ”๊ฐ€ ์งˆ๋ฌธ ์ˆ˜`
๊ฐ’์ด ๋†’์„์ˆ˜๋ก AI๊ฐ€ ์ด ์ฃผ์ œ์— ๋Œ€ํ•ด
์ž์ฃผ ์งˆ๋ฌธํ•œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.
""")
with score_col2:
st.markdown("""
**๊ฒฝ์Ÿ ๋ฐ€๋„ (Density)**
ํ•ด๋‹น ํ† ํ”ฝ์—์„œ AI๊ฐ€ ์ธ์šฉํ•˜๋Š”
ํ‰๊ท  ์ถœ์ฒ˜ ์ˆ˜์ž…๋‹ˆ๋‹ค.
๊ฐ’์ด ๋†’์„์ˆ˜๋ก ์ด๋ฏธ ๋งŽ์€ ์›น์‚ฌ์ดํŠธ๊ฐ€
์ด ์ฃผ์ œ์— ๋Œ€ํ•œ ์ฝ˜ํ…์ธ ๋ฅผ ๊ฐ–๊ณ  ์žˆ์–ด
๊ฒฝ์Ÿ์ด ์น˜์—ดํ•˜๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.
""")
with score_col3:
st.markdown("""
**๊ธฐํšŒ ์ ์ˆ˜ (Opportunity)**
AI ๊ด€์‹ฌ๋„์™€ ๊ฒฝ์Ÿ ๋ฐ€๋„๋ฅผ ๊ฒฐํ•ฉํ•œ
์ข…ํ•ฉ ์ง€ํ‘œ์ž…๋‹ˆ๋‹ค.
`AI ๊ด€์‹ฌ๋„ x (1 - ๊ฒฝ์Ÿ ๋ฐ€๋„)`
**๊ด€์‹ฌ์€ ๋†’์ง€๋งŒ ๊ฒฝ์Ÿ์ด ๋‚ฎ์€** ์˜์—ญ์„
์ฐพ์•„์ค๋‹ˆ๋‹ค.
""")
st.markdown("---")
# 3. Glossary
st.markdown("#### 3. ์šฉ์–ด ์‚ฌ์ „")
glossary = {
"Fanout (์ถ”๊ฐ€ ์งˆ๋ฌธ)": "AI๊ฐ€ ๋‹ต๋ณ€์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๋‚ด๋ถ€์ ์œผ๋กœ ๋งŒ๋“œ๋Š” ์„ธ๋ถ€ ์งˆ๋ฌธ. ์˜ˆ: ์‚ฌ์šฉ์ž๊ฐ€ '์ข‹์€ ์„ ํฌ๋ฆผ ์ถ”์ฒœํ•ด์ค˜'๋ผ๊ณ  ๋ฌผ์œผ๋ฉด AI๋Š” 'best sunscreen for sensitive skin', 'sunscreen SPF comparison' ๋“ฑ์˜ ์ถ”๊ฐ€ ์งˆ๋ฌธ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.",
"Cluster (ํ† ํ”ฝ ๊ทธ๋ฃน)": "์œ ์‚ฌํ•œ ์ถ”๊ฐ€ ์งˆ๋ฌธ๋“ค์„ AI๊ฐ€ ์ž๋™์œผ๋กœ ๋ฌถ์€ ๊ฒƒ. ํ•˜๋‚˜์˜ ํด๋Ÿฌ์Šคํ„ฐ = ํ•˜๋‚˜์˜ ํ† ํ”ฝ.",
"Citation (์ธ์šฉ ์ถœ์ฒ˜)": "AI๊ฐ€ ๋‹ต๋ณ€์—์„œ ์ฐธ์กฐํ•œ ์›น ํŽ˜์ด์ง€. ํŠน์ • ๋„๋ฉ”์ธ์ด ์ž์ฃผ ์ธ์šฉ๋˜๋ฉด ํ•ด๋‹น ์ฃผ์ œ์˜ ๊ถŒ์œ„ ์žˆ๋Š” ์ถœ์ฒ˜๋กœ ์ธ์‹๋จ.",
"UMAP (ํ† ํ”ฝ ๋งต)": "๊ณ ์ฐจ์› ๋ฐ์ดํ„ฐ๋ฅผ 2D๋กœ ํˆฌ์˜ํ•˜์—ฌ ํ† ํ”ฝ ๊ฐ„ ์œ ์‚ฌ๋„๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ๋ณด์—ฌ์ฃผ๋Š” ๊ธฐ๋ฒ•. ๊ฐ€๊นŒ์šด ์  = ์œ ์‚ฌํ•œ ํ† ํ”ฝ.",
"Quadrant (4๋ถ„๋ฉด)": "AI ๊ด€์‹ฌ๋„์™€ ๊ฒฝ์Ÿ ๋ฐ€๋„๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ† ํ”ฝ์„ 4๊ฐœ ์˜์—ญ์œผ๋กœ ๋ถ„๋ฅ˜ํ•œ ๊ฒƒ.",
}
for term, definition in glossary.items():
st.markdown(f"**{term}**")
st.markdown(f"> {definition}")
st.markdown("")
st.markdown("---")
# 4. FAQ
st.markdown("#### 4. ์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ")
with st.expander("์™œ Top 10๋งŒ ์ƒ์„ธ ๋ถ„์„ํ•˜๋‚˜์š”?"):
st.markdown(
"๊ธฐํšŒ ์ ์ˆ˜ ์ƒ์œ„ 10๊ฐœ ํ† ํ”ฝ์ด ์‹ค์งˆ์ ์œผ๋กœ ์ฝ˜ํ…์ธ  ์ œ์ž‘ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ์˜์—ญ์ž…๋‹ˆ๋‹ค. "
"์ „์ฒด ๋žญํ‚น ํ…Œ์ด๋ธ”์—์„œ๋Š” 50์œ„๊นŒ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."
)
with st.expander("์ธ์šฉ ์ถœ์ฒ˜ ๊ทธ๋ž˜ํ”„๊ฐ€ ์—†๋Š” ํ† ํ”ฝ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?"):
st.markdown(
"AI๊ฐ€ ํ•ด๋‹น ํ† ํ”ฝ์—์„œ ์•„์ง ํŠน์ • ์›น์‚ฌ์ดํŠธ๋ฅผ ์ธ์šฉํ•˜์ง€ ์•Š๊ณ  ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. "
"์ด๋Š” ๊ฒฝ์Ÿ์ž๊ฐ€ ๊ฑฐ์˜ ์—†๋‹ค๋Š” ๋œป์ด๋ฏ€๋กœ, **์ฝ˜ํ…์ธ  ์„ ์  ๊ธฐํšŒ๊ฐ€ ๋”์šฑ ํฐ** ์˜์—ญ์ž…๋‹ˆ๋‹ค."
)
with st.expander("์ ์ˆ˜๊ฐ€ ๋งค์šฐ ๋‚ฎ์€ ํ† ํ”ฝ์€ ๋ฌด์‹œํ•ด๋„ ๋˜๋‚˜์š”?"):
st.markdown(
"์ ์ˆ˜๋Š” ์ „์ฒด ํ† ํ”ฝ ๋Œ€๋น„ ์ƒ๋Œ€์  ๋น„์ค‘์ž…๋‹ˆ๋‹ค. "
"์˜ˆ๋ฅผ ๋“ค์–ด 481๊ฐœ ํ† ํ”ฝ ์ค‘ ํ•˜๋‚˜์˜ Attention์ด 0.001์ด๋ฉด ์ „์ฒด์˜ 0.1%๋ฅผ ์ฐจ์ง€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. "
"์ ˆ๋Œ€์ ์œผ๋กœ ๋‚ฎ์•„ ๋ณด์—ฌ๋„ ํ•ด๋‹น ๋‹ˆ์น˜์—์„œ๋Š” ์ถฉ๋ถ„ํžˆ ์˜๋ฏธ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."
)
with st.expander("ํ† ํ”ฝ ๋งต์—์„œ ์ ๋“ค์ด ๋ญ‰์ณ ์žˆ์œผ๋ฉด ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋‚˜์š”?"):
st.markdown(
"์„œ๋กœ ๊ฐ€๊นŒ์ด ์žˆ๋Š” ์ (ํ† ํ”ฝ)๋“ค์€ ์˜๋ฏธ์ ์œผ๋กœ ์œ ์‚ฌํ•œ ์ฃผ์ œ์ž…๋‹ˆ๋‹ค. "
"๋ญ‰์ณ ์žˆ๋Š” ํ† ํ”ฝ ๊ทธ๋ฃน์€ ํ•˜๋‚˜์˜ ํฐ ์ฃผ์ œ ์˜์—ญ์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ, "
"์ด ์˜์—ญ ์ „์ฒด์— ๋Œ€ํ•œ ์ข…ํ•ฉ์ ์ธ ์ฝ˜ํ…์ธ  ์ „๋žต์„ ์ˆ˜๋ฆฝํ•˜๋ฉด ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค."
)
with st.expander("๋ฐ์ดํ„ฐ๋Š” ์–ผ๋งˆ๋‚˜ ์ž์ฃผ ์—…๋ฐ์ดํŠธ๋˜๋‚˜์š”?"):
st.markdown(
"์บ ํŽ˜์ธ๋ณ„๋กœ ํด๋Ÿฌ์Šคํ„ฐ๋ง์„ ์‹คํ–‰ํ•  ๋•Œ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐฑ์‹ ๋ฉ๋‹ˆ๋‹ค. "
"ํ˜„์žฌ๋Š” ์ˆ˜๋™ ์‹คํ–‰ ๋ฐฉ์‹์ด๋ฉฐ, ์ถ”ํ›„ ์ž๋™ ๊ฐฑ์‹ ์ด ์ถ”๊ฐ€๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค."
)