monitorul.ai
/

Notă metodologică·Analiza discursului·Monitorul.ai

Analiza discursului — metodologie

Pe lângă textul stenogramelor, monitorul.ai publică un strat suplimentar de codare: fiecare intervenție substanțială este analizată sub patru cadre din literatura de științe politice — populismul Hawkins, anti-pluralismul V-Party / V-Dem, calitatea deliberativă Steiner-Bächtiger și atribuirea de voce. Această pagină explică ce înseamnă fiecare cadru, cum sunt produse codările, ce limite au și de ce am ales tocmai aceste rubrici.

Ca și în nota generală despre arhivă, partea întâi este pentru cititorul fără pregătire tehnică, partea a doua pentru cei care vor să intre adânc în rubrici, prompt-uri și modele.

Partea I

Pentru toți cititorii

O privire de ansamblu, fără jargon. Ce înseamnă „analiză de discurs”, de ce o publicăm, ce poți face cu ea și ce nu.

Ce este analiza de discurs

Analiza de discurs este un strat de etichete pe care le punem peste textul fiecărei intervenții parlamentare substanțiale. Eticheta nu schimbă cuvintele rostite — textul stenogramei rămâne neatins. Eticheta răspunde la câteva întrebări precise: conține acest discurs un cadru populist „popor versus elite”?; delegitimează vorbitorul opoziția, justiția sau presa ca instituții?; oferă vorbitorul motive substanțiale pentru poziția sa, sau doar o afirmă?; vorbește în nume propriu sau citează / parafrazează / neagă?

Răspunsurile vin sub forma unor marcheri: fiecare element rhetoric detectat este ancorat de un fragment de text concret și etichetat cu un nivel de încredere. Pe pagina fiecărui discurs poți deschide marcherul și vedea exact citatul pe care se sprijină codarea — și-l poți contesta dacă nu ești de acord cu interpretarea.

Codările sunt produse de un model de limbaj (LLM), urmând prompt-uri publice versionate care reproduc rubrici academice publicate. Nu inventăm cadrele de analiză; le aplicăm pe corpus-ul românesc.

De ce o publicăm

Citarea exactă a unei intervenții este utilă, dar nu suficientă pentru jurnaliști, cetățeni sau cercetători care vor să compare comportamentul retoric al politicienilor în timp. Întrebări de genul „cine a folosit cel mai des cadrul populist în 2024?” sau „ce parlamentari au atacat cel mai sistematic justiția ca instituție?” nu pot fi răspunse doar prin căutare cu cuvinte cheie — un discurs care denunță populismul conține aceleași cuvinte ca unul care îl practică. Diferența este atribuibilă numai prin codare structurată.

Trei intenții stau în spatele acestui strat:

  • Comparabilitatecadrele alese (Hawkins, V-Party, V-Dem, DQI) sunt instrumente cu care echivalente internaționale au fost măsurate — Orbán, Kaczyński, Le Pen, Trump, Modi, Erdoğan. Codarea sub aceste rubrici așează discursul românesc pe aceeași axă.
  • Reproductibilitaterubricile sunt publicate în reviste de specialitate cu acord inter-codator (κ ≈ 0.7) și cu sute de studii cumulate în spate. Asta înseamnă că o concluzie făcută pe acest corpus poate fi verificată de un alt cercetător sub aceeași rubrică.
  • Apărabilitatecodarea face afirmații despre ce s-a spus, nu despre cine este vorbitorul. Distincția este atât editorială cât și juridică — vom reveni la ea la Ce nu este analiza.

Unde apare în arhivă

Stratul de discurs apare pe patru tipuri de pagini, fiecare cu un scop diferit:

  • Discurspe pagina fiecărui discurs (de exemplu /discurs/<slug>) vezi etichetele inline peste text și o listă de marcheri în coloana din dreapta; fiecare marcher este conectat la fragmentul exact pe care se sprijină.
  • Politicianpe pagina unui politician, /politicieni/<slug>, apare un panou cu evoluția celor patru cadre pe luni / ani și un grafic cu un punct pentru fiecare discurs analizat.
  • Documentpe pagina unei ședințe, /mo/<an>/<part>/<număr>, un mic rezumat de antet sintetizează codările tuturor intervențiilor analizate din document.
  • Statisticila /statistici apar agregările pe sistem: serii temporale, harta H × V, clasamente cu intervale de încredere bootstrap și un treemap de marcheri. Aceste agregări sunt vechiul răspuns la întrebări de tip „cine, când, cât”.

Cele patru cadre

Stratul actual conține patru cadre. Trei dintre ele măsoară patologii (populism, anti-pluralism); unul măsoară calitatea deliberativă (axa pozitivă). Al patrulea — atribuirea de voce — nu este propriu-zis un cadru, ci o etichetă obligatorie pe fiecare marcher: cine spune asta? Vorbitorul în nume propriu, sau vorbitorul citează / parafrazează / neagă pe altcineva?

  • PopulismHawkins 2018 — un scor 0/1/2 care indică în ce măsură discursul exprimă o viziune „popor virtuos versus elită coruptă”. Scorul este holistic, nu o sumă de marcheri. Score 0 = nu populist; 1 = momente populiste într-un discurs altfel non-populist; 2 = manifestul populist, viziunea pătrunde tot discursul.
  • Anti-pluralismV-Party / V-Dem — un scor 0/1/2 care indică în ce măsură discursul atacă condițiile multi-partidismului democratic: delegitimarea opoziției, ostilitatea față de presă, atacul la justiție, vinovăția colectivă pe minorități, respingerea normelor democratice.
  • Calitate deliberativăDQI Steiner-Bächtiger — singurul cadru pozitiv. Șase sub-codări care măsoară împreună cât de bine argumentează vorbitorul: nivelul justificării, conținutul justificării (interes de grup vs binele comun), respect pentru grupuri, respect pentru cereri, respect pentru contraargumente, politică constructivă.
  • Vocemonitorul-ii voice@v1 — pentru fiecare marcher, ce voce poartă: vorbitorul însuși, citat, vorbire indirectă, negat, ipotetic, apofază („nu spun X, dar...”), atribuire echivocă („unii spun că...”), sarcastic, întrebare retorică, sau incertă. Filtrul implicit pe site este vocea proprie.

Detalii rubrică-cu-rubrică (markeri, exemple românești, scoruri-limită) la partea a doua: Hawkins, V-Party, DQI, atribuirea de voce.

Cine vorbește, de fapt

Acesta este cel mai important detaliu metodologic. O analiză automată naivă va eșua spectaculos pe stenogramele parlamentare dintr-un motiv simplu: politicienii își citează adversarii foarte des. Un parlamentar care denunță retorica anti-maghiară conține în discurs aceleași fraze pe care le folosește un parlamentar care practică acea retorică. Diferența este voce: unul citează ca să respingă, altul afirmă în nume propriu.

Dacă o aplicație ignoră această distincție, denunțătorul ajunge clasat ca extremist. Concluziile sunt nu doar greșite — sunt echivalente unei calomnii la scară. Tocmai de aceea fiecare marcher are o etichetă de voce, atribuită de un clasificator separat care primește textul, contextul și un set de indicii (citez:, „nu spun că X, dar...”, etc.). Filtrul implicit din UI arată numai marcherii rostiți în nume propriu, ascunzând citatele și negările. Poți deschide filtrul „toate vocile” pentru a vedea inclusiv atribuirile indirecte, dar este responsabilitatea cititorului să le interpreteze corect.

Cazul cel mai delicat este apofaza — frazele de tipul „Nu spun că ungurii vor să cucerească Transilvania, dar...”. Literal este o negație, dar funcția retorică este afirmarea: vorbitorul plantează ideea în mintea audienței prin negația ei. Schema marchează separat acest tip de construcție ca apofază și o include explicit în clasamente paralele care arată retorica „sub umbrelă deniabilă”.

Ce nu este analiza

Stratul de discurs este un instrument de explorare, nu un verdict. Distincția este importantă din mai multe motive:

  • Per discurs, nu per persoanăschema codează discursuri, nu politicieni. „Acest discurs conține un cadru populist Hawkins=2 cu evidență la liniile 412–418” este o afirmație apărabilă. „Politicianul X este populist” este o afirmație despre personalitate — nu despre comportamentul retoric — și schema o evită deliberat. Clasamentele de la /statistici sunt agregări de marcheri pe ferestre de timp, nu profile de personalitate.
  • Explorare, nu publicarecifrele de pe site nu sunt rezultate validate prin acord inter-codator. Vom publica statistici κ într-o versiune ulterioară (200 discursuri codate manual de 2 cercetători, comparate cu codarea LLM). Până atunci, tratează cifrele ca puncte de plecare pentru cercetarea proprie, nu ca fapt stabilit.
  • Cadre, nu adevărfiecare cadru reflectă o tradiție academică cu propriile alegeri și limite. Hawkins măsoară un anumit fel de populism (cadrul ideațional); alte tradiții (populism stratificat, populism stilistic) ar produce alte coduri pe aceleași discursuri. Folosirea cadrelor publicate este o alegere de apărabilitate, nu o pretenție că ele epuizează fenomenul.
  • Fără verdict de „minciuni”am respins explicit ideea unui scor de „dezinformare” sau „minciuni”. Verificarea faptelor cere muncă de fact-checking, nu analiză textuală. În locul ei, schema detectează tipare retorice asociate cu argumentare derutantă (false dichotomii, atac la persoană, whataboutism). Acestea descriu forma retoricii, nu valoarea de adevăr a vreunei afirmații specifice.
  • Fără scor compozitnu publicăm un „indice de demagogie” sau un „rating de autoritarism”. Sunt agregări de mai multe componente, iar ponderile sunt o alegere a consumatorului, nu o decizie pe care o impunem noi. Componenți disponibili separat; consumatori (inclusiv presa) pot construi compoziții documentate cu ponderile lor.

Acoperire și limite

Acoperirea actuală: discursurile substanțiale începând cu 2020. Restul arhivei (1990 → 2019) rămâne neanalizat momentan; pe paginile afectate veți vedea mențiunea explicită „Acest discurs nu este încă acoperit de analiza de discurs”. Nu este o eroare; este un stadiu al proiectului.

De ce discursurile substanțiale și nu toate intervențiile? Codarea consumă timp de model, iar intervențiile de procedură („domnule președinte, vă rog să-mi acordați un minut...”, „cer cuvântul pe procedură”) nu produc semnal pe niciuna dintre cele patru cadre. Pragul curent este de 100 de cuvinte; sub el, intervenția intră în corpus dar nu trece prin clasificator.

Discursurile foarte vechi (înainte de 2015, mai ales din anii '90) pot avea erori de scanare a PDF-urilor sursă care fac textul să fie incomplet. Aceste stenograme pot cădea sub pragul de 100 de cuvinte și să rămână ne-codate, sau pot fi codate cu o încredere mai mică. Coloana încredere de pe pagina discursului este indicatorul direct al acestei incertitudini.

Roadmap-ul de extindere (κ-validare, mai multe cadre, acoperire retroactivă) apare la Drumul mai departe.

Cum semnalezi o eroare

Codarea automată produce erori. Tipurile cele mai frecvente sunt:

  • Voce greșităun discurs care citează populismul a fost codat ca populist. Acesta este cel mai important tip de eroare; raportează-l cu prioritate.
  • Marcher greșit ancoratcitatul de evidență din panel nu corespunde frazei reale (de exemplu, un offset byte greșit a făcut citatul să se taie la mijloc).
  • Falsă pozitivă proceduralăun cuvânt din vocabularul parlamentar standard („reprezentanții poporului”, „voia națiunii”) a fost interpretat ca marker populist, deși funcționa ca limbaj convențional în context.
  • Scor calibrat anormalun discurs evident populist scorat 0, sau invers — un discurs neutru scorat 2. Aceste erori indică o problemă de calibrare a clasificatorului și sunt utile pentru iterarea prompt-urilor.

Sesizările se trimit ca issue public în depozitul pipeline-ului, cu link-ul către pagina de discurs afectată și o descriere a erorii (scorul actual, ce credeți că ar fi corect, motivul). Permalink-urile fiind stabile, raportul rămâne reproductibil.

Deschide un issue ›

Partea a II-a

Detalii tehnice

Cele patru cadre codate, prompt-uri, modele, integrare în pipeline, filtre URL și disclaimer-ul obligatoriu. Util cercetătorilor, jurnaliștilor de date și dezvoltatorilor care folosesc arhiva ca sursă reproductibilă.

Hawkins · populism (rubrică ideațională)

Cadru: Hawkins, K. A. & Castanho Silva, B. (2018). Textual Analysis: Big Data Approaches. În The Ideational Approach to Populism, Routledge. Resurse autoritative: pagina Team Populism (rețeaua academică din spatele rubricii) și Global Populism Database (setul de date care aplică rubrica pe ~1900 de lideri globali).

Versiune: hawkins@2018; prompt: hawkins_populism_v1; rezolvat sub rubrica „holistic grading” cu acord inter-codator κ ≈ 0.7 documentat în literatură.

Scorul: ordinal 0 / 1 / 2, holistic — nu o sumă a marcherilor. Hawkins insistă explicit că rubrica nu este un algoritm de numărare; este o judecată calitativă a măsurii în care o viziune populistă „pătrunde” discursul.

  • 0 · non-populistspeech-ul nu exprimă o viziune populistă. Cuvinte ca „popor”, „elite”, „criză” pot apărea, dar în registru tehnocratic, procedural sau pluralist. Majoritatea discursurilor parlamentare obișnuite cad aici.
  • 1 · parțial / moderatapar elemente populiste (cadrul popor-vs-elite în câteva fraze, o invocare a crizei) dar nu sunt sistematice. Tipic pentru discursuri de opoziție care mixează critică tehnică cu apeluri populiste episodice.
  • 2 · pe deplin populistviziunea populistă este coloana vertebrală a discursului. Mai mulți marcheri se întăresc reciproc; cadrul Manichean popor-vs-elite susține structural argumentul. Este scorul cel mai rar; calibrarea Hawkins favorizează rezerva.

Cei 7 marcheri (vocabular închis, ancore de evidență):

  • people_vs_elite · popor vs elită — cadrul structural; popor virtuos, elită coruptă
  • moralistic_manichaeism · maniheism moral — bine versus rău, fără nuanțe
  • homogeneous_people · popor omogen — un singur „voce a românilor”, fără diversitate
  • evil_elite · elită coruptă — descrierea elitei ca activ malefică / trădătoare
  • popular_will_supremacy · supremația voinței populare — voia poporului mai presus de instituții
  • crisis_invocation · invocarea crizei — stakes existențiale, urgență dramatică
  • cosmic_proportions · miză cosmică — cadru civilizațional / istoric / etern

Trei capcane evitate explicit în prompt: (1) Capcana numărării de marcheri — un singur cadru popor-vs-elite într-un discurs de buget nu este Hawkins=2; pătrunderea contează, nu numărul. (2) Coding orb la voce — un discurs care neagă populismul nu poate fi Hawkins=2; numai marcherii în vocea proprie contribuie la scor. (3) Inflație din zgomot procedural — formule parlamentare standard („reprezentanții poporului”) NU se codează ca marcheri populiste fără context.

Prompt-ul complet, inclusiv exemple românești pentru fiecare scor și fiecare marker, este public la prompts/hawkins_populism_v1.md.

V-Party · anti-pluralism

Cadru: V-Party (Varieties of Party Identity and Organization), un proiect derivat din V-Dem (Varieties of Democracy, Universitatea Göteborg) care codează partide politice internaționale pe axe de organizare și retorică. Versiunea folosită aici combină indicele V-Party de anti-pluralism cu sub-indicatorii V-Dem „attacks-on” (judiciary, opposition, media, minorities, civil society) — vezi V-Dem Codebook pentru lista completă de indicatori.

Versiune: vparty@v3 combinat cu vdem-attacks@v15; prompt: vparty_antipluralism_v2 (v2 a închis o falsă pozitivă pe atacuri la agenții administrative non-jurisdicționale identificată în testarea pe 30 de discursuri).

De ce V-Party și V-Dem împreună: Hawkins măsoară populismul (cadrul popor-vs-elite). V-Party + V-Dem măsoară anti-pluralismul — atacurile practice la condițiile multi-partidismului democratic. Cele două sunt distincte jurnalistic:

V-Party scăzutV-Party ridicat
Hawkins scăzutTehnocratic / pluralistIliberalism tehnocratic
Hawkins ridicatPopulism contestatar legitimIliberalism cu ideologie subțire

Cadranul jos-dreapta (Hawkins=2 + V-Party≥1) este tiparul AUR / Fidesz / PiS și semnalul de produs al corpus-ului. Fără măsurarea V-Party separată, nu poți distinge cele două axe.

Scorul: ordinal 0 / 1 / 2, holistic. Aceleași praguri ca Hawkins (non-pluralist / parțial / pe deplin), aceleași capcane evitate explicit (numărare, voce, zgomot).

Cei 5 marcheri (vocabular închis):

  • opposition_delegitimization · delegitimarea opoziției — opoziția prezentată ca trădătoare, ne-română, ilegitimă
  • media_hostility · ostilitate față de presă — presa ca clasă (nu doar un articol specific) prezentată ca dușman / agent
  • judiciary_attack · atac la justiție — instanțe ca instituție delegitimate; nu critica unei decizii specifice
  • minority_scapegoating · vinovăție colectivă pe minorități — un grup minoritar invocat ca cauză a problemelor societale
  • democratic_norms_rejection · respingerea normelor democratice — proceduri constituționale, alegeri, separație a puterilor respinse de principiu

Distincția critică: critica unui ministru specific, a unei decizii CCR specifice, a unui articol de presă specific NU sunt anti-pluralism. Marcherul se aprinde când instituția însăși este delegitimată ca clasă. Această distincție este cea mai frecventă sursă de fals-pozitive și este apărată explicit în prompt cu exemple românești.

Prompt-ul complet (cu allowlist-ul instituțional pentru clasificarea judiciary_attack) este la prompts/vparty_antipluralism_v2.md.

DQI · calitate deliberativă

Cadru: Steiner, J. (2012). The Foundations of Deliberative Democracy. Cambridge University Press. + Bächtiger, A. et al. (2017), actualizările echipei Bern. Discuția contemporană a indicelui apare în Oxford Handbook of Deliberative Democracy (Bächtiger, Dryzek, Mansbridge, Warren, eds., 2018).

Versiune: steiner-bachtiger@2017; prompt: dqi_v1. Aplicat la peste 30 de studii parlamentare comparative (Bundestag, Congresul SUA, Parlamentul European, Consiliul Statelor elvețian) cu κ ≈ 0.7-0.8.

Specific: singurul cadru cu axă pozitivă din strat. Răspunde întrebării care discursuri sunt bune, nu doar care sunt rele. Fără DQI, corpus-ul ar putea răspunde doar la întrebări despre patologie. DQI completează imaginea cu măsura argumentării de calitate.

Multidimensional prin design — fără scor compozit: DQI este publicat și aplicat ca șase sub-codări simultane. Nu există un „scor DQI” unic; fiecare dintre cele șase dimensiuni este raportată separat:

  • level_of_justification (0–3)cât de bine motivează vorbitorul poziția. 0 = afirmație fără motiv;1 = motiv inferior (circular, opinie, autoritate de grup); 2 = justificare calificată (motiv specific, sursă, mecanism); 3 = sofisticată (lanț cauzal multi-pas, surse, anticiparea obiecțiilor). Scor 3 este foarte rar.
  • content_of_justificationce face apel justificarea: none (fără motiv), group_interest (interesul unui grup specific — partid, regiune), common_good (binele comun, principii universale), mixed (ambele).
  • respect_for_groups (0–2)cum tratează vorbitorul grupurile sociale / politice afectate. 0 = derogare explicită; 1 = neutru; 2 = recunoaștere explicită de legitimitate.
  • respect_for_demands (0–2)cum tratează vorbitorul cererile opoziției. 0 = respinge ca ridicole;1 = ignoră; 2 = recunoaște legitimitatea cererii (chiar dacă nu o acceptă).
  • respect_for_counterarguments (0–2)cum tratează vorbitorul argumentele opoziției. 0 = ignoră;1 = recunoaște; 2 = se angajează substanțial cu ele.
  • constructive_politicspositional (doar afirmă o poziție); alternative_proposal (oferă o propunere alternativă); mediating_proposal (oferă o propunere de mediere între poziții opuse — rar în debatul de plen românesc).

Trei capcane evitate explicit în prompt: (1) Lungime confundată cu justificare — un discurs lung de 400 de cuvinte care repetă „aceasta este necesar” poate avea level=0; un amendament de 80 de cuvinte cu un motiv specific poate avea level=2. (2) Politețe confundată cu respect — „Stimați colegi” + ignorarea contraargumentelor = respect=0, nu 2. (3) Inflație de „constructiv” — a articula o poziție opusă mai puternic este positional, nu alternative_proposal.

Prompt-ul complet, cu exemple românești pentru fiecare valoare a celor șase sub-codări, este la prompts/dqi_v1.md.

Atribuirea de voce — clasificator separat

Cadru: rubrică custom dezvoltată în cadrul proiectului monitorul-ii, inspirată de literatura lingvistică despre evidențialitate, vorbire indirectă și retorica negării (apophasis). Spre deosebire de cele trei rubrici principale, nu există un cadru academic publicat care să codifice cele 9 voci ca un set închis aplicat discursului parlamentar; setul nostru este pragmatic, optimizat pentru siguranța de atribuire (vezi de ce contează vocea).

Versiune: voice@v1; prompt: voice_classifier_v1. Rulează ca un pas separat, după ce primul pas (clasificatorii Hawkins / V-Party / DQI) emit marcheri cu o voce preliminară. Acest al doilea pas rafinează vocea cu mai mult context și un set închis de 9 valori posibile.

De ce separat: a cere modelului să detecteze marcherul ȘI vocea într-un singur prompt produce rezultate fragile, cu varianță mare. Un pas separat — cu indicii regex pre-procesate (citez:, „nu spun că X, dar...”, etc.) — îmbunătățește consistența și permite escaladarea numai cazurilor incerte la un model frontier mai scump.

Cele 9 voci posibile (enum închis):

  • speaker_first_personvoce proprie — vorbitorul afirmă în nume propriu. Default-ul filtrului UI.
  • quotedcitat — reproduce cuvintele altuia, marcat de „citez:”, ghilimele, etc. Câmpul attributed_to identifică sursa.
  • reportedvorbire indirectă — parafrazează o afirmație („X susține că...”). attributed_to și aici.
  • negatednegat — vorbitorul respinge afirmația, fără continuare care o re-afirmă.
  • hypotheticalipotetic — în cadru condițional / contrafactual („dacă cineva ar spune că...”).
  • apophasis_disclaimedapofază — „nu spun că X, dar...”. Literal negație, retoric afirmare. Cazul cel mai delicat.
  • weasel_attributionatribuire echivocă — „unii spun că...”, „mulți cred că...”. Vorbitorul plantează ideea sub o atribuire vagă pe care nu o susține nominal.
  • sarcasticsarcastic — folosește vocabularul țintei pentru a-l ironiza. Necesită context pentru detectare.
  • interrogativeîntrebare retorică — „de ce să credem oare că...?”. Permite negarea plauzibilă pentru o afirmație implicită.
  • uncertainincertă — clasificatorul nu a putut decide. Default-ul când construcția este ambiguă.

Regula de bias: implicit pe „incertă” mai degrabă decât pe „voce proprie” când construcția e ambiguă. Sub-detecția de voce (a tag-a un quoted ca first_person) este eroarea care se scalează catastrofal — denunțătorul devine extremist. Toate celelalte erori sunt recuperabile.

Prompt-ul complet, cu zeci de exemple românești pentru fiecare voce și cu discutarea cazurilor de graniță (apophasis vs negație, sarcasm vs first-person) este la prompts/voice_classifier_v1.md.

Pipeline-ul de codare

Codarea de discurs este o etapă suplimentară pe lângă pipeline-ul standard de extracție descris în nota generală. După ce textul stenogramei a fost extras în JSON canonic și fiecare intervenție are un identificator stabil, etapa analyze rulează clasificatorii pe discursurile substanțiale și produce un sidecar JSON .analysis.json alături de cel canonic.

De ce sidecar separat și nu inline în canonic:

  • Limpezime epistemicăschema canonică este o reprezentare deterministă a sursei — ce s-a spus, fără interpretare. Codările LLM sunt cu câteva ordine de mărime mai interpretative. Mixarea celor două ar șterge granița între „ce zice sursa” și „cum am codat-o”.
  • Iterare independentăclasificatorii și rubricile vor evolua mai repede decât structura sursei. Cu sidecar separat, o îmbunătățire de prompt nu invalidează schema canonică sau cache-urile descendente (embedding-uri, indici).
  • Apărabilitate juridicădacă o codare este contestată legal, sidecar-ul poate fi recodat sub o rubrică revizuită fără să atingem stenograma. Dacă o instanță cere retragerea, înregistrarea de discurs poate fi ștersă păstrând intactă „ce s-a spus”.

Versionare per cadru: fiecare cadru are propria sa versiune de rubrică și de prompt. Schema sidecar-ului păstrează această versiune în câmpul extractor_versions:

{
  "frameworks": {
    "hawkins_populism":  { "rubric_version": "hawkins@2018",
                           "prompt_version": "hawkins_v1",
                           "model": "google/gemini-3.1-flash-lite" },
    "dqi":               { "rubric_version": "steiner-bachtiger@2017",
                           "prompt_version": "dqi_v1", ... },
    "vparty_antipluralism": { ... }
  },
  "voice_classifier": { "version": "voice@0.1",
                        "prompt_version": "voice_v1", ... }
}

Modelul actual: Gemini 3.1 Flash Lite via OpenRouter este modelul implicit pentru codarea în volum, în baza testărilor de calitate-vs-cost peste 30 de discursuri pilot. Prompt-urile rulează cu structured output (output schema JSON aplicată), care reduce zgomotul de format. Cazurile incerte pot escalada la un model frontier (Sonnet / Opus class) — mecanism prevăzut în pipeline, neactiv în producție momentan.

Idempotență per cadru: dacă Hawkins reușește pe un document și V-Party eșuează (timeout, rate limit, format invalid), sidecar-ul persistă cu Hawkins populat și V-Party absent; rerularea reia doar V-Party. Pipeline-ul este conservator cu costul: toate apelurile sunt logate cu tokens / cost / latency în baza de date analyses, iar comanda analyze --budget USD oprește graceful execuția când plafonul a fost atins.

Indexare: după producerea sidecar-ului, codările sunt proiectate în indicele Elasticsearch mo-speeches sub câmpul enrichments.discourse.*. Indicele păstrează agregatele (scor, marker_count, voce dominantă) plus marker-urile individuale cu evidence și voce — toate accesibile filtrelor de la /cauta.

Specificația completă a sidecar-ului, inclusiv exemple JSON pentru fiecare cadru, este la docs/discourse-analysis-schema.md în depozitul pipeline-ului.

Filtrele URL

Toate suprafețele care arată codări de discurs (pagina discursului, pagina politicianului, pagina documentului, /statistici) acceptă două parametri URL comuni. Ambele sunt non-canonice — link-ul fără ele rămâne canonic; link-ul cu ele este o variație de filtru, nu o pagină distinctă pentru SEO.

  • ?voice=allinclude și marcherii din voci ne-proprii (citat, vorbire indirectă, negat, apofază, etc.). Default omis = numai speaker_first_person. Schimbă dramatic agregatele pentru politicieni care își citează adversarii frecvent.
  • ?conf=07păstrează numai codările cu framework_confidence ≥ 0.7. Default omis = nu se aplică prag. Pragul 0.7 este threshold-ul folosit în clasamentele canonice publicate la /statistici; pe paginile de explorare default-ul este permisiv pentru a nu ascunde semnal slab dar autentic.

Pe pagini de discurs, toggle-urile „voce” și „încredere” sunt în panoul lateral dreapta. Pe paginile de politician și de statistici, sunt deasupra graficelor. Schimbarea declanșează soft-navigation (Next.js router.push); cache-ul ISR se împarte natural pe parametrii URL.

Disclaimer metodologic — text obligatoriu

Documentul de spec canonical-queries.md al pipeline-ului impune ca orice rezultat agregat (clasament, statistică) să fie publicat cu două disclaimer-uri redate verbatim. Le reproducem aici și pe orice suprafață de agregare:

Metodologic: Acest clasament / această statistică este derivat din analiza automată de discurs sub rubrica publicată [framework_name] (versiune [rubric_version]). Codările nu au fost validate față de acordul inter-codator uman (κ); proiectul plănuiește publicarea statisticilor κ într-o versiune ulterioară. Tratează acest clasament ca exploratoriu și sub revizie sub metodologii viitoare. Evidența per discurs — marcherii și fragmentele-sursă din spatele fiecărei codări — este disponibilă în sidecar-urile de analiză și ar trebui consultată dacă orice clasament individual este contestat.

De model: Codările sunt produse de modelul [model_id] sub prompt-ul versiune [prompt_version] și rubrica versiune [rubric_version]. Recodarea sub un alt model, prompt sau configurație de rubrică poate produce alte clasamente. Versiunile de model și de prompt sunt fixate per codare în sidecar-urile de analiză; acest clasament agregă doar codările a căror tuplă (model, prompt, rubric) corespunde configurației numite mai sus.

Ce înseamnă „κ”: coeficientul Cohen kappa, măsura standard a acordului între doi codatori (umani sau om-vs-LLM) corectată pentru acordul întâmplător. Hawkins raportează κ ≈ 0.7 între codatori umani pe rubrica sa („agreement substanțial” în categoriile lui Landis & Koch). Țelul nostru este să atingem un κ comparabil între LLM și o validare umană pe un eșantion de 200 de discursuri (5 populiști notori, 5 moderați, 5 cu registre variabile, ~150 random). Acest pas nu este încă livrat.

Drumul mai departe

Stratul actual este versiunea 0.x. Ce urmează (în ordine probabilă):

  • κ-validare200 de discursuri codate manual de 2 cercetători români; statistici κ coder1↔coder2 și LLM↔fiecare coder, raportate per cadru și per dimensiune. Re-rulate la fiecare upgrade de prompt sau model.
  • Acoperire retroactivăextinderea codării la corpus-ul pre-2020 după ce κ este stabil pe corpus-ul curent. Costurile sunt prevăzute în pipeline; bariera principală este iterarea prompt-urilor pe registre lingvistice mai vechi (1990–2010 cu vocabulare specifice perioadei).
  • Cadre suplimentareCMP / Manifesto Project (axa stânga-dreapta economică), CHES (axa cultural GAL-TAN), V-Dem attacks-on (sub-indicatori per țintă), securitization (Copenhagen-School), conspiracy framing (statul paralel, Soros, etc.). Adăugarea lor presupune un prompt nou per cadru și un nou pas de rulare; structura sidecar-ului este deja pregătită.
  • Audience signalsjoin pe câmpul narrator din canonic — aplauze, întreruperi, retragere, microfon tăiat. Zero LLM cost, niciun risc de defăimare. Va activa indicele de „polarizare” per discurs (aplauze de la o tabără, întreruperi de la cealaltă).
  • Marcheri România-specificiregistre publice românești care nu au cadru internațional: anti-justice-reform (era OUG 13), country_for_sale, antonescu_rehabilitation, ortodoxist_nationalist, etc. Vor avea propria lor versiune de prompt și disclaimer extins (defăimare mai sensibilă).

Toate aceste extinderi sunt cu prioritate pe apărabilitate — fiecare marker nou primește o rubrică publicată drept ancoră, sau este flagat explicit ca custom rubric în UI și în clasamente. Nu fuzionăm rubricile publicate cu cele custom într-un singur scor; consumatorii primesc componente, ponderile rămân la ei.

Cum poți contribui: dacă ai pregătire în științe politice și ești interesat să codezi manual un fragment din eșantionul de validare, sau dacă ai observat un tipar retoric repetat care nu este capturat de cadrele actuale, deschide un issue. Schema este append-only; rubrici noi nu invalidează cele existente.