📐 Metodologija Izračunavanja

← Nazad na Aplikaciju

Detaljno Objašnjenje Metodologije

Ovaj dokument precizno objašnjava kako aplikacija izračunava sve metrike koje se koriste u analizi kognitivnog testa, uključujući definicije nominalnih vrednosti, referentnih vrednosti, i transformaciju na Likertovu skalu (1-7).

Sadržaj

Opšti Princip: Embedding Reprezentacije

Sve semantičke metrike (Variability, Granularity, Concreteness) rade sa embedding vektorima koje generiše OpenAI API koristeći model text-embedding-3-small.

Šta su embedding vektori?

Embedding je numerička reprezentacija reči u višedimenzionalnom prostoru (~1536 dimenzija). Reči sa sličnim značenjem imaju slične vektore i nalaze se blizu jedna drugoj u tom prostoru.

Normalizacija Reči

Pre bilo kakve analize, sve reči prolaze kroz standardni postupak normalizacije:

window.normalizeWord = (s) => (s || "").trim().toLowerCase().normalize("NFC");
Važno: Ovaj korak osigurava da reči "Pas", "pas" i "PAS" budu tretirane identično.

1. SEMANTIC VARIABILITY (Semantička Varijabilnost)

Šta Meri?

Koliko se značenje reči menja tokom niza. Veća variabilnost znači da pacijent koristi semantički raznolike reči i "skače" između različitih tema/kategorija.

Kako se Računa?

Korak 1: Svaka reč se pretvara u embedding vektor kroz OpenAI API.

Korak 2: Računaju se cosine distance između svake dve uzastopne reči:

Cosine Similarity:
\[ \text{similarity}(A, B) = \frac{A \cdot B}{\|A\| \times \|B\|} \]

Cosine Distance:
\[ \text{distance}(A, B) = 1 - \text{similarity}(A, B) \]

Variability:
\[ \text{Variability} = \frac{1}{n-1} \sum_{i=1}^{n-1} \text{distance}(w_i, w_{i+1}) \]
Primer:

Reči: ["pas", "mačka", "automobil"]

  • Distance(pas, mačka) = 0.25 (oba su životinje - semantički slični)
  • Distance(mačka, automobil) = 0.65 (različite kategorije - velika razlika)
  • Variability = (0.25 + 0.65) / 2 = 0.45

Nominalne i Referentne Vrednosti

Tip Vrednosti Opseg Opis
Teorijski opseg [0, 2] Matematički mogući opseg (0 = identične reči, 2 = potpuno suprotne)
Realistični opseg [0.2, 0.85] Opseg koji se zaista javlja u praksi kod fluentnih testova
Referentna vrednost (min) 0.2 Mapira se na Likert skor 1 (vrlo niska varijabilnost)
Referentna vrednost (max) 0.85 Mapira se na Likert skor 7 (vrlo visoka varijabilnost)

2. SEMANTIC GRANULARITY (Semantička Granularnost)

Šta Meri?

Koliko su reči specifične nasuprot generičkim.

Kako se Računa?

Koristi se anchor-based pristup - svaka reč se poredi sa dva skupa referentnih reči (anchora):

Generički Anchori:

stvar, osoba, objekat, nešto, aktivnost, akcija, ideja, pojava, mesto, vreme

Specifični Anchori:

pas, automobil, avion, hleb, sat, kuća, stolica, računar, telefon, knjiga

Formula za svaku reč:
\[ \text{Granularity}(w) = \text{AvgSim}(w, \text{specific}) - \text{AvgSim}(w, \text{generic}) \]
Finalna metrika:
\[ \text{GranularityMean} = \frac{1}{n} \sum_{i=1}^{n} \text{Granularity}(w_i) \]
Primer:

Reč: "pas"

  • Prosečna sličnost sa generičkim anchorima ["stvar", "osoba", "objekat"...] = 0.40
  • Prosečna sličnost sa specifičnim anchorima ["pas", "automobil", "avion"...] = 0.75
  • Granularity("pas") = 0.75 - 0.40 = 0.35 (pozitivno = specifična reč)

Nominalne i Referentne Vrednosti

Tip Vrednosti Opseg Opis
Teorijski opseg [-2, 2] Matematički mogući opseg
Realistični opseg [-0.12, 0.12] Opseg u praksi
Interpretacija Pozitivne vrednosti: specifičnije reči
Negativne vrednosti: generičnije reči
~0: neutralne reči

3. CONCRETENESS (Konkretnost)

Šta Meri?

Koliko su reči konkretne (fizički opipljive) nasuprot apstraktnim (ideje, koncepti).

Kako se Računa?

Identično kao Granularity, ali sa različitim anchorima:

Konkretni Anchori:

kamen, voda, drvo, metalo, papir, tkanina, staklo, cveće, voće, povrće

Apstraktni Anchori:

ljubav, mir, pravda, istina, lepota, sloboda, znanje, vreme, snaga, mudrost

Formula:
\[ \text{Concreteness}(w) = \text{AvgSim}(w, \text{concrete}) - \text{AvgSim}(w, \text{abstract}) \]
Finalna metrika:
\[ \text{ConcreteMean} = \frac{1}{n} \sum_{i=1}^{n} \text{Concreteness}(w_i) \]
Primer:

Reč: "stolica"

  • Prosečna sličnost sa konkretnim anchorima ["kamen", "voda", "drvo"...] = 0.55
  • Prosečna sličnost sa apstraktnim anchorima ["ljubav", "mir", "pravda"...] = 0.20
  • Concreteness("stolica") = 0.55 - 0.20 = 0.35 (pozitivno = konkretna reč)

Nominalne i Referentne Vrednosti

Tip Vrednosti Opseg Opis
Teorijski opseg [-2, 2] Matematički mogući opseg
Realistični opseg [-0.15, 0.15] Opseg u praksi
Interpretacija Pozitivne vrednosti: konkretnije reči
Negativne vrednosti: apstraktnije reči

4. FREQUENCY (Učestalost Reči)

Šta Meri?

Koliko su reči česte u jeziku. Meri se na osnovu korpusa od 50,000 najčešćih srpskih reči (assets/sr_50k.txt).

Kako se Računa?

Korak 1: Učitava se fajl koji sadrži parove: reč + broj pojavljivanja

Korak 2: Za svaku reč se uzima log₁₀(count) (tzv. Zipf scale)

Formula:
\[ \text{Zipf}(w) = \log_{10}(\text{count}(w)) \]
Finalna metrika:
\[ \text{Frequency} = \frac{1}{n} \sum_{i=1}^{n} \text{Zipf}(w_i) \]

Zašto logaritamska skala?

Distribucija frekvencije reči u jeziku prati Zipfov zakon - nekoliko reči je ekstremno često ("i", "je", "da"), dok većina reči ima malu frekvenciju. Logaritam kompresuje ovaj širok opseg u upravljiv broj.

Primer:
  • Reč "pas" → 15,000 pojavljivanja → log₁₀(15000) ≈ 4.18
  • Reč "mačka" → 8,000 pojavljivanja → log₁₀(8000) ≈ 3.90
  • Reč "detektor" → 50 pojavljivanja → log₁₀(50) ≈ 1.70
  • Frequency = (4.18 + 3.90 + 1.70) / 3 ≈ 3.26

Nominalne i Referentne Vrednosti

Tip Vrednosti Opseg Opis
Teorijski opseg [2.3, 7.1] log₁₀(~200) do log₁₀(~10,000,000)
Realistični opseg [2.5, 5.5] Tipične vrednosti u testovima fluentnosti
Napomena: Ako nijedna reč nije pronađena u korpusu, metrika prikazuje "—" (nije dostupna).

5. PHONOLOGICAL NEIGHBORHOOD (Fonološko Susedstvo)

Šta Meri?

Koliko su uzastopne reči fonološki slične (po zvuku). Koristi se za analizu fonološke fluentnosti (npr. imenovanje reči koje počinju sa "P").

Kako se Računa?

Koristi se Dice Coefficient na osnovu bigrama (parova slova) sa anchor karakterima:

Korak 1: Svaka reč se razbija na bigrame sa anchorima ^ (početak) i $ (kraj)

Primer Bigrama:

Reč: "pas"

Sa anchorima: "^pas$"

Bigrami: ["^p", "pa", "as", "s$"]

Korak 2: Računa se Dice Coefficient između svake dve uzastopne reči:

Dice Coefficient:
\[ \text{Dice}(A, B) = \frac{2 \times |\text{presek}(A, B)|}{|A| + |B|} \]
gde je \(|\text{presek}(A, B)|\) broj zajedničkih bigrama

Finalna metrika:
\[ \text{PhonNeighAvg} = \frac{1}{n-1} \sum_{i=1}^{n-1} \text{Dice}(w_i, w_{i+1}) \]
Detaljni Primer:

Reči: "pas" i "pat"

  • Bigrami "pas": ["^p", "pa", "as", "s$"] → 4 bigrama
  • Bigrami "pat": ["^p", "pa", "at", "t$"] → 4 bigrama
  • Zajednički bigrami: ["^p", "pa"] → 2 bigrama
  • Dice = (2 × 2) / (4 + 4) = 4/8 = 0.50 (50% sličnost)

Nominalne i Referentne Vrednosti

Tip Vrednosti Opseg Opis
Teorijski opseg [0, 1] 0 = potpuno različite reči, 1 = identične reči
Realistični opseg [0.0, 0.35] U testovima sa random rečima, retko prelazi 0.35

6. WORD LENGTH (Dužina Reči)

Šta Meri?

Prosečan broj karaktera u rečima. Najjednostavnija metrika koja može pokazati tendenciju ka kraćim ili dužim rečima.

Kako se Računa?

Formula:
\[ \text{WordLength} = \frac{1}{n} \sum_{i=1}^{n} \text{length}(w_i) \]
Primer:

Reči: ["pas", "mačka", "automobil"]

Dužine: [3, 5, 9]

Word Length = (3 + 5 + 9) / 3 = 5.67

Nominalne i Referentne Vrednosti

Tip Vrednosti Opseg Opis
Teorijski opseg [1, 20] Realističan opseg za reči u srpskom jeziku
Realistični opseg [4.0, 8.0] Tipične vrednosti u testovima fluentnosti

Mapiranje na Likertovu Skalu (1-7)

Sve metrike se normalizuju i mapiraju na skalu od 1 do 7 pomoću linearne transformacije. Ovo omogućava intuitivno poređenje rezultata različitih metrika.

Algoritam Transformacije

Linearno Mapiranje:

1. Clamp sirovog skora na realistični opseg:
\[ x' = \max(\min(x, x_{\text{max}}), x_{\text{min}}) \]
2. Normalizuj u [0, 1]:
\[ t = \frac{x' - x_{\text{min}}}{x_{\text{max}} - x_{\text{min}}} \]
3. Projecuj na [1, 7]:
\[ \text{Likert} = \text{round}(1 + t \times 6) \]
Primer za Variability:

Realistični opseg: [0.2, 1.2]

Sirova vrednost: 0.7


1. Clamp: 0.7 je unutar [0.2, 1.2], ostaje 0.7

2. Normalizacija: t = (0.7 - 0.2) / (1.2 - 0.2) = 0.5 / 1.0 = 0.5

3. Projekcija: score = 1 + 0.5 × 6 = 1 + 3 = 4

4. Zaokruživanje: 4


FINALNI LIKERT SKOR: 4/7

Interpretacija Likert Skale

1
Veoma
nisko
2
Nisko
3
Ispod
proseka
4
Prosek
5
Iznad
proseka
6
Visoko
7
Veoma
visoko
Likert Skor Percentil Klinička Interpretacija
1-2 0-17% Značajno ispod proseka - može ukazivati na kognitivni deficit
3 17-33% Ispod proseka - potencijalno blago oštećenje
4 33-67% Prosek - normalan nivo funkcionisanja
5 67-83% Iznad proseka - dobro funkcionisanje
6-7 83-100% Značajno iznad proseka - izvrsno funkcionisanje

Pregled Svih Opsega Metrika

Ova tabela sumira teorijske i realističine opsege svih šest metrika koje aplikacija računa:

Metrika Teorijski Opseg Realistični Opseg Interpretacija Visokih Vrednosti
Variability [0, 2] [0.2, 0.85] Veća semantička raznolikost reči
Granularity [-2, 2] [-0.12, 0.12] Specifičnije (manje generičke) reči
Concreteness [-2, 2] [-0.15, 0.15] Konkretnije (manje apstraktne) reči
Frequency [2.3, 7.1] [2.5, 5.5] Češće reči u jeziku
Phon. Neighborhood [0, 1] [0.0, 0.35] Veća fonološka sličnost uzastopnih reči
Word Length [1, 20] [4.0, 8.0] Duže reči

Napomena o Opsezima:

Realistični opsezi su definisani na osnovu empirijskih podataka iz testova fluentnosti. Ako dobijete vrednosti izvan ovih opsega, to može ukazivati na:

  • Netipičan uzorak odgovora (npr. samo vrlo retke ili samo vrlo česte reči)
  • Vrlo mali broj reči (< 5) što dovodi do nestabilnih procena
  • Potrebu za prilagođavanjem opsega za specifične populacije

Numerička Stabilnost i Reproduktivnost

Aplikacija koristi napredne tehnike za osiguranje numeričke stabilnosti i reproduktivnosti rezultata.

1. Kahan Summation Algorithm

Sve proseke se računaju pomoću Kahan algoritma koji minimizuje kumulativnu grešku zaokruživanja pri sabiranju floating-point brojeva:

function kahanSum(arr) { let sum = 0, c = 0; // c = kompenzacija greške for (let i = 0; i < arr.length; i++) { const y = arr[i] - c; // Oduzmi grešku const t = sum + y; // Privremeni zbir c = (t - sum) - y; // Nova greška sum = t; // Ažuriraj zbir } return sum; }

Zašto je ovo važno?

Obični JavaScript sabiranje može izgubiti tačnost kada se sabiru brojevi veoma različitih magnitud. Kahan algoritam održava dodatnu kompenzacionu promenljivu koja prati i kompenzuje te greške, što rezultuje u većoj preciznosti, posebno pri sabirati velikog broja malih brojeva.

2. Kvantizacija (Zaokruživanje)

Embedding vektori i kosinus vrednosti se kvantizuju (zaokružuju) na određeni broj decimala:

window.quantizeNum = (x, decimals = 6) => { const factor = Math.pow(10, decimals); return Math.round(x * factor) / factor; };

Tipične preciznosti:

Prednosti kvantizacije:

  • Reproduktivnost: Isti input uvek daje isti output
  • Smanjenje šuma: Eliminiše irelevantan numerički šum iz poslednih decimala
  • Efikasnija memorija: Manji JSON objekti pri snimanju

3. Unicode Normalizacija

NFC (Canonical Decomposition, followed by Canonical Composition) normalizacija osigurava da se karakteri sa dijakritičkim znacima (č, ć, š, ž...) uvek kodiraju na isti način:

Problem bez normalizacije:

Karakter "č" može biti kodiran na dva načina u Unicode-u:

  • Način 1: Jedan kombinovani karakter (U+010D)
  • Način 2: "c" + combining caron (U+0063 U+030C)

Bez normalizacije, ova dva bi bila tretirana kao različiti stringovi! normalize("NFC") konvertuje uvek u Način 1.

4. Clamping na Realistične Opsege

Pre mapiranja na Likert skalu, sirove vrednosti se ograničavaju (clamp) na realističine opsege. Ovo sprečava da ekstremne vrednosti (outliers) iskoče iz skale 1-7:

if (clamped < min) clamped = min; if (clamped > max) clamped = max;
Napomena: Ako često dobijate clamped vrednosti, to može ukazivati da realistični opsezi treba da budu prilagođeni za vašu specifičnu populaciju.

© 2024 Kognitivni Test - Dokumentacija Metodologije

← Nazad na Aplikaciju