Spaces:
Sleeping
Sleeping
| # 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๊ฑด)](file:///c:/vscode/crawling_chatbot/ํ๋ฅด์๋_์ค๋ฌธ์กฐ์ฌ_์ ๊ตญ์งํ์กฐ์ฌ/NBS_Question_List.md) | |
| - **์ฒ๋ฆฌ ๋ด์ฉ**: | |
| - **ํตํฉ**: 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) | |
| ์์คํ ์ '๋๊ตฌ์ธ์ง(์ธ๊ตฌํต๊ณ)'์ '์ด๋ค ์ฑํฅ์ธ์ง(๊ณผ๊ฑฐ ๋ต๋ณ)'๋ฅผ ๊ฒฐํฉํ์ฌ ๋ต๋ณ์ ์์ฑํฉ๋๋ค. | |
| ```mermaid | |
| 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`) | |
| ์ค์ ๊ณผ๊ฑฐ ์๋ต์๋ค์ ๋ต๋ณ ์ด๋ ฅ์ ๋ฐํ์ผ๋ก ๊ฐ์ฅ ์์ํ ์๋ต์ ์์ฑํฉ๋๋ค. | |
| ```powershell | |
| # ์์ 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`) | |
| ํน์ ๊ทธ๋ฃน์ ํต๊ณ์ ๋ต๋ณ ๋ถํฌ๋ฅผ ๋ถ์ํ์ฌ ๊ฐ์์ ํ๋ฅด์๋ ๋ต๋ณ์ ์์ฑํฉ๋๋ค. | |
| ```powershell | |
| # ์์: ์์ธ ๊ฑฐ์ฃผ 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 ๊ฒ์ | |
| - ์: "์ ๋ ์ฐ์ฅ ์ด๋ป๊ฒ ์๊ฐํ์ธ์?" โ ์ ์ฌ ์ง๋ฌธ: "์ ๋ ํด์ง ์ฐ๋ น ์กฐ์ ", "๊ณ ๋ น์ ๊ณ ์ฉ ์ ์ฑ " ๋ฑ | |
| **์์ฑ ๋ฐฉ๋ฒ**: | |
| ```python | |
| # 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) | |
| ```mermaid | |
| 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๋ถ ๋ด์ธ๋ก ๋ณต๊ตฌํ ์ ์์ต๋๋ค. | |
| ```powershell | |
| cd ํ๋ฅด์๋_์ค๋ฌธ์กฐ์ฌ_์ ๊ตญ์งํ์กฐ์ฌ | |
| ..\.venv\Scripts\python.exe index_questions.py | |
| ``` | |
| *(๊ธฐ์กด์ nbs_db_stable ํด๋ ๋ฐ ChromaDB ์ธ๋ฑ์ค ๋ก๋ ์ค๋ฅ๋ ์์คํ ์ด Parquet ๊ธฐ๋ฐ ์ ํ ๊ฒ์์ผ๋ก ์ ํ๋จ์ ๋ฐ๋ผ ๋ ์ด์ ๋ฐ์ํ์ง ์์ต๋๋ค.)* | |