Spaces:
Sleeping
Sleeping
File size: 4,883 Bytes
c9bae1a 7452c48 c9bae1a 7452c48 c9bae1a 7452c48 c9bae1a | 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 | """๋ฒค์น๋งํฌ(ํ์ฌ) ์ด๋ฆ ๊ฐ๋ช
์ฒ๋ฆฌ โ Space ํ์ ์ ์ฉ.
๋ฆฌ๋๋ณด๋ ์ปฌ๋ผ์ `<ํ์ฌ>_<๋ฒ์ /์คํ๋ฆฟ>_<์นดํ
๊ณ ๋ฆฌ>` ํ์์ด๊ณ ๋งจ ์ ํ ํฐ์ด ์ค์
๊ณ ๊ฐ/๊ธฐ๊ด๋ช
(Coupang, Hyundai, KISA ...)์ด๋ผ, ์ธ๋ถ ๊ณต๊ฐ SPACE ์์๋ ๋งจ ์
ํ ํฐ๋ง ๋ ๊ธ์ ์ฝ๋๋ก ์นํํ๋ค. ๋ฒ์ /์คํ๋ฆฟยท์นดํ
๊ณ ๋ฆฌ๋ ๊ทธ๋๋ก ๋ฌ์ ํ์
์๋ฏธ์ ๊ธฐ์กด ๋์์ ๋ณด์กดํ๋ค.
Coupang_balanced_test_v1_Fire -> Co_balanced_test_v1_Fire
Hyundai_v3_Falldown -> Hy_v3_Falldown
Korea_nrf_Smoke -> Ko_nrf_Smoke
๊ตฌ๊ธ ์ํธ ์๋ณธ์ ์ ๋ ๊ฑด๋๋ฆฌ์ง ์๋๋ค โ sheet2df ๊ฐ df ๋ฅผ ๋ง๋ ํ์ ๋จ๊ณ์์๋ง
์ปฌ๋ผ๋ช
์ ์นํํ๊ณ , config ์ ๋ฐ์ดํฐ์
๋ชฉ๋ก/์จ๊น ๊ท์น๋ ๊ฐ์ ์ฝ๋๋ก ๋ง์ถฐ ๊ฐฑ์ ํ๋ค.
"""
import re
import enviroments.config as config
_map = {} # ํ์ฌ๋ช
(lower) -> 2๊ธ์ ์ฝ๋
_orig_default_avg = None
_orig_default_ds = None
_orig_hide_exact = None
# โโ ๋ชจ๋ธ๋ช
ํ ํฐ ๊ฐ๋ช
(์
๊ฐ ์นํ) โโ
# ํ์ดํผ๋งํฌ ๋ชจ๋ธ๋ช
์์ ํน์ ๋ชจ๋ธ ํ ํฐ์ ๊ฐ๋ฆฐ๋ค. ์: PE(Perception Encoder) -> CLIP.
# ์์ผ๋ก ๊ฐ๋ฆด ๋ชจ๋ธ์ด ์๊ธฐ๋ฉด ์ฌ๊ธฐ์ {"์๋ณธํ ํฐ": "ํ์ํ ํฐ"} ์ผ๋ก ์ถ๊ฐ๋ง ํ๋ฉด ๋๋ค.
# ํ ํฐ ๊ฒฝ๊ณ๋ ๋ฌธ์์ด ์์/๋ ๋๋ '-' '_' ๋ก ๋ณธ๋ค (PE-Core, FT_PE-Core, PE_Large ๋ชจ๋ ๋งค์นญ,
# PETAยทPErson ๊ฐ์ ๋ค๋ฅธ ๋จ์ด๋ ๊ฑด๋๋ฆฌ์ง ์์). ๋์๋ฌธ์ ๊ตฌ๋ถ.
MODEL_TOKEN_SUBS = {
"PE": "CLIP",
}
_token_re = re.compile(
r"(?<![A-Za-z0-9])(" + "|".join(re.escape(k) for k in MODEL_TOKEN_SUBS) + r")(?=[-_]|$)"
)
def _sub_model_tokens(s: str) -> str:
return _token_re.sub(lambda m: MODEL_TOKEN_SUBS[m.group(1)], s)
def _base_code(company: str) -> str:
"""ํ์ฌ๋ช
-> ์ 2๊ธ์ ์ฝ๋ (์ฒซ ๊ธ์ ๋๋ฌธ์ + ๋์งธ ์๋ฌธ์). ์: Coupang -> Co."""
alnum = [c for c in company if c.isalnum()]
if not alnum:
return "Xx"
if len(alnum) == 1:
return alnum[0].upper() + "x"
return alnum[0].upper() + alnum[1].lower()
def _leading_token(col: str):
"""๋ฒค์น๋งํฌ ์ปฌ๋ผ์ด๋ฉด ๋งจ ์ ํ์ฌ ํ ํฐ์ ๋ฐํ, ์๋๋ฉด None.
๊ณต๋ฐฑ ํฌํจ(์: 'Model name', 'Datasets Used')ยท'_' ์์(TASK, Model)ยท
AVG_* (๊ฐ์ ๋ฐ์ดํฐ์
) ์ ์นํ ๋์์ด ์๋๋ค.
"""
if " " in col or "_" not in col:
return None
head = col.split("_", 1)[0]
if head == "AVG":
return None
return head
def _build_map(companies):
"""ํ์ฌ๋ช
๋ชฉ๋ก -> {ํ์ฌ๋ช
(lower): ์ฝ๋}. ๋์๋ฌธ์๋ง ๋ค๋ฅธ ์ด๋ฆ์ ๊ฐ์ ํ์ฌ๋ก
๋ณด๊ณ ํ๋์ ์ฝ๋๋ก ํฉ์น๋ค. ์ฝ๋๊ฐ ๊ฒน์น๋ฉด ๋ค์ ์ซ์๋ฅผ ๋ถ์ฌ ์ ์ผ์ฑ ๋ณด์ฅ."""
m, used = {}, set()
for name in sorted(set(companies), key=str.lower):
key = name.lower()
if key in m:
continue
base = _base_code(name)
code, n = base, 1
while code in used:
n += 1
code = f"{base}{n}"
used.add(code)
m[key] = code
return m
def alias_of(company: str) -> str:
return _map.get(company.lower()) or _base_code(company)
def _anon_col(col: str) -> str:
"""์ปฌ๋ผ๋ช
์ ๋งจ ์ ํ์ฌ ํ ํฐ๋ง ์ฝ๋๋ก ์นํ. ๋๋จธ์ง(๋ฒ์ /์นดํ
๊ณ ๋ฆฌ)๋ ์ ์ง."""
head = _leading_token(col)
if head is None:
return col
return f"{alias_of(head)}{col[len(head):]}"
def anonymize_df(df):
"""df ๋ฒค์น๋งํฌ ์ปฌ๋ผ์ ๋งจ ์ ํ์ฌ ํ ํฐ์ 2๊ธ์ ์ฝ๋๋ก ์นํํ๊ณ ,
config ์ ๋ฐ์ดํฐ์
๋ชฉ๋ก/์จ๊น ๊ท์น๋ ๋์ผ ์ฝ๋๋ก ๊ฐฑ์ ํ๋ค (idempotent).
"""
global _map, _orig_default_avg, _orig_default_ds, _orig_hide_exact
if _orig_default_avg is None:
_orig_default_avg = list(config.DEFAULT_AVG_DATASETS)
_orig_default_ds = list(config.DEFAULT_DATASETS)
_orig_hide_exact = list(config.HIDE_COLUMN_EXACT)
companies = [t for t in (_leading_token(c) for c in df.columns) if t]
_map = _build_map(companies + list(_orig_default_avg))
df = df.rename(columns={c: _anon_col(c) for c in df.columns})
# ๋ชจ๋ธ๋ช
ํ ํฐ ๊ฐ๋ช
: ํ์ดํผ๋งํฌ(Model/Model name/Model link)์ ์
๊ฐ ์ ๋ฐ์์
# PE -> CLIP ๋ฑ ์นํ. ํ์ ํ
์คํธ์ ๋งํฌ URL ์ ํจ๊ป ๋ฐ๊ฟ ๋
ธ์ถ์ ๋จ๊ธฐ์ง ์๋๋ค.
for col in df.columns:
if df[col].dtype == object:
df[col] = df[col].map(
lambda v: _sub_model_tokens(v) if isinstance(v, str) else v
)
# config ๋ ๊ฐ์ ์ฝ๋ ๊ธฐ์ค์ผ๋ก ๋ง์ถฐ ๋ฆฌ๋๋ณด๋ ์
๋ ํฐ/AVG/์จ๊น์ด ์ผ๊ด๋๊ฒ ๋์
config.DEFAULT_AVG_DATASETS = [alias_of(d) for d in _orig_default_avg]
config.DEFAULT_DATASETS = [
d if d == "AVG" else alias_of(d) for d in _orig_default_ds
]
config.HIDE_COLUMN_EXACT = [_anon_col(c) for c in _orig_hide_exact]
return df
|