Объяснимость и нормативные параметры

Автор: Дмитрий Малыхин (i@dmalyhin.ru).

Объяснимость как требование

Каждая аналитическая связь должна по возможности показывать собственное основание: общие концепты и дескрипторы, вклад классификации и профиля, содержательные каналы текстовой семантики, параметры графа или частотную характерность.

МАП намеренно сохраняет несколько аналитических отношений раздельно. Это позволяет объяснить не только насколько объекты близки, но и в каком пространстве возникла эта близость.

Нормативные параметры

Структурная модель

concept weight        = 3.00
descriptor weight     = 1.20
classification weight = 0.55
profile weight        = 0.35
author weight         = 0.80
series author weight  = 0.20

Структурно связанных произведений: до 6.

Структурно похожих серий: до 5.

Текстовая модель

main_idea outer weight = 0.65
description outer weight = 0.35
cross thesis share = 0.30
minimum text length = 40
role minimum length = 12

Профиль описания:

subject/characterization = 0.45
full description         = 0.30
structure/organization   = 0.10
mechanism                = 0.15

Слой текстово похожих произведений:

limit = 6
minimum_score = 0.78
content_gate_minimum_score = 0.72

Авторский семантический слой:

limit = 5
minimum_score = 0.80
minimum_exclusive_books = 1
author gate = content_gate_minimum_score = 0.72

Семантический поиск

limit = 24
minimum_score = 0.55
query_gate_minimum_score = 0.55

Формула запроса использует веса 0.40 / 0.25 / 0.20 / 0.15 для main_idea / thesis / subject / description.

Концептуальный граф

concept min books = 3
pair min common = 3
pair min Jaccard = 0.12
background threshold = 40
community min size = 3
Louvain resolution = 1.2
seed = 42
bridge min books = 3
bridge min areas = 2
central top = 20
frequency top = 20
bridge top = 30

Методологическая версия

Изменение этих параметров меняет аналитическую модель и должно фиксироваться в версии документации. Исполняемые библиотеки и способ упаковки модели не относятся к математической спецификации МАП.

Ассоциации дескрипторов

устойчивая пара: common >= 3 и Jaccard >= 0.12
кандидат на почти-дубликат: common >= 3, Jaccard >= 0.80, Overlap >= 0.90

Устойчивость графа произведений

Jaccard-сценарии = 0.10 и 0.20
фоновый признак = присутствует не менее чем в 10% произведений

Эти пороги относятся к аналитической модели текущей методологической версии и не меняют прямые отношения ЛОГОС.

Проверка и ограничения

Объяснимость

Структурная рекомендация обязана иметь наблюдаемое основание: общие концепты, дескрипторы или авторство. Вклад координат может быть разложен по координатам итоговой оценки.

Текстовая рекомендация должна отдельно раскрывать итоговую оценку и прохождение содержательного шлюза. Сходство структуры изложения не должно выдавать себя за сходство содержания.

Проверки графа

Для каждого ребра сохраняются или воспроизводятся:

ni, nj, mij
Jaccard
Overlap
Cosine association
произведения-основания

Для тематической области проверяются состав концептов, произведений, внутренние и внешние рёбра и параметры алгоритма.

Псевдокод структурного слоя

idf = BUILD_IDF(concepts, descriptors)
for work in works:
    raw = WEIGHTED_FEATURES(work, idf)
    vector[work] = L2(raw)

for work in works:
    candidates = DIRECTLY_GROUNDED_CANDIDATES(work)
    candidates -= SAME_SERIES(work)
    score = DOT(vector[work], vector[candidate])
    RANK(candidates, key=(-score, normalized_title, stable_id))

Псевдокод текстового слоя

for work in works:
    roles = EXTRACT_D1_D4_OR_FALLBACK(work.description)
    embeddings = EMBED_EACH_CHANNEL(main_idea, roles, description)

for pair in candidates:
    central = CENTRAL_SEMANTIC_SCORE(pair)
    profile = DESCRIPTION_PROFILE_SCORE(pair)
    score = 0.65*central + 0.35*profile
    gate = CONTENT_GATE(pair)
    ACCEPT_IF(score >= threshold AND gate >= gate_threshold)

Псевдокод графа

concept_books = INVERT(work_concepts)
for concept_pair in CONCEPT_PAIRS(concept_books):
    common, J, O, C = ASSOCIATION_METRICS(concept_pair)
    ADD_EDGE_IF_THRESHOLDS_PASS(concept_pair, common, J, O, C)

communities = LOUVAIN(graph, resolution=1.2, seed=42)
pagerank = PAGERANK(graph)
betweenness = BETWEENNESS(graph, distance=INVERSE_ASSOCIATION)
roles = CLASSIFY_CONCEPT_ROLES(graph, communities, pagerank, betweenness)