File size: 5,335 Bytes
ef78361
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
"""๋ถ„์„ ๊ฐ€์ด๋“œ - ํ† ํ”ฝ ์ธํ…”๋ฆฌ์ „์Šค ๋ฐ์ดํ„ฐ ํ๋ฆ„ ์„ค๋ช….

๋น„๊ธฐ์ˆ  ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•œ ํŒŒ์ดํ”„๋ผ์ธ, ์ ์ˆ˜ ๊ณ„์‚ฐ, ์šฉ์–ด, 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(
            "์บ ํŽ˜์ธ๋ณ„๋กœ ํด๋Ÿฌ์Šคํ„ฐ๋ง์„ ์‹คํ–‰ํ•  ๋•Œ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐฑ์‹ ๋ฉ๋‹ˆ๋‹ค. "
            "ํ˜„์žฌ๋Š” ์ˆ˜๋™ ์‹คํ–‰ ๋ฐฉ์‹์ด๋ฉฐ, ์ถ”ํ›„ ์ž๋™ ๊ฐฑ์‹ ์ด ์ถ”๊ฐ€๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค."
        )