rmdetect / ARCHITECTURE.md
reasonofmoon's picture
Upload folder using huggingface_hub
dba8f4c verified
|
Raw
History Blame Contribute Delete
9.22 kB

RM-DETECT โ€” ๊ธฐ์ˆ  ์•„ํ‚คํ…์ฒ˜ ์„ค๋ช…์„œ

AI ์ž‘์„ฑ ํ…์ŠคํŠธ ํŒ๋ณ„๊ธฐ์˜ ๋‚ด๋ถ€ ๊ตฌ์กฐ, ๋ฐ์ดํ„ฐ ํ๋ฆ„, ํ”ผ์ฒ˜ ์‚ฌ์–‘, ๋ชจ๋ธ, API, ๋ฐฐํฌ๋ฅผ ์ •๋ฆฌํ•œ ๊ธฐ์ˆ  ๋ฌธ์„œ์ž…๋‹ˆ๋‹ค. ๊ฐœ์š”๋Š” README๋ฅผ, ์•„๋ž˜๋Š” ๊ตฌํ˜„ ์„ธ๋ถ€๋ฅผ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

RM-DETECT architecture


1. ๊ฐœ์š”

RM-DETECT๋Š” ์ž…๋ ฅ ํ…์ŠคํŠธ๊ฐ€ ๋Œ€๊ทœ๋ชจ ์–ธ์–ด๋ชจ๋ธ(LLM)๋กœ ์ž‘์„ฑ๋์„ ๊ฐ€๋Šฅ์„ฑ์„ ์ถ”์ •ํ•˜๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ๊ตฌํ˜„ํ•œ ํŒ๋ณ„๊ธฐ์ž…๋‹ˆ๋‹ค. ๋‘ ๊ฐ€์ง€ ์ƒํ˜ธ ๋ณด์™„์  ์‹ ํ˜ธ๋ฅผ ํ•˜๋‚˜์˜ ๋ถ„๋ฅ˜๊ธฐ๋กœ ๊ฒฐํ•ฉํ•ฉ๋‹ˆ๋‹ค:

  • ํ† ํฐ ์˜ˆ์ธก ๊ฐ€๋Šฅ์„ฑ(perplexity) โ€” LLM์ด ๋งŒ๋“  ๊ธ€์€ ๋” "์˜ˆ์ธก ๊ฐ€๋Šฅ"ํ•˜๋‹ค๋Š”, AI ํ…์ŠคํŠธ ํƒ์ง€ ๋ฌธํ—Œ(GLTR, DetectGPT ๋“ฑ)์—์„œ ํ™•๋ฆฝ๋œ ์›๋ฆฌ
  • ๋ฌธ์ฒดยทํ†ต๊ณ„ ๋ถ„์„(stylometry) โ€” ์–ธ์–ด๋ชจ๋ธ ์—†์ด ๊ณ„์‚ฐํ•˜๋Š” ๋ฌธ์žฅ ๋ฆฌ๋“ฌยท์–ดํœ˜ยท๋ฌธ์žฅ๋ถ€ํ˜ธยท์–ด๋ฏธ ํŠน์ง•

ํ•œ๊ตญ์–ด์™€ ์˜์–ด๋ฅผ ๋ชจ๋‘ ์ง€์›ํ•˜๋ฉฐ, ๋ฌธ์„œ ์ „์ฒด ์ ์ˆ˜์™€ ๋ฌธ๋‹จ๋ณ„ ์ ์ˆ˜๋ฅผ ๋™์‹œ์— ์‚ฐ์ถœํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์ถ”๋ก ์ด ์„œ๋ฒ„ ๋‚ด๋ถ€์—์„œ ์‹คํ–‰๋˜์–ด ์™ธ๋ถ€ ์œ ๋ฃŒ API๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.


2. ์ปดํฌ๋„ŒํŠธ ๊ตฌ์กฐ

rmdetect/
โ”œโ”€โ”€ app.py                     # FastAPI ๋ฐฑ์—”๋“œ + RMDetector ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜
โ”œโ”€โ”€ aidetect/                  # ํƒ์ง€ ์—”์ง„ (ํ”„๋ ˆ์ž„์›Œํฌ ๋…๋ฆฝ)
โ”‚   โ”œโ”€โ”€ perplexity.py          #   โ‘  ํ† ํฐ ์˜ˆ์ธก ๊ฐ€๋Šฅ์„ฑ (GPT-2 / KoGPT2)
โ”‚   โ”œโ”€โ”€ stylometry.py          #   โ‘ก ๋ฌธ์ฒดยทํ†ต๊ณ„ ํ”ผ์ฒ˜ (model-free)
โ”‚   โ”œโ”€โ”€ langid.py              #   ์–ธ์–ด ๊ฐ์ง€ (Hangul-ratio router)
โ”‚   โ”œโ”€โ”€ features.py            #   โ‘ +โ‘ก ๋ณ‘ํ•ฉ โ†’ 28์ฐจ์› ๋ฒกํ„ฐ
โ”‚   โ””โ”€โ”€ __init__.py
โ”œโ”€โ”€ ai_detector_model.joblib   # ํ•™์Šต๋œ ๋ถ„๋ฅ˜๊ธฐ (StandardScaler + LogReg)
โ”œโ”€โ”€ static/                    # ๋‹จ์ผ ํŽ˜์ด์ง€ ์›น UI
โ”‚   โ”œโ”€โ”€ index.html
โ”‚   โ”œโ”€โ”€ app.js
โ”‚   โ””โ”€โ”€ style.css
โ”œโ”€โ”€ requirements.txt
โ”œโ”€โ”€ run.sh                     # ๋กœ์ปฌ ์‹คํ–‰ ์Šคํฌ๋ฆฝํŠธ
โ””โ”€โ”€ Dockerfile                 # ์ปจํ…Œ์ด๋„ˆ/HF Spaces ๋ฐฐํฌ

๊ณ„์ธต์€ ์„ธ ๊ฒน์ž…๋‹ˆ๋‹ค: UI(static) โ†’ API(app.py) โ†’ ์—”์ง„(aidetect). ์—”์ง„์€ ์›น ํ”„๋ ˆ์ž„์›Œํฌ์— ์˜์กดํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ CLIยท๋ฐฐ์น˜ยท๋‹ค๋ฅธ ์„œ๋น„์Šค์—์„œ๋„ ๊ทธ๋Œ€๋กœ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


3. ์š”์ฒญ ์ฒ˜๋ฆฌ ํ๋ฆ„ (POST /detect)

  1. ์–ธ์–ด ๊ฐ์ง€ โ€” langid.detect_lang() ๊ฐ€ ํ•œ๊ธ€/๋ผํ‹ด ๋ฌธ์ž ๋น„์œจ๋กœ ko/en ํŒ์ • (์š”์ฒญ์— lang์ด ๋ช…์‹œ๋˜๋ฉด ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ).
  2. ๋ฌธ๋‹จ ๋ถ„ํ•  โ€” ๋นˆ ์ค„ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ๋‹จ์„ ๋‚˜๋ˆ„๋˜, ๊ฐ ๋ฌธ๋‹จ์˜ ์›๋ฌธ ๋ฌธ์ž ์˜คํ”„์…‹ (start, end) ์„ ๋ณด์กด. ์ด ์˜คํ”„์…‹ ๋•๋ถ„์— UI๊ฐ€ ์›๋ฌธ์˜ ์ •ํ™•ํ•œ ๊ตฌ๊ฐ„์„ ํ•˜์ด๋ผ์ดํŠธํ•  ์ˆ˜ ์žˆ์Œ.
  3. ํ”ผ์ฒ˜ ์ถ”์ถœ โ€” ๋ฌธ์„œ ์ „์ฒด์™€ ๊ฐ ๋ฌธ๋‹จ์— ๋Œ€ํ•ด features.full_features() ๋ฅผ ํ˜ธ์ถœํ•ด 28์ฐจ์› ๋ฒกํ„ฐ๋ฅผ ๋งŒ๋“ฆ.
  4. ๋ถ„๋ฅ˜ โ€” StandardScaler โ†’ LogisticRegression ํŒŒ์ดํ”„๋ผ์ธ์ด AI ํ™•๋ฅ ์„ ์‚ฐ์ถœํ•˜๊ณ , ํŒ์ • ๋ฐด๋“œ์— ๋งคํ•‘.
  5. ๊ธฐ์—ฌ ์‹ ํ˜ธ ๊ณ„์‚ฐ โ€” ๊ฐ ํ”ผ์ฒ˜์˜ ํ‘œ์ค€ํ™” ๊ฐ’ ร— ํšŒ๊ท€ ๊ณ„์ˆ˜๋กœ "์ด ํŒ์ •์„ AI/์ธ๊ฐ„ ์ชฝ์œผ๋กœ ๋ฏผ ์ƒ์œ„ ์‹ ํ˜ธ"๋ฅผ ์ถ”์ถœ.
  6. ์‘๋‹ต ์ง๋ ฌํ™” โ€” ๋ฌธ์„œ ์ ์ˆ˜ + ๋ฌธ๋‹จ ๋ฐฐ์—ด(์˜คํ”„์…‹ยทํ™•๋ฅ ยทํŒ์ •ยทflaggedยท์ƒ์œ„ ์‹ ํ˜ธ)์„ JSON์œผ๋กœ ๋ฐ˜ํ™˜.

๋ฌธ๋‹จ์ด paragraph_min_chars(๊ธฐ๋ณธ 30์ž)๋ณด๋‹ค ์งง์œผ๋ฉด low_confidence=true๋กœ ํ‘œ์‹œํ•˜๊ณ  flagged ๋Œ€์ƒ์—์„œ ์ œ์™ธํ•ฉ๋‹ˆ๋‹ค.


4. ์‹ ํ˜ธ ๊ณ„์—ด โ‘  โ€” ํ† ํฐ ์˜ˆ์ธก ๊ฐ€๋Šฅ์„ฑ (perplexity.py)

์ž‘์€ causal LM์„ ์–ธ์–ด๋ณ„๋กœ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค: ์˜์–ด GPT-2, ํ•œ๊ตญ์–ด KoGPT2(skt/kogpt2-base-v2), ๊ฐ๊ฐ ~125M ํŒŒ๋ผ๋ฏธํ„ฐ.

  • ์›๋ฆฌ โ€” LLM์€ ๋‹ค์Œ ํ† ํฐ์œผ๋กœ ๋†’์€ ํ™•๋ฅ ์˜ ํ† ํฐ์„ ๊ณ ๋ฅด๋ฏ€๋กœ, ๊ธฐ๊ณ„ ์ƒ์„ฑ ํ…์ŠคํŠธ๋Š” perplexity๊ฐ€ ๋‚ฎ๊ณ  ๋ชจ๋ธ์ด ์ƒ์œ„๋กœ ๊ผฝ์•˜์„ ํ† ํฐ์˜ ๋น„์œจ(top-k ์ ์ค‘๋ฅ )์ด ๋†’์Œ. ์ธ๊ฐ„ ๊ธ€์€ "burstier"ํ•ด์„œ ๋‚ฎ์€ ํ™•๋ฅ ์˜ ๋‹จ์–ด๋ฅผ ๋” ์ž์ฃผ ์”€.
  • ์‚ฐ์ถœ ํ”ผ์ฒ˜ (6๊ฐœ): ppl, log_ppl, mean_logprob, std_logprob, median_logprob, topk_hit_rate
  • ๊ธด ๋ฌธ์„œ ์ฒ˜๋ฆฌ โ€” ์ปจํ…์ŠคํŠธ ์ฐฝ(โ‰ค1024 ํ† ํฐ)์„ ๋„˜๋Š” ํ…์ŠคํŠธ๋Š” sliding window๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ , ๊ฒน์น˜๋Š” ๊ตฌ๊ฐ„์„ ๋งˆ์Šคํ‚นํ•ด ์ค‘๋ณต ์ง‘๊ณ„๋ฅผ ๋ฐฉ์ง€.
  • ๋ชจ๋ธ ๋กœ๋”ฉ โ€” ๋กœ์ปฌ models/gpt2ยทmodels/kogpt2๊ฐ€ ์žˆ์œผ๋ฉด ์˜คํ”„๋ผ์ธ์œผ๋กœ ๋กœ๋“œ, ์—†์œผ๋ฉด HuggingFace ํ—ˆ๋ธŒ์—์„œ ์ž๋™ ๋‹ค์šด๋กœ๋“œ(์˜ˆ: HF Spaces ์ฒซ ์‹คํ–‰).

5. ์‹ ํ˜ธ ๊ณ„์—ด โ‘ก โ€” ๋ฌธ์ฒดยทํ†ต๊ณ„ (stylometry.py)

์–ธ์–ด๋ชจ๋ธ์ด ํ•„์š” ์—†๋Š” 22๊ฐœ ํ”ผ์ฒ˜. ํ•œ๊ตญ์–ดยท์˜์–ด ๋ชจ๋‘์— ๋™์ž‘ํ•˜๋Š” ์ •๊ทœ์‹ ๊ธฐ๋ฐ˜ ๋ฌธ์žฅ ๋ถ„ํ• ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฃน ํ”ผ์ฒ˜ ์‹ ํ˜ธ ๋ฐฉํ–ฅ
๋ฌธ์žฅ ๋ฆฌ๋“ฌ burstiness, cv_sent_len, std_sent_len, mean_sent_len, mean_succ_diff, n_sents ์ธ๊ฐ„์€ ๋ฌธ์žฅ ๊ธธ์ด ๋ณ€๋™์ด ํผ; AI๋Š” ๊ท ์ผ
์–ดํœ˜ type_token_ratio, rep_bigram_rate, word_entropy, avg_word_len AI๋Š” ์ ‘์† ๊ตฌ์กฐ๋ฅผ ๋ฐ˜๋ณต
๋ฌธ์žฅ๋ถ€ํ˜ธ excl_per100, ques_per100, ellipsis_per100, comma_per100, quote_per100, emoji_per100, punct_variety ์ธ๊ฐ„์€ !!, โ€ฆ, ์ด๋ชจ์ง€ ์‚ฌ์šฉ โ†‘
๊ตฌ์–ด์ฒด informal_per100 (ใ…‹ใ…‹, lol, ์ง„์งœโ€ฆ) ์ธ๊ฐ„ ์‹ ํ˜ธ
์ ‘์†์–ด connective_per100 (์ข…ํ•ฉ์ ์œผ๋กœ, ๋”ฐ๋ผ์„œ, furthermoreโ€ฆ) AI ์‹ ํ˜ธ
ํ•œ๊ตญ์–ด ์–ด๋ฏธ ko_formal_per100, ko_casual_per100, ko_formal_minus_casual ๊ฒฉ์‹์ฒด(ํ•˜์˜€์Šต๋‹ˆ๋‹ค)๋Š” AI ์ชฝ, ๊ตฌ์–ด์ฒด(~ํ–ˆ์Œ)๋Š” ์ธ๊ฐ„ ์ชฝ

6. ๋ถ„๋ฅ˜๊ธฐ (ai_detector_model.joblib)

  • ๊ตฌ์กฐ โ€” scikit-learn Pipeline([StandardScaler, LogisticRegression(class_weight="balanced")])
  • ์ž…๋ ฅ โ€” FEATURE_ORDER๋กœ ๊ณ ์ •๋œ 28์ฐจ์› ๋ฒกํ„ฐ (perplexity 6 + stylometry 22)
  • ์„ฑ๋Šฅ โ€” ๋ณด์ • ๋ฐ์ดํ„ฐ์…‹์—์„œ 5-fold ๊ต์ฐจ๊ฒ€์ฆ ์ •ํ™•๋„ 97.2%, AUC 0.994 (ํ•œ๊ตญ์–ด 100%, ์˜์–ด 93.8%)
  • ์„ค๋ช… ๊ฐ€๋Šฅ์„ฑ โ€” ์„ ํ˜• ๋ชจ๋ธ์ด๋ผ ๊ฐ ํ”ผ์ฒ˜์˜ (ํ‘œ์ค€ํ™” ๊ฐ’ ร— ๊ณ„์ˆ˜) ๊ธฐ์—ฌ๋„๋ฅผ ๊ทธ๋Œ€๋กœ ๋…ธ์ถœ. ์ธก์ •๋œ ์ƒ์œ„ ์‹ ํ˜ธ: ์ธ๊ฐ„ ์ชฝ์€ ๊ตฌ์–ด์ฒดยท์ธ์šฉ๋ถ€ํ˜ธยท๋ง์ค„์ž„ํ‘œ ๋ฐ€๋„์™€ ๋ฌธ์žฅ burstiness, AI ์ชฝ์€ ํ•œ๊ตญ์–ด ๊ฒฉ์‹ ์–ด๋ฏธยท๊ธด ๋‹จ์–ดยท๊ท ์ผํ•œ ๋ฌธ์žฅ ๋ฆฌ๋“ฌ.

7. ํŒ์ • ๋ฐด๋“œ

AI ํ™•๋ฅ  verdict ๋ฌธ๋‹จ flagged
โ‰ฅ 0.85 AI-generated โœ“
โ‰ฅ 0.60 Likely AI โœ“
โ‰ฅ 0.40 Mixed
โ‰ฅ 0.15 Likely human
< 0.15 Human-written

๋ฌธ๋‹จ์€ ai_probability โ‰ฅ 0.60 ์ด๊ณ  low_confidence๊ฐ€ ์•„๋‹ ๋•Œ flagged(์˜์‹ฌ ์˜์—ญ)๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.


8. API ๋ ˆํผ๋Ÿฐ์Šค

GET /health

{ "status": "ok", "model_loaded": true, "load_error": null, "uptime_s": 159.9, "max_chars": 20000 }

POST /detect

์š”์ฒญ:

{ "text": "๊ฒ€์‚ฌํ•  ๊ธ€ ...", "lang": "ko" }

lang์€ ์„ ํƒ("ko" | "en" | ์ƒ๋žต ์‹œ ์ž๋™ ๊ฐ์ง€). ์‘๋‹ต(์š”์•ฝ):

{
  "language": "ko",
  "overall_ai_probability": 0.50,
  "verdict": "Mixed",
  "n_paragraphs": 3,
  "n_flagged": 1,
  "top_features": [ {"feature": "informal_per100", "contribution": -1.17, "direction": "human"} ],
  "paragraphs": [
    { "index": 0, "start": 0, "end": 40, "text": "...",
      "ai_probability": 0.35, "verdict": "Likely human",
      "flagged": false, "low_confidence": false, "top_features": [ ... ] }
  ],
  "elapsed_ms": 2640.3
}

์˜ค๋ฅ˜ ์‘๋‹ต: ๋นˆ ์ž…๋ ฅ 400 ยท ์ž˜๋ชป๋œ lang 400 ยท 20000์ž ์ดˆ๊ณผ 413 ยท ๋ชจ๋ธ ๋ฏธ๋กœ๋”ฉ 503.


9. ์›น UI (static/)

์˜์กด์„ฑ ์—†๋Š” ์ˆœ์ˆ˜ HTML/CSS/๋ฐ”๋‹๋ผ JS. ํ…์ŠคํŠธ ์ž…๋ ฅ โ†’ fetch("/detect") โ†’ ๊ฒฐ๊ณผ ๋ Œ๋”:

  • ์ „์ฒด AI ํ™•๋ฅ ์„ SVG ๋„๋„› ๊ฒŒ์ด์ง€ + verdict๋กœ ํ‘œ์‹œ
  • ๋ฌธ์„œ ์ˆ˜์ค€ ์ƒ์œ„ ๊ธฐ์—ฌ ์‹ ํ˜ธ๋ฅผ ์นฉ์œผ๋กœ ํ‘œ์‹œ
  • ๋ฌธ๋‹จ์„ ํ™•๋ฅ ์— ๋”ฐ๋ผ ์ดˆ๋กโ†’๋…ธ๋ž‘โ†’๋นจ๊ฐ•์œผ๋กœ ์ƒ‰์ƒ ๋“ฑ๊ธ‰ํ™”ํ•œ ์นด๋“œ๋กœ ์žฌํ˜„, ์นด๋“œ๋ฅผ ํด๋ฆญํ•˜๋ฉด ๊ทธ ๋ฌธ๋‹จ์˜ ์ƒ์œ„ ์‹ ํ˜ธ๊ฐ€ ํŽผ์ณ์ง
  • ํ•œ๊ตญ์–ดยท์˜์–ด ๋ผ๋ฒจ ๋ณ‘๊ธฐ, Cmd/Ctrl+Enter ๋‹จ์ถ•ํ‚ค

10. ๋ฐฐํฌ

๋กœ์ปฌ

pip install -r requirements.txt
./run.sh                       # http://127.0.0.1:8000

๋กœ์ปฌ models/๊ฐ€ ์žˆ์œผ๋ฉด ์˜คํ”„๋ผ์ธ์œผ๋กœ ์ฆ‰์‹œ ๋กœ๋“œ, ์—†์œผ๋ฉด ํ—ˆ๋ธŒ์—์„œ ๋ชจ๋ธ์„ ๋ฐ›์Œ.

Docker / Hugging Face Spaces

Dockerfile์€ HF Spaces ๊ทœ๊ฒฉ(๋น„๋ฃจํŠธ UID 1000, ํฌํŠธ 7860, HF ์บ์‹œ ๊ฒฝ๋กœ)์— ๋งž์ถฐ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. README.md ์ƒ๋‹จ์˜ YAML ํ—ค๋”(sdk: docker, app_port: 7860)๋กœ Spaces๊ฐ€ ์„ค์ •์„ ์ฝ์Šต๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ์—๋Š” ์ฝ”๋“œ๋งŒ ๋‹ด๊ณ , ์–ธ์–ด๋ชจ๋ธ์€ ์ฒซ ์‹คํ–‰ ์‹œ ํ—ˆ๋ธŒ์—์„œ ๋ฐ›์•„ ์บ์‹œํ•ฉ๋‹ˆ๋‹ค.


11. ํ•œ๊ณ„

  • ์ž‘์€ ๋ณด์ •์…‹(n=36) ๊ณผ LLM์ด ๋ชจ์‚ฌํ•œ "์ธ๊ฐ„" ์ƒ˜ํ”Œ โ€” ํ˜•์‹์ ์ธ ์‹ค์ œ ์ธ๊ฐ„ ๊ธ€(๋…ผ๋ฌธ, ์ •์ œ๋œ ์ž๊ธฐ์†Œ๊ฐœ์„œ)์€ ์‹ค์ œ๋ณด๋‹ค ๋” ์ž์ฃผ ์˜คํƒ๋  ์ˆ˜ ์žˆ์Œ.
  • ์ž‘์€ ์ฐธ์กฐ LM(GPT-2/KoGPT2, ~125M) โ€” ๋” ํฌ๊ฑฐ๋‚˜ instruction-tuned ๋ชจ๋ธ์ด๋ฉด perplexity ์‹ ํ˜ธ๊ฐ€ ๋” ์„ ๋ช…ํ•ด์ง.
  • ํŒจ๋Ÿฌํ”„๋ ˆ์ด์ฆˆ์— ์ทจ์•ฝ โ€” burstinessยท๊ตฌ์–ด์ฒด์— ๋ฐ˜์‘ํ•˜๋ฏ€๋กœ, ๊ตฌ์–ด์ฒด๋ฅผ ์„ž๊ณ  ๋ฌธ์žฅ ๊ธธ์ด๋ฅผ ํฉ๋œจ๋ฆฌ๋Š” "ํœด๋จธ๋‚˜์ด์ง•" ํŽธ์ง‘์ด AI ์ ์ˆ˜๋ฅผ ๋‚ฎ์ถค.
  • CPU ์ง€์—ฐ โ€” ๋ฉ€ํ‹ฐ์ฝ”์–ด์—์„œ ์š”์ฒญ๋‹น 1~2์ดˆ, ๊ณต์œ  ๋ฌด๋ฃŒ CPU์—์„œ๋Š” ๋” ๋А๋ฆผ.

RM-DETECT๋Š” ์—ฐ๊ตฌ์šฉ ํ”„๋กœํ† ํƒ€์ž…์ด๋ฉฐ ํ™•๋ฅ ์  ์ถ”์ •์ž…๋‹ˆ๋‹ค. ํ•™๋ฌธ์  ๋ถ€์ •ํ–‰์œ„ยท์ฑ„์šฉ ๋“ฑ ์ค‘๋Œ€ํ•œ ๊ฒฐ์ •์˜ ๋‹จ๋… ๊ทผ๊ฑฐ๋กœ ์‚ฌ์šฉํ•˜์ง€ ๋ง๊ณ , ์—ฌ๋Ÿฌ ์‹ ํ˜ธ ์ค‘ ํ•˜๋‚˜๋กœ๋งŒ ํ™œ์šฉํ•˜์„ธ์š”.