Despre acest curs
C3 introduce etapa de date a proiectului EchoChamber. Construim corpusul pe care îl vom folosi mai târziu pentru adnotare, căutare semantică, RAG și agenți.
În această sesiune lucrăm cu YouTube ca sursă principală. Participanții colectează un eșantion mic pentru a înțelege metoda, iar analiza se face pe un corpus mai mare oferit de instructor. Discutăm metadate, reproductibilitate, curățare, standardizare, limite etice și primul Prompt v1 pentru explorarea comentariilor politice.
- Date, corpus și curățare
- Surse publice: YouTube
- YouTube Data API v3
- Metadate și reproductibilitate
- Curățare și standardizare în JSONL
- Sentiment vs. poziționare față de țintă
- Bule discursive ca vocabular pentru C4
- Tema 1: explorare corpus + Prompt v1
Materiale
student_XX, apoi Tema 1 pentru explorarea corpusului mare curățat și testarea Promptului v1.Flux de date
Surse discursive YouTube
| Zonă discursivă | Exemple de canale | Rol în corpus |
|---|---|---|
| Mainstream instituțional | StirileProTV, digi24hd56, InfoTVR, hotnews_ro, euronewsro, Antena3CNN, libertatearo, europafmromania, b1tvchannel, rfiromania, euractivromania9532 | bază de comparație instituțională |
| Civic / investigativ / corectiv | RecorderRomania, europa-libera-romania, g4media479, VeridicaRO, StareaNatiei | discurs critic orientat spre transparență și responsabilitate |
| Suveranist oficial / anti-sistem electoral | georgesimionoficial, partidulAUR2024, CălinGeorgescu-CanalulOficial, DianaSosoacaOfficial | discurs politic mobilizator, anti-elite, suveranitate |
| Neîncredere sistemică / media alternativă | RomaniaTVOFICIAL, realitatea2025, TuDecizi-s3g, turcescu111 | suspiciune față de instituții și media mainstream |
| Conspiraționist / marginal / mitic-național | AdevaruriSecrete, otvdirect, AltcevacuAdrianArtene, roxindaniel, Canal33Romania, Curiozitate-Canal33, Spiritualitate-Canal33 | narațiuni alternative, explicații ascunse, teme spiritualizate |
Sursele sunt puncte de pornire pentru zone discursive, nu etichete finale. Un comentariu colectat de la un canal suveranist nu este automat „suveranist”, iar încadrarea se face ulterior prin adnotare.
Obiective de învățare
- Înțelegi de ce un agent are nevoie de corpus, nu doar de model
- Poți crea și folosi o cheie YouTube Data API v3 în siguranță
- Poți colecta un eșantion mic de comentarii YouTube din surse publice
- Poți salva date brute în
data/raw/fără să le modifici - Poți curăța textul și păstra
text_rawpentru verificare - Poți lucra cu un corpus mare oferit în
data/provided/ - Poți salva corpusul curățat în
data/cleaned/ - Poți documenta datele în
README.md, secțiuneaData Gathering - Poți separa sentimentul general de poziționarea față de o țintă
- Poți rula Prompt v1 pe comentarii politice și verifica manual rezultatele în fișierul CSV de review
Schema minimă de corpus
{
"id": "yt_<video_id>_<comment_id>",
"source_platform": "youtube",
"source_channel": "<handle>",
"text": "...",
"text_raw": "...",
"bubble_label": null,
"bubble_self_identified": false,
"topic": null,
"rhetoric_type": null,
"video_id": "...",
"video_title": "...",
"video_date": "YYYY-MM-DD",
"comment_date": "YYYY-MM-DD",
"likes": 0,
"lang": "ro",
"collected_at": "YYYY-MM-DD"
}
text= text curățat pentru analizătext_raw= text original pentru verificaresource_channel,video_id,video_title= trasabilitatevideo_date,comment_date,collected_at= context temporal și reproductibilitatebubble_label,topic,rhetoric_type= câmpuri goale sau incomplete, pregătite pentru C4
Ce predai după C3
Individual
-
01
notebooks/student_XX/c3_collect_clean.ipynb— colectare mică + curățare rapidă -
02
data/raw/student_XX_youtube_raw.jsonl— eșantion brut individual -
03
data/cleaned/student_XX_youtube_clean.jsonl— eșantion curățat individual -
04
notebooks/student_XX/Tema_1_corpus_exploration_prompt.ipynb— Tema 1: explorare + Prompt v1 -
05
outputs/student_XX_prompt_v1_review.csv— verificare manuală a promptului
Echipă
-
06
scripts/collect_youtube.py— script final de colectare YouTube -
07
scripts/clean_youtube.py— script comun de curățare -
08
data/provided/corpus_youtube_large_raw.jsonl— corpus mare oferit de instructor -
09
data/cleaned/corpus_youtube_large_clean.jsonl— corpus mare curățat -
10
README.md— secțiuneaData Gatheringcompletată
Finalizare
-
11
comentariu
DONEîn GitHub Issue pentru taskurile relevante
GitHub Issues / Workflow
Issue-uri individuale
- fiecare participant lucrează în
notebooks/student_XX/ - rulează notebook-ul
c3_collect_clean.ipynb - salvează
data/raw/student_XX_youtube_raw.jsonl - salvează
data/cleaned/student_XX_youtube_clean.jsonl
- fiecare participant lucrează în
notebooks/student_XX/ - încarcă
data/cleaned/corpus_youtube_large_clean.jsonl - testează Prompt v1 pe cel puțin 10 comentarii
- creează
outputs/student_XX_prompt_v1_review.csv - completează
verdictșinote
Issue-uri de echipă
- adaugă
scripts/collect_youtube.py
- descarcă sau adaugă corpusul în
data/provided/corpus_youtube_large_raw.jsonl
- rulează
scripts/clean_youtube.py - produce
data/cleaned/corpus_youtube_large_clean.jsonl
- completează secțiunea Data Gathering în
README.md
Convenție
- issue-urile individuale încep cu
student_XX - issue-urile de echipă încep cu
C3 - toate folosesc milestone-ul
C3 - Data and corpus
Metoda GitHub / API
Livrabilele C3 sunt urmărite prin GitHub Issues în milestone-ul C3 - Data and corpus. Issue-urile individuale încep cu student_XX, iar issue-urile de echipă încep cu C3. Cheile API rămân doar în .env; .env nu se urcă pe GitHub.
Etică
Ce nu colectăm
- date personale identificabile
- conținut din surse private sau grupuri închise
- date colectate prin încălcarea termenilor platformei
- articole complete protejate de copyright
- username-uri ca identitate analizabilă
- texte care pot expune persoane vulnerabile
Ce facem obligatoriu
- folosim doar surse publice
- păstrăm sursa, canalul, video-ul, data comentariului și data colectării
- documentăm selecția în
README.md, secțiuneaData Gathering - colectăm doar conținut public relevant pentru analiză și păstrăm doar ce este necesar pentru corpus
- anonimizăm ID-uri și indicii personale
- separăm analiza discursului de evaluarea persoanelor
- notăm limitele și biasurile corpusului
Bule discursive
Bulele nu sunt persoane reale și nu sunt grupuri sociale fixe. Sunt tipare de limbaj care apar repetat într-un corpus politic. Un comentariu se analizează prin target, poziționarea față de țintă (stance), sentiment, tone și interpretation_problem.
În C3 nu producem încă etichete finale de bule. Folosim aceste categorii doar ca vocabular conceptual pentru a înțelege ce va trebui adnotat în C4.
| Agent | Personalitate | Cum vorbește | Ce îl definește |
|---|---|---|---|
| Personalist-salvator | devotat, admirativ, sigur | laudativ, emoțional, încrezător | vede liderul ca soluție excepțională |
| Anti-sistem | furios, suspicios, dezamăgit | acuzator, moralizator, direct | vede instituțiile ca profund compromise |
| Anti-suveranist | critic, vigilent, defensiv | contestatar, argumentativ | respinge liderii și discursul suveranist |
| Conspiraționist | alarmist, hiper-suspicios | speculativ, revelator, totalizant | explică evenimentele prin forțe ascunse |
| Pro-european | normativ, moderat, legalist | sobru, justificativ, procedural | apără regulile, instituțiile și ancorarea europeană |
Prompt exploratoriu v1
Ești analist de discurs politic.
Citește comentariul și identifică:
1. target: cine sau ce este discutat în principal
2. stance: poziția față de target
3. sentiment: valența generală
4. tone: tonul dominant
5. topic: tema principală
6. interpretation_problem: none / sarcasm / multiple_targets / unclear_text / other
7. reason: justificare scurtă
Returnează JSON valid.
Comentariu:
<<< {comment_text} >>>
Output așteptat:
{
"target": "...",
"stance": "support|attack|neutral|ambiguous",
"sentiment": "positive|negative|neutral|mixed",
"tone": "...",
"topic": "...",
"interpretation_problem": "...",
"reason": "..."
}
Promptul v1 nu produce etichete finale. Este un test didactic: vedem unde modelul confundă sentimentul cu poziționarea față de țintă, unde apar ținte multiple și ce trebuie definit mai clar în C4.
Resurse
YouTube API / colectare
Etică și date
Prompting / structură conversațională
Referință selecție media