{"coherence_floor":0.3,"coherence_npmi":0.7257,"honest_caveats":["NMF topics are exploratory. Labels are auto-generated heuristics over the top words, not editorial.","Many IODA disruption incidents share boilerplate (\"CenAlert detected interference\"). Dedupe removes near-duplicates by SHA-256 of normalized text, but a residual disruption topic is expected.","Topic assignment is hard (single argmax). An incident with mixed signals (e.g. election + DNS) only counts toward one topic.","Coherence is approximated via pairwise NPMI on the training corpus, not full c_v from R\u00f6der et al. Reasonable proxy but not directly comparable to BERTopic numbers in the literature.","Sentence-transformers + BERTopic was not installable in the production venv-ml \u2014 fell back to tf-idf+NMF per the project directive. BERTopic with all-MiniLM-L6-v2 would likely surface more semantic clusters; tf-idf catches the lexical surface."],"loaded_at":"2026-10-04T20:05:10.804965Z","method":"tf-idf + NMF (sklearn)","model":"tfidf_nmf_v1","n_docs":1195,"n_topics":8,"ngram_range":[1,2],"passed_promote_floor":true,"topics_summary":[{"label":"Connectivity disruption (IODA)","n_docs":765,"top_words":["connectivity","disruption connectivity","drop alerts","connectivity disruption","connectivity drop"],"topic_id":0},{"label":"Connectivity disruption (IODA)","n_docs":157,"top_words":["network disruption","network","drop alerts","alerts","connectivity drop"],"topic_id":1},{"label":"Social media platform blocks","n_docs":51,"top_words":["anomalous","blocking probes","probes anomalous","dns","dns blocking"],"topic_id":2},{"label":"Sustained activity / repeated alerts","n_docs":53,"top_words":["confirms activity","confirms","activity","recorded confirms","activity confirms"],"topic_id":3},{"label":"HTTP/TLS probe timeouts","n_docs":48,"top_words":["blocked","probes blocked","probes","blocking timeout","timeout probes"],"topic_id":4},{"label":"Connectivity disruption (IODA)","n_docs":15,"top_words":["united","drop united","united connectivity","disruption united","united alerts"],"topic_id":5},{"label":"Social media platform blocks","n_docs":40,"top_words":["com","blocking","dns","dns blocking","blocking domains"],"topic_id":6},{"label":"OONI anomaly burst","n_docs":47,"top_words":["ooni","anomaly rate","rate","anomaly","shutdown"],"topic_id":7},{"label":"Unlabeled (low signal)","n_docs":19,"top_words":[],"topic_id":-1}],"trained_at":"2026-05-21T12:56:38.360715Z","vocab_size":623}
