persona_survey / NBS_System_Guide.md
jonghhhh's picture
Add detailed Parquet files comparison section
afd99b0

NBS ํŽ˜๋ฅด์†Œ๋‚˜ ์„ค๋ฌธ์กฐ์‚ฌ ์‹œ์Šคํ…œ ๊ตฌ์ถ• ๊ฐ€์ด๋“œ

์ด ๋ฌธ์„œ๋Š” ์ „๊ตญ์ง€ํ‘œ์กฐ์‚ฌ(NBS) ์›๋ณธ ๋ฐ์ดํ„ฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ 16๋งŒ ๊ฑด์˜ ์‘๋‹ต์ž๋ฅผ ์•„๋ฐ”ํƒ€๋กœ ๊ตฌํ˜„ํ•˜๊ณ , ์ƒˆ๋กœ์šด ์งˆ๋ฌธ์— ๋Œ€ํ•ด ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๊ธฐ๊นŒ์ง€์˜ ์ „ ๊ณผ์ •์„ ์ƒ์„ธํžˆ ๊ธฐ๋กํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.


1. ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

๋ณธ ํ”„๋กœ์ ํŠธ์˜ ๋ชฉํ‘œ๋Š” 2020๋…„๋ถ€ํ„ฐ ์ถ•์ ๋œ 160ํšŒ ์ด์ƒ์˜ ์ „๊ตญ์ง€ํ‘œ์กฐ์‚ฌ ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ฉํ•˜์—ฌ, ํŠน์ • ์ธ๊ตฌํ†ต๊ณ„ํ•™์  ํŠน์„ฑ(์„ฑ๋ณ„, ์—ฐ๋ น, ์ง€์—ญ, ์ง์—…)๊ณผ ๊ณผ๊ฑฐ ๊ฐ€์น˜๊ด€์„ ๊ฐ€์ง„ 'ํŽ˜๋ฅด์†Œ๋‚˜ ์•„๋ฐ”ํƒ€' 1,000๋ช…์„ ์ƒ˜ํ”Œ๋งํ•˜๊ณ  ์ด๋“ค์ด ์ƒˆ๋กœ์šด ์‚ฌํšŒ์  ์ด์Šˆ์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ๋‹ต๋ณ€ํ• ์ง€ ์˜ˆ์ธกํ•˜๋Š” ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.


2. ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๊ณผ์ • (Data Pipeline)

๋‹จ๊ณ„ 1: ์›๋ณธ ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜ (์ „๊ตญ์ง€ํ‘œ์กฐ์‚ฌ_์›๋ณธ โ†’ ์ „๊ตญ์ง€ํ‘œ์กฐ์‚ฌ_json)

  • ๋Œ€์ƒ: 163๊ฐœ์˜ ์กฐ์‚ฌ ํด๋” ๋‚ด Stata(.dta) ๋ฐ SPSS(.sav) ํŒŒ์ผ.
  • ์ฒ˜๋ฆฌ ๋‚ด์šฉ:
    • ๊ฐ ํด๋”์˜ README.txt ๋ฐ PDF ๋ณด๊ณ ์„œ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ์„ค๋ฌธ์ง€ ๋ฌธํ•ญ ๋งค์นญ.
    • Stata/SPSS์˜ ์ˆ˜์น˜ํ˜• ์ฝ”๋“œ ๋ฐ์ดํ„ฐ์— ๋ณ€์ˆ˜ ๋ผ๋ฒจ(Value Labels)์„ ์ž…ํ˜€ ํ…์ŠคํŠธ ๊ธฐ๋ฐ˜์˜ JSON ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜.
  • ๊ฒฐ๊ณผ: ์ „๊ตญ์ง€ํ‘œ์กฐ์‚ฌ_json ํด๋” ๋‚ด 163๊ฐœ์˜ ํ‘œ์ค€ํ™”๋œ JSON ํŒŒ์ผ ์ƒ์„ฑ.

๋‹จ๊ณ„ 2: ๋ฐ์ดํ„ฐ ํ†ตํ•ฉ ๋ฐ ์ •๊ทœํ™” (์ „๊ตญ์ง€ํ‘œ์กฐ์‚ฌ_json โ†’ consolidated_nbs_data.parquet)

  • ๋Œ€์ƒ: 163๊ฐœ์˜ JSON ํŒŒ์ผ (์ด 166,721๊ฑด์˜ ๊ฐœ๋ณ„ ์‘๋‹ต์ž ๋ฐ์ดํ„ฐ).
  • Parquet ํŒŒ์ผ์˜ ๊ตฌ์กฐ (Wide Table & Sparse Matrix):
    • ์—‘์…€๊ณผ์˜ ๋น„๊ต: ์—‘์…€์ด ํ•˜๋‚˜์˜ ์‹œํŠธ์— ํ–‰๊ณผ ์—ด์„ ๋งž์ถ”๋Š” ๊ฒƒ๊ณผ ์œ ์‚ฌํ•˜์ง€๋งŒ, Parquet๋Š” ํ›จ์”ฌ ๊ฑฐ๋Œ€ํ•œ '์ดˆ๊ด‘๋Œ€์—ญ ํ…Œ์ด๋ธ”(Wide Table)' ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.
    • ํ†ตํ•ฉ ์›๋ฆฌ: 163ํšŒ์˜ ์„ค๋ฌธ์กฐ์‚ฌ๋Š” ๋งค๋ฒˆ ์งˆ๋ฌธ์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์ด ์‹œ์Šคํ…œ์€ Pandas.concat ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์—ฌ, ๋™์ผํ•œ ์งˆ๋ฌธ์€ ๊ฐ™์€ ์—ด(Column)์— ํ•ฉ์น˜๊ณ , ์ƒˆ๋กœ์šด ์งˆ๋ฌธ์€ ์ƒˆ๋กœ์šด ์—ด๋กœ ์ถ”๊ฐ€ํ•˜๋ฉฐ ์˜†์œผ๋กœ ๊ธธ๊ฒŒ ๋ถ™์—ฌ๋‚˜๊ฐ€๋Š” ๋ฐฉ์‹์„ ์ทจํ•ฉ๋‹ˆ๋‹ค.
    • ํฌ์†Œ ํ–‰๋ ฌ(Sparse Matrix): ํŠน์ • ํšŒ์ฐจ์— ์—†๋˜ ์งˆ๋ฌธ ์นธ์€ ๋น„์–ด์žˆ๋Š”(NaN) ์ƒํƒœ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. Parquet ํฌ๋งท์€ ์ด๋Ÿฐ ๋นˆ ๊ณต๊ฐ„์„ ๋งค์šฐ ํšจ์œจ์ ์œผ๋กœ ์••์ถ•ํ•˜์—ฌ ์ €์žฅํ•˜๋ฏ€๋กœ, ์ˆ˜์ฒœ ๊ฐœ์˜ ์—ด์ด ์žˆ์–ด๋„ ํŒŒ์ผ ์šฉ๋Ÿ‰์ด ๋งค์šฐ ์ž‘๊ฒŒ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.
  • ์‘๋‹ต์ž ์‹๋ณ„ ์ฒด๊ณ„ (Unique Identification):
    • survey_round: ์ „์ฒด 160์—ฌ ํšŒ์ฐจ ์ค‘ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๊ฐ€ ์ˆ˜์ง‘๋œ ํŠน์ • ์กฐ์‚ฌ ํšŒ์ฐจ (์˜ˆ: 100ํšŒ NBS).
    • respondent_id: ํ•ด๋‹น ํšŒ์ฐจ ๋‚ด์—์„œ ์‘๋‹ต์ž์—๊ฒŒ ๋ถ€์—ฌ๋œ ๊ณ ์œ  ๋ฒˆํ˜ธ.
    • ์‹๋ณ„ ๋ฐฉ์‹: survey_round์™€ respondent_id์˜ ์กฐํ•ฉ(๋ณตํ•ฉ ํ‚ค)์„ ํ†ตํ•ด 16๋งŒ์—ฌ ๋ช…์˜ ์ „์ฒด ์‘๋‹ต์ž ์ค‘ ํŠน์ • ๊ฐœ์ธ์„ ์œ ์ผํ•˜๊ฒŒ ์ฐพ์•„๋‚ด๊ณ  ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ์ฃผ์š” ์ธ๊ตฌํ†ต๊ณ„ ํ†ต๊ณ„:
    • ์ด ๋ฐ์ดํ„ฐ ๊ฑด์ˆ˜: 166,721๋ช… (์‘๋‹ต์ž ๋‹จ์œ„)
    • ์„ฑ๋ณ„ ๋ถ„ํฌ: ๋‚จ์ž (50.1%), ์—ฌ์ž (49.9%)
    • ์—ฐ๋ น ํ†ต๊ณ„: ํ‰๊ท  50.0์„ธ (ํ‘œ์ค€ํŽธ์ฐจ 17.4), ์ตœ์†Œ 18์„ธ ~ ์ตœ๋Œ€ 99์„ธ
    • ์ง€์—ญ ๋ถ„ํฌ (Top 5): ๊ฒฝ๊ธฐ(25.5%), ์„œ์šธ(18.5%), ๋ถ€์‚ฐ(6.9%), ๊ฒฝ๋‚จ(6.5%), ์ธ์ฒœ(5.7%)
    • ์ฃผ์š” ์ง์—…๊ตฐ: ์‚ฌ๋ฌด/๊ธฐ์ˆ ์ง(25.2%), ์ฃผ๋ถ€(18.2%), ์ž์˜์—…(15.7%), ๋ฌด์ง/ํ‡ด์ง/๊ธฐํƒ€(14.7%)
  • ์ „์ฒด ์งˆ๋ฌธ ํ•ญ๋ชฉ ํ™•์ธ: NBS ๊ณ ์œ  ์„ค๋ฌธ ๋ฌธํ•ญ ๋ฆฌ์ŠคํŠธ(1,219๊ฑด)
  • ์ฒ˜๋ฆฌ ๋‚ด์šฉ:
    • ํ†ตํ•ฉ: 163๊ฐœ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ์„ค๋ฌธ ํŒŒ์ผ์„ ํ•˜๋‚˜์˜ ๊ฑฐ๋Œ€ ๋ฐ์ดํ„ฐ์…‹์œผ๋กœ ๋ณ‘ํ•ฉ.
    • ๊ฐ’ ํ‘œ์ค€ํ™”: "๋‚จ/์—ฌ", "๋‚จ์„ฑ/์—ฌ์„ฑ" ๋“ฑ ๋‹ค์–‘ํ•œ ํ‘œ๊ธฐ๋ฅผ "๋‚จ์ž/์—ฌ์ž"๋กœ ํ†ต์ผ.

๋‹จ๊ณ„ 3: ์งˆ๋ฌธ ์˜๋ฏธ๋ก ์  ์ธ๋ฑ์‹ฑ (index_questions.py โ†’ nbs_questions_index.parquet)

  • ๊ณ ์œ  ๋ฌธํ•ญ ์ถ”์ถœ ๋ฐ ์œ ๋‹ˆํ”ผ์ผ€์ด์…˜(Unification) ๊ธฐ์ˆ : 163ํšŒ์˜ ์„ค๋ฌธ์กฐ์‚ฌ์—์„œ ํŒŒํŽธํ™”๋œ ์งˆ๋ฌธ๋“ค์„ 1,219๊ฐœ์˜ ๊ณ ์œ  ์ง€์‹์œผ๋กœ ํ†ตํ•ฉํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ ๊ธฐ์ˆ ์ด ์ ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

    1. Preprocessing (์ง€๋Šฅํ˜• ๋งคํ•‘): ์›๋ณธ ๋ฐ์ดํ„ฐ์˜ ๋ณ€์ˆ˜๋ช…(q1)์„ PDF๋ฅผ ํ†ตํ•ด ์ „์ฒด ๋ฌธ์žฅ์œผ๋กœ ๋ณต์›ํ•˜์—ฌ ํ†ตํ•ฉ์˜ ๊ธฐ์ดˆ๋ฅผ ๋งˆ๋ จํ–ˆ์Šต๋‹ˆ๋‹ค.
    2. Noise Reduction (๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ œ์™ธ): ์•„์ด๋””, ๊ฐ€์ค‘์น˜ ๋“ฑ ๋น„์งˆ๋ฌธ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ์™ธํ•˜์—ฌ ์ˆœ์ˆ˜ ์งˆ๋ฌธ 1,219๊ฑด์„ ํ™•๋ณดํ–ˆ์Šต๋‹ˆ๋‹ค.
    3. Stable Vector Search (๊ณ ์„ฑ๋Šฅ ์„ ํ˜• ๊ฒ€์ƒ‰):
      • ๋ณ€๊ฒฝ ์‚ฌํ•ญ: ๊ธฐ์กด์˜ ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(ChromaDB) ๋Œ€์‹ , Pandas + NumPy ๊ธฐ๋ฐ˜์˜ ์„ ํ˜• ๋ฒกํ„ฐ ๊ฒ€์ƒ‰ ๋ฐฉ์‹์„ ์ฑ„ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.
      • ์ด์œ : Windows ํ™˜๊ฒฝ์—์„œ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ˜ธํ™˜์„ฑ(HNSW ์˜ค๋ฅ˜)์„ ์™„๋ฒฝํžˆ ํ•ด๊ฒฐํ•˜๊ณ , 1,219๊ฑด ์ •๋„์˜ ๋ฐ์ดํ„ฐ ๊ทœ๋ชจ์—์„œ๋Š” ๋ณ„๋„ DB ์—”์ง„ ์—†์ด๋„ ์†Œ์ˆ˜ ๋ฐ€๋ฆฌ์ดˆ(ms) ๋‹จ์œ„์˜ ์ดˆ๊ณ ์† ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
    4. Virtual Unification (์˜๋ฏธ๋ก ์  ๋ณด์ •): ๋ฏธ์„ธํ•˜๊ฒŒ ๋‹ค๋ฅธ ์งˆ๋ฌธ๋“ค์€ SBERT ์ž„๋ฒ ๋”ฉ๊ณผ ์ฝ”์‚ฌ์ธ ์œ ์‚ฌ๋„(Cosine Similarity) ๊ณ„์‚ฐ์„ ํ†ตํ•ด ๊ฒ€์ƒ‰ ์‹œ์ ์— ์ง€๋Šฅ์ ์œผ๋กœ ํ†ตํ•ฉ ์ฐธ์กฐ๋ฉ๋‹ˆ๋‹ค.
  • ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ: snunlp/KR-SBERT-V40K-klueNLI-augSTS

  • ์ธ๋ฑ์Šค ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ (nbs_questions_index.parquet):

    • question: ์งˆ๋ฌธ ์›๋ฌธ (์˜ˆ: "๋Œ€ํ†ต๋ น ๊ตญ์ •์šด์˜ ํ‰๊ฐ€")
    • vector: SBERT๊ฐ€ ์ƒ์„ฑํ•œ 768์ฐจ์›์˜ ์ˆ˜์น˜ ๋ฒกํ„ฐ ๋ฆฌ์ŠคํŠธ.
  • ๊ฒ€์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (Cosine Similarity):

    • NumPy๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž์˜ ์งˆ๋ฌธ๊ณผ ์ธ๋ฑ์Šค๋œ 1,219๊ฐœ ์งˆ๋ฌธ ์‚ฌ์ด์˜ ๊ฐ๋„๋ฅผ ๊ณ„์‚ฐ, ๊ฐ€์žฅ ์˜๋ฏธ๊ฐ€ ๊ฐ€๊นŒ์šด ์งˆ๋ฌธ๋“ค์„ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.

3. ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์‹œ์Šคํ…œ ์ž‘๋™ ์›๋ฆฌ (Technical Deep-Dive)

1) ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰ ํ”„๋กœ์„ธ์Šค (Data Flow Diagram)

์‹œ์Šคํ…œ์€ '๋ˆ„๊ตฌ์ธ์ง€(์ธ๊ตฌํ†ต๊ณ„)'์™€ '์–ด๋–ค ์„ฑํ–ฅ์ธ์ง€(๊ณผ๊ฑฐ ๋‹ต๋ณ€)'๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ๋‹ต๋ณ€์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

graph TD
    A["์‚ฌ์šฉ์ž ์ž…๋ ฅ (์งˆ๋ฌธ + ์กฐ๊ฑด)"] --> B{"1๋‹จ๊ณ„: ์ธ๊ตฌํ†ต๊ณ„ ํ•„ํ„ฐ๋ง\n(Parquet/Hard Filter)"}
    B -- "์ผ์น˜์ž ๋ฐœ๊ฒฌ" --> C["์‘๋‹ต์ž ํ›„๋ณด๊ตฐ (Candidates)"]
    B -- "์ผ์น˜์ž ์—†์Œ" --> B_Fail["๊ฒฝ๊ณ  ํ›„ ์ข…๋ฃŒ (์กฐ๊ฑด ์™„ํ™” ๊ถŒ์žฅ)"]
    
    A --> D{"2๋‹จ๊ณ„: ์˜๋ฏธ ๊ฒ€์ƒ‰\n(Vector DB/Soft Filter)"}
    D --> E["์œ ์‚ฌ ์งˆ๋ฌธ Top-5 ์ถ”์ถœ"]
    
    C --> F{"3๋‹จ๊ณ„: ์ปจํ…์ŠคํŠธ ์ถ”์ถœ\n(Grounding)"}
    E --> F
    
    F --> G["A. ํŽ˜๋ฅด์†Œ๋‚˜ ํ•ต์‹ฌ ์งˆ๋ฌธ ์Šค์บ”\n(์ •์น˜/์ด๋…/๊ฒฝ์ œ ๋“ฑ)"]
    F --> H["B. ์œ ์‚ฌ ์งˆ๋ฌธ ๋‹ต๋ณ€ ๋งค์นญ"]
    
    G --> I["์ตœ์ข… ์ปจํ…์ŠคํŠธ (์ง€์‹ ๋ฒ ์ด์Šค)"]
    H --> I
    
    I --> J["4๋‹จ๊ณ„: LLM ๋‹ต๋ณ€ ์ƒ์„ฑ\n(Gemini 2.5 Flash)"]
    J --> K["์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์™„๋ฃŒ (JSON ์ €์žฅ)"]

2) ์˜ˆ์™ธ ์ƒํ™ฉ ๋ฐ ์ž‘๋™ ์›๋ฆฌ (FAQ)

  • Q: ์ธ๊ตฌํ†ต๊ณ„ ์กฐ๊ฑด(์„ฑ๋ณ„/์ง€์—ญ ๋“ฑ)์— ๋งž๋Š” ์‘๋‹ต์ž๊ฐ€ ์—†์œผ๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”?
    • ํ˜„์žฌ ์‹œ์Šคํ…œ์€ **'์กฐ๊ฑด ์™„ํ™”'**๋ฅผ ์œ„ํ•ด ๋นˆ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 45์„ธ ์‘๋‹ต์ž๊ฐ€ ์—†๋‹ค๋ฉด 40๋Œ€ ์ „์ฒด๋กœ ๋ฒ”์œ„๋ฅผ ๋„“ํžˆ๊ฑฐ๋‚˜ ํŠน์ • ์กฐ๊ฑด์„ ์ƒ๋žตํ•˜์—ฌ ๋‹ค์‹œ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • Q: ์กฐ๊ฑด์€ ๋งž๋Š”๋ฐ, ์œ ์‚ฌํ•œ ๊ณผ๊ฑฐ ์งˆ๋ฌธ์— ๋‹ตํ•œ ๊ธฐ๋ก์ด ์—†๋Š” ์‘๋‹ต์ž๋ผ๋ฉด์š”?
    • ์‹œ์Šคํ…œ์˜ **'์ด์ค‘ ์•ˆ์ „์žฅ์น˜(Safety Net)'**๊ฐ€ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์งˆ๋ฌธ๊ณผ ์ง์ ‘์ ์ธ ์—ฐ๊ด€์ด ์—†๋”๋ผ๋„ ํ•ด๋‹น ์‘๋‹ต์ž๊ฐ€ ๊ณผ๊ฑฐ์— ๋‹ตํ–ˆ๋˜ ์ •์น˜์  ์„ฑํ–ฅ, ์ด๋…, ์ง€์ง€ ์ •๋‹น, ๊ฒฝ์ œ์  ๊ณ„์ธต ์˜์‹ ๋“ฑ ํŽ˜๋ฅด์†Œ๋‚˜๋ฅผ ๊ฒฐ์ •์ง“๋Š” ํ•ต์‹ฌ ๋‹ต๋ณ€์„ ์šฐ์„ ์ ์œผ๋กœ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.
    • ๋งŒ์•ฝ ์ด๋งˆ์ €๋„ ์—†๋‹ค๋ฉด, LLM์€ ์ž…๋ ฅ๋œ ์ธ๊ตฌํ†ต๊ณ„ ์ •๋ณด(์˜ˆ: "์„œ์šธ ๊ฑฐ์ฃผ 30๋Œ€ ๋‚จ์„ฑ")๋งŒ์„ ๋ฐ”ํƒ•์œผ๋กœ ์‚ฌํšŒ์  ํ†ต๋…์— ๊ธฐ๋ฐ˜ํ•œ ๋‹ต๋ณ€์„ ์ƒ์„ฑํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • Q: referenced_context๊ฐ€ ์งˆ๋ฌธ ์ฃผ์ œ์™€ ์ง์ ‘์ ์ธ ๊ด€๋ จ์ด ์—†์–ด ๋ณด์ด๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?
    • ์ด์ค‘ ๊ฒ€์ƒ‰ ๋กœ์ง: ์‹œ์Šคํ…œ์€ **A. ํ•ต์‹ฌ ํŽ˜๋ฅด์†Œ๋‚˜ ๋ฌธํ•ญ(๊ฐ€์น˜๊ด€)**๊ณผ **B. ์ฃผ์ œ ์œ ์‚ฌ ๋ฌธํ•ญ(๊ธฐ์–ต)**์„ ๋™์‹œ์— ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.
    • ํฌ์†Œ์„ฑ ๋Œ€์‘: ๋งŒ์•ฝ ํ•ด๋‹น ์‘๋‹ต์ž๊ฐ€ ์ฐธ์—ฌํ•œ ํšŒ์ฐจ์— ์งˆ๋ฌธ ์ฃผ์ œ์™€ ์˜๋ฏธ์ ์œผ๋กœ ์œ ์‚ฌํ•œ ์งˆ๋ฌธ์ด ์—†์—ˆ์„ ๊ฒฝ์šฐ(ํฌ์†Œ ๋ฐ์ดํ„ฐ), ์‹œ์Šคํ…œ์€ ์•„๋ฐ”ํƒ€์˜ ๋‹ต๋ณ€ ๋…ผ๋ฆฌ๋ฅผ ๋ณด๊ฐ•ํ•˜๊ธฐ ์œ„ํ•ด ๊ทธ ์‚ฌ๋žŒ์˜ ๊ทผ๋ณธ์ ์ธ ๊ฐ€์น˜๊ด€(์ •์น˜/์ด๋…/๊ณ„์ธต ๋“ฑ)์„ ์ปจํ…์ŠคํŠธ๋กœ ์šฐ์„  ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” LLM์ด "์ด๋Ÿฌํ•œ ์„ฑํ–ฅ์˜ ์‚ฌ๋žŒ์ด๋ผ๋ฉด ์ƒˆ๋กœ์šด ์ด์Šˆ์— ๋Œ€ํ•ด ์ด๋ ‡๊ฒŒ ๋‹ตํ•  ๊ฒƒ์ด๋‹ค"๋ผ๊ณ  ํƒ€๋‹นํ•˜๊ฒŒ ์ถ”๋ก ํ•˜๋„๋ก ๋•๋Š” ์žฅ์น˜์ž…๋‹ˆ๋‹ค.
  • Q: ์ธ๊ตฌํ†ต๊ณ„ ์กฐ๊ฑด๊ณผ ์งˆ๋ฌธ ์œ ์‚ฌ๋„ ์‚ฌ์ด์˜ ๊ด€๊ณ„ ์„ค์ •์€ ์–ด๋–ป๊ฒŒ ํ•˜๋‚˜์š”?
    • **์ธ๊ตฌํ†ต๊ณ„(Hard Filter)**๋Š” ์•„๋ฐ”ํƒ€์˜ '์‹ ๋ถ„'์„ ๊ฒฐ์ •ํ•˜๊ณ , **์งˆ๋ฌธ ์œ ์‚ฌ๋„(Soft Filter)**๋Š” ๊ทธ ์•„๋ฐ”ํƒ€์˜ '๊ธฐ์–ต'์„ ์†Œํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    • ์‹ ๋ถ„์ด ๊ฒฐ์ •๋œ ์‘๋‹ต์ž์˜ ํ–‰(Row)์—์„œ ์˜๋ฏธ์ ์œผ๋กœ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ธฐ์–ต(๋‹ต๋ณ€)์„ ์ฐพ์•„ LLM์—๊ฒŒ ์ „๋‹ฌํ•จ์œผ๋กœ์จ, "์ด ์‚ฌํšŒ์  ์œ„์ƒ์„ ๊ฐ€์ง„ ์‚ฌ๋žŒ์€ ์ด๋Ÿฐ ์งˆ๋ฌธ์— ์ด๋ ‡๊ฒŒ ๋‹ตํ•  ๊ฒƒ์ด๋‹ค"๋ผ๋Š” ๋…ผ๋ฆฌ์  ํƒ€๋‹น์„ฑ์„ ํ™•๋ณดํ•ฉ๋‹ˆ๋‹ค.
  • Q: ์กฐ๊ฑด์— ๋งž๋Š” ํ›„๋ณด์ž๊ฐ€ 1,000๋ช…์ด๋ผ๋ฉด ์ตœ์ข… 10๋ช…์€ ์–ด๋–ค ๊ธฐ์ค€์œผ๋กœ ์„ ์ •๋˜๋‚˜์š”?
    • ๋ฌด์ž‘์œ„ ์ƒ˜ํ”Œ๋ง(Random Sampling) ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. 1์ฐจ ํ•„ํ„ฐ๋ง(์ธ๊ตฌํ†ต๊ณ„)์„ ํ†ต๊ณผํ•œ ํ›„๋ณด๊ตฐ์ด ์„ค์ •ํ•œ ์ƒ˜ํ”Œ ์ˆ˜(--sample)๋ณด๋‹ค ๋งŽ์„ ๊ฒฝ์šฐ, ์‹œ์Šคํ…œ์€ ์ง‘๋‹จ ๋‚ด ํŽธํ–ฅ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๊ทธ๋“ค ์ค‘ ๋ฌด์ž‘์œ„๋กœ ์ตœ์ข… ๋Œ€์ƒ์ž๋ฅผ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.
  • Q: ์™œ ์งˆ๋ฌธ๊ณผ ๊ฐ€์žฅ ์œ ์‚ฌํ•œ ๋‹ต๋ณ€์„ ํ•œ ์‚ฌ๋žŒ์„ ์ˆœ์„œ๋Œ€๋กœ ๋ฝ‘์ง€ ์•Š๊ณ  ๋ฌด์ž‘์œ„๋กœ ๋ฝ‘๋‚˜์š”?
    • ์„ ํƒ ํŽธํ–ฅ(Selection Bias) ๋ฐฉ์ง€: ์งˆ๋ฌธ๊ณผ ์œ ์‚ฌํ•œ ์ƒ๊ฐ์„ ๊ฐ€์ง„ ์‚ฌ๋žŒ๋งŒ ๊ณจ๋ผ๋‚ธ๋‹ค๋ฉด, ํ•ด๋‹น ์„ธ๋Œ€๋‚˜ ์ง€์—ญ ๋‚ด์˜ ๋‹ค์–‘ํ•œ ๊ฐ€์น˜๊ด€์ด ์†Œ๋ฉธํ•˜๊ณ  ๋‹จ์ผํ•œ ๋ชฉ๋‹จ๋งŒ ๋‚จ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
    • ํ†ต๊ณ„์  ๋‹ค์–‘์„ฑ ๋ณด์กด: ๊ฐ™์€ '์„œ์šธ 30๋Œ€ ์—ฌ์„ฑ'์ด๋ผ๋„ ์ง„๋ณด/๋ณด์ˆ˜, ๋ถ€์œ ํ•จ/๊ฐ€๋‚œํ•จ ๋“ฑ ๋‹ค์–‘ํ•œ ํŽ˜๋ฅด์†Œ๋‚˜๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ๋ฌด์ž‘์œ„ ์ƒ˜ํ”Œ๋ง์„ ํ†ตํ•ด ์ด๋Ÿฌํ•œ ์ง‘๋‹จ ๋‚ด ๋‹ค์–‘ํ•œ ์ŠคํŽ™ํŠธ๋Ÿผ์˜ ๋ชฉ์†Œ๋ฆฌ๋ฅผ ๊ณจ๊ณ ๋ฃจ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์— ๋ฐ˜์˜ํ•˜์—ฌ ์‹ค์ œ ์—ฌ๋ก  ์ง€ํ˜•์— ๊ฐ€๊นŒ์šด ๊ฒฐ๊ณผ๋ฅผ ์–ป๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค.

4. ์ž‘๋™ ์‚ฌ๋ก€ (Example Case Study)

[์‚ฌ์šฉ์ž ์ž…๋ ฅ]

  • ์งˆ๋ฌธ: "๊ธฐ๋ณธ์†Œ๋“์ œ ๋„์ž…์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ?"
  • ์กฐ๊ฑด: ์„ฑ๋ณ„=๋‚จ์ž, ์ง€์—ญ=์„œ์šธ, ์—ฐ๋ น=40, ์ง์—…=์ž์˜์—…

[์‹œ์Šคํ…œ ๋‚ด๋ถ€ ์ž‘๋™]

  1. ๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ง: consolidated_nbs_data.parquet์—์„œ ์„œ์šธ ๊ฑฐ์ฃผ 40์„ธ ๋‚จ์„ฑ ์ž์˜์—…์ž๋“ค์„ ์ถ”์ถœ.
  2. ์œ ์‚ฌ ์งˆ๋ฌธ ๊ฒ€์ƒ‰: ChromaDB์—์„œ "๋ณต์ง€ ์ •์ฑ… ํ™•๋Œ€", "์žฌ์ •๋‚œ ํ•ด๊ฒฐ ๋ฐฉ์•ˆ" ๋“ฑ์˜ ์งˆ๋ฌธ์„ ์œ ์‚ฌ ๋ฌธํ•ญ์œผ๋กœ ์„ ์ •.
  3. ์ปจํ…์ŠคํŠธ ๊ตฌ์ถ•: ์ถ”์ถœ๋œ ์‘๋‹ต์ž ์ค‘ ํ•œ ๋ช…์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‹ˆ:
    • ์ •์น˜ ์„ฑํ–ฅ: ๋ณด์ˆ˜
    • ๋ณต์ง€ ์ •์ฑ…์— ๋Œ€ํ•œ ๋‹ต๋ณ€: "๋ฐ˜๋Œ€ (์„ธ๊ธˆ ๋ถ€๋‹ด ์ฆ๋Œ€ ์šฐ๋ ค)"
    • ๋ถ€๋™์‚ฐ ๊ฐ€๊ฒฉ์— ๋Œ€ํ•œ ๋‹ต๋ณ€: "๊ธ‰๋“ฑ ๋ฐ˜๋Œ€"
  4. LLM ์ƒ์„ฑ (Gemini):
    • ์œ„ ์ •๋ณด๋“ค์„ ์ข…ํ•ฉํ•˜์—ฌ "๋ณด์ˆ˜์  ๊ฐ€์น˜๊ด€์„ ๊ฐ€์ง„ 40๋Œ€ ์ž์˜์—…์ž๋กœ์„œ, ์„ธ๊ธˆ ๋ถ€๋‹ด์ด ๋Š˜์–ด๋‚  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ณธ์†Œ๋“์ œ์— ๋Œ€ํ•ด์„œ๋Š” ์‹ ์ค‘ํ•˜๊ฑฐ๋‚˜ ๋ฐ˜๋Œ€ํ•˜๋Š” ์ž…์žฅ"์˜ ๋‹ต๋ณ€์„ ์ƒ์„ฑ.
    • ๊ฒฐ๊ณผ JSON์˜ referenced_context์— ์œ„์˜ ์ฐธ์กฐ๋œ ๊ณผ๊ฑฐ ๋‹ต๋ณ€๋“ค์„ ๋…ธ์ถœ.

5. ํ˜„์žฌ ์‚ฌ์šฉ ๋ฐฉ๋ฒ• (Usage Guide)

์„ค๋ฌธ ์‹œ์Šคํ…œ์€ ํŽ˜๋ฅด์†Œ๋‚˜_์„ค๋ฌธ์กฐ์‚ฌ_์ „๊ตญ์ง€ํ‘œ์กฐ์‚ฌ ํด๋” ๋‚ด์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

์˜ต์…˜ A: ์‹ค์ œ ์‘๋‹ต์ž ์ƒ˜ํ”Œ๋ง ๋ชจ๋“œ (avatar_actual.py)

์‹ค์ œ ๊ณผ๊ฑฐ ์‘๋‹ต์ž๋“ค์˜ ๋‹ต๋ณ€ ์ด๋ ฅ์„ ๋ฐ”ํƒ•์œผ๋กœ ๊ฐ€์žฅ ์ƒ์ƒํ•œ ์‘๋‹ต์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

# ์˜ˆ์‹œ 1: ๋‹จ์ˆœ ์งˆ๋ฌธ ํ˜•์‹ (๊ฒฝ๊ธฐ๋„ ๊ฑฐ์ฃผ 31~40์„ธ ๋‚จ์„ฑ 5๋ช…)
..\.venv\Scripts\python.exe avatar_actual.py --question "์ •๋…„์—ฐ์žฅ์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•ด?" --region "๊ฒฝ๊ธฐ" --gender "๋‚จ์ž" --age "31~40" --job "์‚ฌ๋ฌด/๊ธฐ์ˆ ์ง" --sample 5

# ์˜ˆ์‹œ 2: ์„ธ๋ถ€ ์„ค๋ช… ๋ฐ 5์  ์ฒ™๋„ ํฌํ•จ (์ตœ์ €์ž„๊ธˆ ๊ด€๋ จ ์‹ฌํ™” ์‹œ๋ฎฌ๋ ˆ์ด์…˜)
..\.venv\Scripts\python.exe avatar_actual.py --question "์ตœ๊ทผ ๊ณ ๋ฌผ๊ฐ€์™€ ์ €์„ฑ์žฅ ๊ธฐ์กฐ ์†์—์„œ ์„œ๋ฏผ ๊ฒฝ์ œ์˜ ์•ˆ์ •์„ ์œ„ํ•ด ํ˜„์žฌ์˜ ์ตœ์ €์ž„๊ธˆ์„ ๋Œ€ํญ ์ธ์ƒํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ฃผ์žฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•ด ์–ผ๋งˆ๋‚˜ ๋™์˜ํ•˜์‹ญ๋‹ˆ๊นŒ? (1์ : ์ „ํ˜€ ๋™์˜ ์•ˆํ•จ ~ 5์ : ๋งค์šฐ ๋™์˜)" --region "์„œ์šธ" --gender "์—ฌ์ž" --age "25~35" --sample 5

์˜ต์…˜ B: ๊ฐ€์ƒ ํ†ต๊ณ„ ๊ธฐ๋ฐ˜ ๋ชจ๋“œ (avatar_synthetic.py)

ํŠน์ • ๊ทธ๋ฃน์˜ ํ†ต๊ณ„์  ๋‹ต๋ณ€ ๋ถ„ํฌ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ๊ฐ€์ƒ์˜ ํŽ˜๋ฅด์†Œ๋‚˜ ๋‹ต๋ณ€์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

# ์˜ˆ์‹œ: ์„œ์šธ ๊ฑฐ์ฃผ 20๋Œ€ ์—ฌ์„ฑ ํ•™์ƒ ๊ทธ๋ฃน์˜ ํ†ต๊ณ„ ๊ธฐ๋ฐ˜ 10๋ช… ์ƒ์„ฑ
..\.venv\Scripts\python.exe avatar_synthetic.py --question "๊ณต์œ  ๊ฒฝ์ œ ์„œ๋น„์Šค ์ด์šฉ ์˜ํ–ฅ์€?" --region "์„œ์šธ" --gender "์—ฌ์ž" --age "20" --job "ํ•™์ƒ" --sample 10

ํŒŒ๋ผ๋ฏธํ„ฐ ์ƒ์„ธ ์„ค๋ช…

  • --question: ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•  ์ƒˆ๋กœ์šด ์งˆ๋ฌธ (ํ•„์ˆ˜)
    • ์งˆ๋ฌธ ์„ค๊ณ„ ๊ถŒ์žฅ์‚ฌํ•ญ:
      • ์ด์Šˆ ์ค‘์‹ฌ ์งˆ๋ฌธ: ํŠน์ • ์ธ๋ฌผ์— ๋Œ€ํ•œ ๊ฐœ์ธ์  ํ‰๊ฐ€๋ณด๋‹ค๋Š” ์‚ฌํšŒ์  ์ด์Šˆ๋‚˜ ์ •์ฑ…์  ์‚ฌ์•ˆ์— ๋Œ€ํ•œ ์งˆ๋ฌธ์ด ๋” ํƒ€๋‹นํ•œ ๋‹ต๋ณ€์„ ์œ ๋„ํ•ฉ๋‹ˆ๋‹ค.
      • ๋ฐฐ๊ฒฝ ์„ค๋ช… ํฌํ•จ: ๋‹จ์ˆœํ•œ ์งˆ๋ฌธ๋ณด๋‹ค๋Š” ์ด์Šˆ์— ๋Œ€ํ•œ ๋งฅ๋ฝ(๋ฐฐ๊ฒฝ ์„ค๋ช…)์„ ํ•จ๊ป˜ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
        • ์˜ˆ์‹œ (๊ถŒ์žฅ): "์ตœ๊ทผ ๊ณ ๋ฌผ๊ฐ€ ์ƒํ™ฉ์—์„œ ์„œ๋ฏผ ๊ฒฝ์ œ ์•ˆ์ •์„ ์œ„ํ•ด ์ตœ์ €์ž„๊ธˆ์„ ์ธ์ƒํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ฃผ์žฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•ด..."
      • ์‘๋‹ต ์ฒ™๋„ ๋ช…์‹œ: ์ •๋Ÿ‰์ ์ธ ๋ถ„์„์ด๋‚˜ ๊ตฌ์กฐํ™”๋œ ๋‹ต๋ณ€์ด ํ•„์š”ํ•˜๋‹ค๋ฉด "์–ผ๋งˆ๋‚˜ ๋™์˜ํ•˜์‹ญ๋‹ˆ๊นŒ? (1: ์ „ํ˜€ ๋™์˜ ์•ˆํ•จ ~ 5: ๋งค์šฐ ๋™์˜)"์™€ ๊ฐ™์ด ๊ตฌ์ฒด์ ์ธ ์ฒ™๋„๋ฅผ ์ œ์‹œํ•˜๋Š” ๊ฒƒ์„ ๊ฐ•๋ ฅํžˆ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
  • --region: ์ง€์—ญ (์ž…๋ ฅ ๊ฐ€๋Šฅ: ์„œ์šธ, ๊ฒฝ๊ธฐ, ์ธ์ฒœ, ๊ฐ•์›, ๋ถ€์‚ฐ, ๋Œ€๊ตฌ, ๊ด‘์ฃผ, ๋Œ€์ „, ์šธ์‚ฐ, ์„ธ์ข…, ์ถฉ๋ถ, ์ถฉ๋‚จ, ์ „๋ถ, ์ „๋‚จ, ๊ฒฝ๋ถ, ๊ฒฝ๋‚จ, ์ œ์ฃผ)
  • --gender: ์„ฑ๋ณ„ (์ž…๋ ฅ ๊ฐ€๋Šฅ: ๋‚จ์ž/๋‚จ, ์—ฌ์ž/์—ฌ)
  • --age: ๋‚˜์ด ๋˜๋Š” ๋‚˜์ด ๋ฒ”์œ„ (33, 20~29 ๋“ฑ ์ž…๋ ฅ ๊ฐ€๋Šฅ)
  • --job: ์ง์—… (์ž…๋ ฅ ๊ฐ€๋Šฅ: ํ•™์ƒ, ์‚ฌ๋ฌด/๊ธฐ์ˆ ์ง, ์ž์˜์—…, ์ฃผ๋ถ€, ๊ฒฝ์˜/๊ด€๋ฆฌ/์ „๋ฌธ์ง, ์ƒ์‚ฐ/๊ธฐ๋Šฅ/๋…ธ๋ฌด์ง, ๋†/๋ฆผ/์ˆ˜์‚ฐ์—…, ๋ฌด์ง/ํ‡ด์ง/๊ธฐํƒ€)
  • --sample: ์ƒ์„ฑํ•  ์•„๋ฐ”ํƒ€/์‘๋‹ต ์ˆ˜
    • ๊ถŒ์žฅ ์‚ฌํ•ญ (Stable & Conservative): 10 ~ 50๊ฐœ
    • ์ด์œ : ์‹œ์Šคํ…œ์€ ์‘๋‹ต์ž๋ณ„๋กœ ๊ฐœ๋ณ„์ ์ธ LLM ํ˜ธ์ถœ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. Gemini 2.5 Flash Lite์˜ ์†๋„์™€ API ์•ˆ์ •์„ฑ(๋„คํŠธ์›Œํฌ ํƒ€์ž„์•„์›ƒ ๋ฐ ์†๋„ ์ œํ•œ)์„ ๊ณ ๋ คํ•  ๋•Œ, ํ•œ ๋ฒˆ์˜ ์‹คํ–‰์—์„œ 50๊ฐœ ๋‚ด์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์•ˆ์ •์ ์ด๊ณ  ๋น ๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๋Ÿ‰ ์‹œ๋‚˜๋ฆฌ์˜ค(100๊ฐœ ์ด์ƒ)๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์—ฌ๋Ÿฌ ๋ฒˆ ๋‚˜๋ˆ„์–ด ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

6. ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋ชจ๋“œ ์ƒ์„ธ ๋น„๊ต (Actual vs Synthetic)

์‹œ์Šคํ…œ์€ ๋ชฉ์ ์— ๋”ฐ๋ผ '๊ฐœ๋ณ„์„ฑ'๊ณผ 'ํ†ต๊ณ„์„ฑ' ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‘ ๊ฐ€์ง€ ์‹คํ–‰ ๋ชจ๋“œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

1) ๋น„๊ต ์š”์•ฝ ํ…Œ์ด๋ธ”

๋น„๊ต ํ•ญ๋ชฉ ์˜ต์…˜ A: ์‹ค์ œ ์‘๋‹ต์ž ๋ชจ๋“œ (actual) ์˜ต์…˜ B: ๊ฐ€์ƒ ํ†ต๊ณ„ ๋ชจ๋“œ (synthetic)
ํ•ต์‹ฌ ์ฒ ํ•™ "์‹ค์ œ ์กด์žฌํ–ˆ๋˜ ์‚ฌ๋žŒ์˜ ๊ธฐ์–ต์„ ์†Œํ™˜" "ํŠน์ • ๊ทธ๋ฃน์˜ ํ†ต๊ณ„์  ๊ฒฝํ–ฅ์„ฑ์„ ์˜์ธํ™”"
์ปจํ…์ŠคํŠธ ๊ตฌ์„ฑ ํŠน์ • ๊ฐœ์ธ์˜ ๊ฐœ๋ณ„ ๋‹ต๋ณ€ ์ด๋ ฅ (1:1 ๋งค์นญ) ๊ทธ๋ฃน ์ „์ฒด์˜ ๋‹ต๋ณ€ ๋ถ„ํฌ ํ†ต๊ณ„ (N:1 ์š”์•ฝ)
์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋Œ€์ƒ ๋ฐ์ดํ„ฐ์ƒ์˜ ์‹ค์ œ ์ธ๋ฌผ (์˜ˆ: ID 6038๋ฒˆ ์‘๋‹ต์ž) ํ†ต๊ณ„๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ƒ์„ฑ๋œ ๊ฐ€์ƒ์˜ ํŽ˜๋ฅด์†Œ๋‚˜
๋‹ต๋ณ€์˜ ํŠน์ง• ํŒŒํŽธํ™”๋˜์–ด ์žˆ์œผ๋‚˜ ๊ทน๋„๋กœ ๊ตฌ์ฒด์ ์ด๊ณ  ํ˜„์‹ค์ ์ž„ ๊ทธ๋ฃน์˜ ํ‰๊ท ์ ์ธ ๊ฐ€์น˜๊ด€๊ณผ ํŠธ๋ Œ๋“œ๋ฅผ ์ž˜ ๋ฐ˜์˜ํ•จ
์ถ”์ฒœ ์šฉ๋„ ์‹ฌ์ธต ์ธํ„ฐ๋ทฐ(FGI) ์ˆ˜์ค€์˜ ์ƒ์ƒํ•œ ๋ฐ˜์‘ ํ•„์š” ์‹œ ์ง‘๋‹จ์  ์—ฌ๋ก ์˜ ํ๋ฆ„์ด๋‚˜ ํ†ต๊ณ„์  ๊ฒฝํ–ฅ ํŒŒ์•… ์‹œ

2) ์‚ฌ๋ก€๋ฅผ ํ†ตํ•œ ์ฐจ์ด ์„ค๋ช… (์„œ์šธ ๊ฑฐ์ฃผ, 20๋Œ€ ์—ฌ์„ฑ, ํ•™์ƒ ๊ทธ๋ฃน)

์งˆ๋ฌธ: "๋Œ€ํ•™ ๋“ฑ๋ก๊ธˆ ๋ฐ˜๊ฐ’ ์ธํ•˜ ์ •์ฑ…์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ?"

[์˜ต์…˜ A: ์‹ค์ œ ์‘๋‹ต์ž ๋ชจ๋“œ (avatar_actual.py)]

  1. ๋™์ž‘: ์„œ์šธ 20๋Œ€ ์—ฌ์„ฑ ํ•™์ƒ ๋ฐ์ดํ„ฐ ์ค‘ 5๋ช…์„ ๋ฌด์ž‘์œ„๋กœ ๋ฝ‘์Šต๋‹ˆ๋‹ค.
  2. ์ปจํ…์ŠคํŠธ:
    • ์•„๋ฐ”ํƒ€ 1ํ˜ธ: "๊ณผ๊ฑฐ์— ์žฅํ•™๊ธˆ ํ˜œํƒ ๋ถ€์กฑ์— ๋ถˆ๋งŒ์ด๋ผ๊ณ  ๋‹ตํ–ˆ์Œ, ๋ถ€๋ชจ๋‹˜ ๊ฒฝ์ œ๋ ฅ ๋‚ฎ์Œ"
    • ์•„๋ฐ”ํƒ€ 2ํ˜ธ: "๊ณผ๊ฑฐ์— ๊ต์œก ์งˆ ์ €ํ•˜ ์šฐ๋ ค๋กœ ์ •๋ถ€ ๊ฐœ์ž… ๋ฐ˜๋Œ€ํ•œ๋‹ค๊ณ  ๋‹ตํ–ˆ์Œ"
  3. ๊ฒฐ๊ณผ: ์•„๋ฐ”ํƒ€๋งˆ๋‹ค ๋ณธ์ธ์˜ ๊ฐœ์ธ์  ์‚ฌ์ •์ด ๋“ฌ๋ฟ ๋‹ด๊ธด ์ œ๊ฐ๊ฐ์˜ ๋‹ต๋ณ€์„ ๋‚ด๋†“์Šต๋‹ˆ๋‹ค. (ํ˜„์‹ค์„ฑ ๋†’์Œ)

[์˜ต์…˜ B: ๊ฐ€์ƒ ํ†ต๊ณ„ ๋ชจ๋“œ (avatar_synthetic.py)]

  1. ๋™์ž‘: ์„œ์šธ 20๋Œ€ ์—ฌ์„ฑ ํ•™์ƒ ์ˆ˜์ฒœ ๋ช…์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ†ต๊ณ„๋กœ ๋ƒ…๋‹ˆ๋‹ค.
  2. ์ปจํ…์ŠคํŠธ:
    • "ํ•ด๋‹น ๊ทธ๋ฃน์˜ 75%๋Š” ๋“ฑ๋ก๊ธˆ ๋ถ€๋‹ด์ด ๋งค์šฐ ๋†’๋‹ค๊ณ  ๋‹ตํ–ˆ์œผ๋ฉฐ, 15%๋Š” ๋Œ€ํ•™์˜ ์žฌ์ • ํˆฌ๋ช…์„ฑ์„ ๊ฐ•์กฐํ–ˆ์Šต๋‹ˆ๋‹ค."
  3. ๊ฒฐ๊ณผ: "์šฐ๋ฆฌ ์„ธ๋Œ€์˜ ๋Œ€๋‹ค์ˆ˜๊ฐ€ ๋“ฑ๋ก๊ธˆ ๋ถ€๋‹ด์œผ๋กœ ๊ณ ํ†ต๋ฐ›๊ณ  ์žˆ์œผ๋ฉฐ..."์™€ ๊ฐ™์ด ๊ทธ๋ฃน์˜ ๋Œ€ํ‘œ์„ฑ์„ ๋ค ๋‹ต๋ณ€์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. (๊ฒฝํ–ฅ์„ฑ ํŒŒ์•… ์šฉ์ด)

3) ๊ฐ€์ƒ ํ†ต๊ณ„ ๋ชจ๋“œ์˜ ์ƒ์„ธ ๋กœ์ง (Deep-Dive into Synthetic Logic)

๊ฐ€์ƒ ํ†ต๊ณ„ ๋ชจ๋“œ๋Š” ์‹ค์ œ ๊ฐœ์ธ์ด ์•„๋‹Œ **'์ง‘๋‹จ์˜ ์ง€ํ˜œ'**๋ฅผ ์ถ”์ถœํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณ ๋„ํ™”๋œ ์ปจํ…์ŠคํŠธ ์ถ”์ถœ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

โ‘  ํ†ต๊ณ„์  ๋ถ„ํฌ(Distribution) ๋ฐฉ์‹์˜ ์ฑ„ํƒ

๋‹จ์ˆœํžˆ "๊ฐ€์žฅ ๋งŽ์€ ๋‹ต๋ณ€" ํ•˜๋‚˜๋งŒ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, "A ๋‹ต๋ณ€(60%), B ๋‹ต๋ณ€(30%), ๊ธฐํƒ€(10%)"์™€ ๊ฐ™์ด ์‹ค์ œ ์‘๋‹ต ๋น„์œจ์„ ์ˆ˜์น˜๋กœ ๊ณ„์‚ฐํ•˜์—ฌ LLM์—๊ฒŒ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค.

  • ๋‹ค์–‘์„ฑ ๋ณด์กด: ์ง‘๋‹จ ๋‚ด์˜ ์ง€๋ฐฐ์ ์ธ ์˜๊ฒฌ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์†Œ์ˆ˜ ์˜๊ฒฌ์˜ ๋น„์ค‘๊นŒ์ง€ ํ•™์Šต์‹œ์ผœ, ๋‹ต๋ณ€์˜ ํ™•์‹ ๋„๋‚˜ ์‹ ์ค‘ํ•จ์˜ ์ •๋„๋ฅผ ์‹ค์ œ ์—ฌ๋ก  ์ง€ํ˜•์— ๋งž๊ฒŒ ์กฐ์ ˆํ•ฉ๋‹ˆ๋‹ค.
  • ๋‰˜์•™์Šค ๊ตฌํ˜„: ์ฐฌ๋ฐ˜์ด ํŒฝํŒฝํ•œ ์ด์Šˆ(51:49)์™€ ์••๋„์ ์ธ ์ด์Šˆ(90:10)์— ๋Œ€ํ•ด LLM์ด ์„œ๋กœ ๋‹ค๋ฅธ ๋‰˜์•™์Šค์˜ ํŽ˜๋ฅด์†Œ๋‚˜๋ฅผ ์—ฐ๊ธฐํ•˜๋„๋ก ์œ ๋„ํ•ฉ๋‹ˆ๋‹ค.

โ‘ก ์ง€๋Šฅ์  ๋ฌธํ•ญ ์„ ๋ณ„ (Top-5 Dense Columns)

1,200์—ฌ ๊ฐœ์˜ ๋ฌธํ•ญ ์ค‘ ํ•ด๋‹น ์ง‘๋‹จ์„ ๊ฐ€์žฅ ์ž˜ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ ์„ ๋ณ„ํ•ฉ๋‹ˆ๋‹ค.

  • ๋ฐ์ดํ„ฐ ๋ฐ€๋„ ๊ฒ€์‚ฌ: ๊ณ ์œ  ํŽ˜๋ฅด์†Œ๋‚˜ ๋ฌธํ•ญ(์ •์น˜/์ด๋…/๊ณ„์ธต ๋“ฑ) ์ค‘ ๊ฒฐ์ธก์น˜(NaN)๊ฐ€ ๊ฐ€์žฅ ์ ์€, ์ฆ‰ ๊ฐ€์žฅ ๋งŽ์€ ์‚ฌ๋žŒ์ด ์„ฑ์‹คํ•˜๊ฒŒ ์‘๋‹ตํ•œ ์ƒ์œ„ 5๊ฐœ ๋ฌธํ•ญ์„ ์ž๋™ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.
  • ์งˆ๋ฌธ ์œ ์‚ฌ์„ฑ ๊ฒฐํ•ฉ: ์‚ฌ์šฉ์ž์˜ ์งˆ๋ฌธ๊ณผ ์˜๋ฏธ์ ์œผ๋กœ ์œ ์‚ฌํ•œ ๊ณผ๊ฑฐ ๋ฌธํ•ญ๋“ค์˜ ํ†ต๊ณ„ ๋ถ„ํฌ๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ, ์ง‘๋‹จ์˜ '๊ธฐ์ดˆ ์ฒด๋ ฅ(๊ฐ€์น˜๊ด€)'๊ณผ '์ง์ ‘์  ๊ฒฝํ—˜(์œ ์‚ฌ ์งˆ๋ฌธ)'์„ ๋ชจ๋‘ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค.

โ‘ข ๊ฒฐ์ธก์น˜ ๊ทน๋ณต (Sparse Data Recovery)

ํŠน์ • ๊ฐœ์ธ์˜ ์‘๋‹ต์ด ๋น„์–ด ์žˆ์–ด๋„ ๋ชจ์ง‘๋‹จ ์ค‘ ํ•œ ๋ช…์ด๋ผ๋„ ๋‹ตํ–ˆ๋‹ค๋ฉด ๊ทธ ๊ฒฝํ–ฅ์„ฑ์ด ํ†ต๊ณ„์— ๋ฐ˜์˜๋˜๋ฏ€๋กœ, ์‹ค์ œ ์‘๋‹ต์ž ๋ชจ๋“œ๋ณด๋‹ค ๋ฐ์ดํ„ฐ ๊ณต๋ฐฑ์— ํ›จ์”ฌ ๊ฐ•ํ•˜๋ฉฐ ์•ˆ์ •์ ์ธ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.


7. ๊ฒฐ๊ณผ ํ™•์ธ ๋ฐ ๊ฒ€์ฆ

  • ๊ฒฐ๊ณผ๋Š” survey_results_actual.json ๋˜๋Š” survey_results_synthetic.json์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
  • ๊ฐ ๊ฒฐ๊ณผ์—๋Š” ์•„๋ฐ”ํƒ€์˜ ๋‹ต๋ณ€๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ๋‹ต๋ณ€์˜ ๊ทผ๊ฑฐ๊ฐ€ ๋œ **๊ณผ๊ฑฐ ์‘๋‹ต ๋‚ด์šฉ(referenced_context)**์ด ํฌํ•จ๋˜์–ด ์žˆ์–ด ๋…ผ๋ฆฌ์  ์ผ๊ด€์„ฑ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

8. ํ•ต์‹ฌ ๋ฐ์ดํ„ฐ ํŒŒ์ผ ์ƒ์„ธ ๋น„๊ต

์‹œ์Šคํ…œ์€ ๋‘ ๊ฐœ์˜ ํ•ต์‹ฌ Parquet ํŒŒ์ผ๋กœ ์ž‘๋™ํ•˜๋ฉฐ, ๊ฐ๊ฐ์˜ ์—ญํ• ์ด ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„๋ฉ๋‹ˆ๋‹ค.

1) nbs_questions_index.parquet (6.2 MB)

๋ชฉ์ : ์งˆ๋ฌธ ๊ฒ€์ƒ‰ ์ธ๋ฑ์Šค (Question Semantic Search Index)

๊ตฌ์กฐ:

์ปฌ๋Ÿผ๋ช… ํƒ€์ž… ์„ค๋ช… ์˜ˆ์‹œ
question string ์งˆ๋ฌธ ์›๋ฌธ "๋Œ€ํ†ต๋ น ๊ตญ์ •์šด์˜ ํ‰๊ฐ€"
vector list[float] KR-SBERT ์ž„๋ฒ ๋”ฉ (768์ฐจ์›) [0.123, -0.456, 0.789, ...]

๋ฐ์ดํ„ฐ ๊ทœ๋ชจ: 1,219๊ฐœ ๊ณ ์œ  ์งˆ๋ฌธ

์—ญํ• :

  • ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ์ƒˆ๋กœ์šด ์งˆ๋ฌธ๊ณผ ์˜๋ฏธ์ ์œผ๋กœ ์œ ์‚ฌํ•œ ๊ณผ๊ฑฐ ์งˆ๋ฌธ์„ ์ฐพ๊ธฐ ์œ„ํ•œ ๋ฒกํ„ฐ ๊ฒ€์ƒ‰
  • Cosine Similarity ๊ธฐ๋ฐ˜ Top-K ๊ฒ€์ƒ‰
  • ์˜ˆ: "์ •๋…„ ์—ฐ์žฅ ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์„ธ์š”?" โ†’ ์œ ์‚ฌ ์งˆ๋ฌธ: "์ •๋…„ํ‡ด์ง ์—ฐ๋ น ์กฐ์ •", "๊ณ ๋ น์ž ๊ณ ์šฉ ์ •์ฑ…" ๋“ฑ

์ƒ์„ฑ ๋ฐฉ๋ฒ•:

# index_questions.py ์‹คํ–‰์œผ๋กœ ์žฌ์ƒ์„ฑ ๊ฐ€๋Šฅ (1๋ถ„ ์†Œ์š”)
python index_questions.py

2) consolidated_nbs_data.parquet (6.7 MB)

๋ชฉ์ : ์‘๋‹ต์ž ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (Respondent Database)

๊ตฌ์กฐ (Wide Table + Sparse Matrix):

์ปฌ๋Ÿผ ์œ ํ˜• ์ปฌ๋Ÿผ๋ช… ์˜ˆ์‹œ ํƒ€์ž… ์„ค๋ช…
๋ฉ”ํƒ€๋ฐ์ดํ„ฐ survey_round int ์กฐ์‚ฌ ํšŒ์ฐจ (1~163)
respondent_id int ์‘๋‹ต์ž ๊ณ ์œ  ๋ฒˆํ˜ธ
์ธ๊ตฌํ†ต๊ณ„ gender string ์„ฑ๋ณ„ (๋‚จ์ž/์—ฌ์ž)
age int ์—ฐ๋ น (18~99์„ธ)
region string ๊ฑฐ์ฃผ ์ง€์—ญ (์„œ์šธ, ๊ฒฝ๊ธฐ ๋“ฑ)
job string ์ง์—… (์‚ฌ๋ฌด/๊ธฐ์ˆ ์ง, ์ฃผ๋ถ€ ๋“ฑ)
์‘๋‹ต ๋ฐ์ดํ„ฐ ๋Œ€ํ†ต๋ น_๊ตญ์ •์šด์˜_ํ‰๊ฐ€ string ๊ฐœ๋ณ„ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต๋ณ€
์ •๋…„์—ฐ์žฅ_์ฐฌ๋ฐ˜ string ๊ฐœ๋ณ„ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต๋ณ€
... (1,219๊ฐœ ์งˆ๋ฌธ ์ปฌ๋Ÿผ) ... ...

๋ฐ์ดํ„ฐ ๊ทœ๋ชจ: 166,721๋ช… ร— 1,219๊ฐœ ์งˆ๋ฌธ (ํฌ์†Œ ํ–‰๋ ฌ)

์—ญํ• :

  1. ์‘๋‹ต์ž ํ•„ํ„ฐ๋ง: ์ธ๊ตฌํ†ต๊ณ„ ์กฐ๊ฑด(์„ฑ๋ณ„/์—ฐ๋ น/์ง€์—ญ/์ง์—…)์œผ๋กœ ํŠน์ • ์‘๋‹ต์ž ์ถ”์ถœ
  2. ๊ณผ๊ฑฐ ๋‹ต๋ณ€ ์ฐธ์กฐ: ์„ ํƒ๋œ ์‘๋‹ต์ž์˜ ์œ ์‚ฌ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ์‹ค์ œ ๋‹ต๋ณ€ ์ด๋ ฅ์„ LLM ์ปจํ…์ŠคํŠธ๋กœ ์ œ๊ณต
  3. ํ†ต๊ณ„ ์ง‘๊ณ„: Synthetic ๋ชจ๋“œ์—์„œ ๊ทธ๋ฃน ์ „์ฒด์˜ ๋‹ต๋ณ€ ๋ถ„ํฌ ํ†ต๊ณ„ ๊ณ„์‚ฐ

ํŠน์ง•:

  • Sparse Matrix: ๊ฐ ์‘๋‹ต์ž๋Š” ์ „์ฒด 1,219๊ฐœ ์งˆ๋ฌธ ์ค‘ ํ‰๊ท  20~30๊ฐœ๋งŒ ๋‹ต๋ณ€ (๋‚˜๋จธ์ง€๋Š” NaN)
  • ์••์ถ• ํšจ์œจ: Parquet์˜ ํšจ์œจ์ ์ธ ์••์ถ•์œผ๋กœ 13๋งŒ ๊ฐœ ์ด์ƒ์˜ ์…€ ์ค‘ ๋Œ€๋ถ€๋ถ„์ด ๋น„์–ด์žˆ์–ด๋„ 6.7MB๋กœ ์œ ์ง€

3) ๋‘ ํŒŒ์ผ์˜ ์ž‘๋™ ํ๋ฆ„ (Data Flow)

graph LR
    A[์‚ฌ์šฉ์ž ์งˆ๋ฌธ] --> B[nbs_questions_index.parquet]
    B --> C[์œ ์‚ฌ ์งˆ๋ฌธ Top-5 ์ถ”์ถœ]

    D[์ธ๊ตฌํ†ต๊ณ„ ์กฐ๊ฑด] --> E[consolidated_nbs_data.parquet]
    E --> F[์กฐ๊ฑด ๋งž๋Š” ์‘๋‹ต์ž ํ•„ํ„ฐ๋ง]

    C --> G[์‘๋‹ต์ž์˜ ์œ ์‚ฌ ์งˆ๋ฌธ ๋‹ต๋ณ€ ์ถ”์ถœ]
    F --> G

    G --> H[LLM ํ”„๋กฌํ”„ํŠธ ๊ตฌ์„ฑ]
    H --> I[์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋‹ต๋ณ€ ์ƒ์„ฑ]

๋‹จ๊ณ„๋ณ„ ์˜ˆ์‹œ:

  1. ์‚ฌ์šฉ์ž ์ž…๋ ฅ: "๊ธฐ๋ณธ์†Œ๋“์ œ ๋„์ž…์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ?" (์กฐ๊ฑด: ์„œ์šธ, 40๋Œ€, ๋‚จ์„ฑ, ์ž์˜์—…)

  2. ์งˆ๋ฌธ ๊ฒ€์ƒ‰ (nbs_questions_index.parquet ์‚ฌ์šฉ):

    • ์œ ์‚ฌ ์งˆ๋ฌธ ๋ฐœ๊ฒฌ: "๋ณต์ง€ ์ •์ฑ… ํ™•๋Œ€", "์žฌ์ • ์ง€์ถœ ์ฆ๊ฐ€", "์†Œ๋“ ์žฌ๋ถ„๋ฐฐ" ๋“ฑ
  3. ์‘๋‹ต์ž ํ•„ํ„ฐ๋ง (consolidated_nbs_data.parquet ์‚ฌ์šฉ):

    • ์„œ์šธ ๊ฑฐ์ฃผ + 40๋Œ€ + ๋‚จ์„ฑ + ์ž์˜์—…์ž โ†’ 234๋ช… ์ถ”์ถœ
    • ๋ฌด์ž‘์œ„ ์ƒ˜ํ”Œ๋ง โ†’ 5๋ช… ์„ ์ •
  4. ์ปจํ…์ŠคํŠธ ๊ตฌ์„ฑ:

    • ๊ฐ ์‘๋‹ต์ž๋ณ„๋กœ ์œ„ ์œ ์‚ฌ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๊ณผ๊ฑฐ ๋‹ต๋ณ€ ์กฐํšŒ
    • ์‘๋‹ต์ž A: "๋ณต์ง€ ์ •์ฑ… ํ™•๋Œ€ โ†’ ๋ฐ˜๋Œ€ (์„ธ๊ธˆ ๋ถ€๋‹ด)", "์žฌ์ • ์ง€์ถœ ์ฆ๊ฐ€ โ†’ ์‹ ์ค‘ํ•ด์•ผ"
    • ์‘๋‹ต์ž B: "๋ณต์ง€ ์ •์ฑ… ํ™•๋Œ€ โ†’ ์ฐฌ์„ฑ (์„œ๋ฏผ ๋ณดํ˜ธ)", "์†Œ๋“ ์žฌ๋ถ„๋ฐฐ โ†’ ํ•„์š”"
  5. LLM ์ƒ์„ฑ: ์œ„ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๊ฐ ์‘๋‹ต์ž๊ฐ€ "๊ธฐ๋ณธ์†Œ๋“์ œ"์— ๋Œ€ํ•ด ๋‹ต๋ณ€ํ•  ๋‚ด์šฉ ์˜ˆ์ธก


9. ๋ฌธ์ œ ํ•ด๊ฒฐ (Troubleshooting)

์ธ๋ฑ์Šค ํŒŒ์ผ ์œ ์‹ค

๋งŒ์•ฝ nbs_questions_index.parquet ํŒŒ์ผ์ด ์‚ญ์ œ๋˜๊ฑฐ๋‚˜ ์†์ƒ๋˜์—ˆ๋‹ค๋ฉด, index_questions.py๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•˜์—ฌ 1๋ถ„ ๋‚ด์™ธ๋กœ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

cd ํŽ˜๋ฅด์†Œ๋‚˜_์„ค๋ฌธ์กฐ์‚ฌ_์ „๊ตญ์ง€ํ‘œ์กฐ์‚ฌ
..\.venv\Scripts\python.exe index_questions.py

(๊ธฐ์กด์˜ nbs_db_stable ํด๋” ๋ฐ ChromaDB ์ธ๋ฑ์Šค ๋กœ๋“œ ์˜ค๋ฅ˜๋Š” ์‹œ์Šคํ…œ์ด Parquet ๊ธฐ๋ฐ˜ ์„ ํ˜• ๊ฒ€์ƒ‰์œผ๋กœ ์ „ํ™˜๋จ์— ๋”ฐ๋ผ ๋” ์ด์ƒ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.)