| from __future__ import annotations |
| """ |
| Predictive Model ๋ ์ง์คํธ๋ฆฌ (ML/DL ๊ตฌํ ๊ต์ฒด ์ง์ ). |
| |
| predictive_model = ์๋ ์ธํฐํ์ด์ค๋ฅผ ๋ง์กฑํ๋ ๊ฐ์ฒด/๋ชจ๋ (์๋๋ฆฌ์ค ๋ฌด๊ด): |
| predict(intent_id, features, *, training_data, dataset_path, model_prefix, train_params=None) -> float |
| |
| - "predictive_model"์ ML(sklearn)ยทDL(torch ๋ฑ)์ ์์ฐ๋ฅด๋ [2b] ์์ธก ๋ชจ๋ธ ๊ตฌํ์ ๊ฐ๋ฆฌํจ๋ค. |
| - config L2.model.predictive_model ๋ก ์ ํ (์์ผ๋ฉด "sklearn"). |
| - ์ ๊ตฌํ์ register_predictive_model("torch", <obj>)๋ก ๋ฑ๋ก. |
| - common.model_predict / GenericEngine.model_predict ๋ ํน์ ๊ตฌํ์ ์ง์ importํ์ง ์๊ณ |
| ์ด ๋ ์ง์คํธ๋ฆฌ๋ก predictive_model์ ๋ฐ์ ํธ์ถํ๋ค. |
| """ |
| from typing import Any, Protocol |
|
|
|
|
| class PredictiveModel(Protocol): |
| """์์ธก ๋ชจ๋ธ ๊ตฌํ ์ธํฐํ์ด์ค (sklearn/torchโฆ ๊ณตํต). |
| |
| intent๋ณ 0~1 ์ ์๋ฅผ ๋ฐํํ๋ predict ๋ฉ์๋๋ฅผ ์ ์ํ๋ค. |
| """ |
| def predict(self, intent_id: str, features: dict[str, Any], *, |
| training_data: dict, dataset_path, model_prefix: str, |
| train_params: dict | None = None) -> float: |
| """Intent์ ๋ํ 0~1 ์์ธก ์ ์๋ฅผ ๋ฐํํ๋ค. |
| |
| Args: |
| intent_id: ์์ธกํ Intent ID. |
| features: ์ถ๋ก ์ ์ฌ์ฉํ feature dict. |
| training_data: ํ์ต ๋ฐ์ดํฐ(์๋๋ฆฌ์ค ์์ง ์ ๊ณต). |
| dataset_path: ์๋ ๋ฐ์ดํฐ์
๊ฒฝ๋ก. |
| model_prefix: ์๋๋ฆฌ์ค๋ณ ๋ชจ๋ธ๋ช
๋ค์์คํ์ด์ค. |
| train_params: ํ์ต ํ์ดํผํ๋ผ๋ฏธํฐ(config L2.model.train). |
| ๋ฏธ์ฌ์ฉ ๊ตฌํ์ ๋ฌด์ ๊ฐ๋ฅ. |
| |
| Returns: |
| 0~1 ๋ฒ์์ ์์ธก ์ ์. |
| """ |
| ... |
|
|
|
|
| _PREDICTIVE_MODELS: dict[str, Any] = {} |
|
|
|
|
| def register_predictive_model(name: str, predictive_model: Any) -> None: |
| """์์ธก ๋ชจ๋ธ ๊ตฌํ์ name์ผ๋ก ๋ฑ๋กํ๋ค. |
| |
| Args: |
| name: ๋ฑ๋ก ํค (์: "torch"). |
| predictive_model: PredictiveModel ์ธํฐํ์ด์ค๋ฅผ ๋ง์กฑํ๋ ๊ฐ์ฒด/๋ชจ๋. |
| """ |
| _PREDICTIVE_MODELS[name] = predictive_model |
|
|
|
|
| def get_predictive_model(name: str = "sklearn") -> Any: |
| """name์ ๋ฑ๋ก๋ ์์ธก ๋ชจ๋ธ ๊ตฌํ์ ๋ฐํํ๋ค. |
| |
| "sklearn"์ ์ต์ด ํธ์ถ ์ ๊ธฐ๋ณธ ๊ตฌํ์ lazy ๋ฑ๋กํ๋ค. |
| |
| Args: |
| name: ์กฐํํ ์์ธก ๋ชจ๋ธ ๋ฑ๋ก ํค. |
| |
| Returns: |
| ๋ฑ๋ก๋ ์์ธก ๋ชจ๋ธ ๊ตฌํ ๊ฐ์ฒด/๋ชจ๋. |
| |
| Raises: |
| ValueError: ๋ฑ๋ก๋์ง ์์ name์ด๋ฉด ๋ฐ์. |
| """ |
| if name == "sklearn" and "sklearn" not in _PREDICTIVE_MODELS: |
| from models import sklearn_model |
| _PREDICTIVE_MODELS["sklearn"] = sklearn_model |
| try: |
| return _PREDICTIVE_MODELS[name] |
| except KeyError: |
| raise ValueError(f"unknown predictive_model: {name!r} (๋ฑ๋ก๋จ: {sorted(_PREDICTIVE_MODELS)})") |
|
|