expAge commited on
Commit ·
c81be24
1
Parent(s): 7209371
refactor(inference): désactiver les patrons de synonymie
Browse filesTrop de faux positifs : 'A r_syn B' n'est pas une équivalence stricte
(souvent une hyperonymie déguisée, ex. pénis r_syn sexe).
- _schema_synonym_equiv retiré de la cascade effort 1 (la fonction reste
définie pour usage futur éventuel, mais elle ne tourne plus).
- GENERIC_RELATIONS passe de ('r_isa', 'r_syn') à ('r_isa',) — les
schémas deduction_isa, double_isa et target_generic n'utilisent plus
les synonymes comme chemins de généralisation.
src/jdm_agent/inference/constants.py
CHANGED
|
@@ -78,7 +78,10 @@ COMPOSITION_MAP: dict[str, list[tuple[str, str]]] = {
|
|
| 78 |
# --- Génériques & classes ---------------------------------------------------
|
| 79 |
|
| 80 |
#: Relations « génériques » : du terme vers ses sur-ensembles (déduction-ISA).
|
| 81 |
-
|
|
|
|
|
|
|
|
|
|
| 82 |
|
| 83 |
#: Grandes classes pour le schéma d'élimination par classe.
|
| 84 |
ELIMINATION_CLASSES: tuple[str, ...] = (
|
|
|
|
| 78 |
# --- Génériques & classes ---------------------------------------------------
|
| 79 |
|
| 80 |
#: Relations « génériques » : du terme vers ses sur-ensembles (déduction-ISA).
|
| 81 |
+
#: La synonymie a été retirée volontairement : `A r_syn B` ne signifie pas que
|
| 82 |
+
#: A et B sont substituables dans tous les contextes (souvent une hyperonymie
|
| 83 |
+
#: déguisée). La garder ici introduisait trop de faux positifs.
|
| 84 |
+
GENERIC_RELATIONS: tuple[str, ...] = ("r_isa",)
|
| 85 |
|
| 86 |
#: Grandes classes pour le schéma d'élimination par classe.
|
| 87 |
ELIMINATION_CLASSES: tuple[str, ...] = (
|
src/jdm_agent/inference/engine.py
CHANGED
|
@@ -304,7 +304,7 @@ def _schema_synonym_equiv(ctx: _Ctx) -> InferenceResult | None:
|
|
| 304 |
|
| 305 |
|
| 306 |
def _schema_deduction_isa(ctx: _Ctx) -> InferenceResult | None:
|
| 307 |
-
"""Déduction par généralisation : `A r_isa
|
| 308 |
|
| 309 |
Le schéma le plus rentable — un trait porté par un générique se transfère.
|
| 310 |
AGRÉGATION MULTI-CHEMINS : on n'arrête PAS au 1er générique concluant, on
|
|
@@ -526,7 +526,7 @@ def _schema_double_isa(ctx: _Ctx) -> InferenceResult | None:
|
|
| 526 |
|
| 527 |
|
| 528 |
def _schema_target_generic(ctx: _Ctx) -> InferenceResult | None:
|
| 529 |
-
"""Via un générique de l'object : `subject R G` ∧ `object r_isa
|
| 530 |
for gname, gw, via in _gens(ctx, ctx.object):
|
| 531 |
if norm(gname) == norm(ctx.subject):
|
| 532 |
continue
|
|
@@ -546,13 +546,13 @@ def _schema_target_generic(ctx: _Ctx) -> InferenceResult | None:
|
|
| 546 |
# 1. schémas gratuits / exacts : guards, prefix, inverse, implication
|
| 547 |
# 2. RÉFUTATIONS spécialisées : isa_incompatible, class_elim
|
| 548 |
# 3. schémas SAINS porteurs de signe : deduction_isa, transitivity,
|
| 549 |
-
# hyponym_propagation — ils peuvent conclure « vrai » OU « faux »
|
| 550 |
-
#
|
| 551 |
-
#
|
| 552 |
-
#
|
| 553 |
-
#
|
| 554 |
-
#
|
| 555 |
-
#
|
| 556 |
_EFFORT1_SCHEMAS = (
|
| 557 |
_schema_guards,
|
| 558 |
_schema_prefix,
|
|
@@ -570,14 +570,11 @@ _EFFORT1_SCHEMAS = (
|
|
| 570 |
# Réfutation tardive : cohyponymie — uniquement si aucun chemin ISA
|
| 571 |
# positif n'a abouti (sinon la transitivité aurait confirmé).
|
| 572 |
_schema_cohyponym,
|
| 573 |
-
# Synonymie en tout dernier (priorité basse, substitution non stricte).
|
| 574 |
-
_schema_synonym_equiv,
|
| 575 |
)
|
| 576 |
# Effort 2 : composition (curée, saine) d'abord, puis les schémas LÂCHES en
|
| 577 |
# bas de cascade — target_generic, double_isa. Ces deux-là sur-génèrent
|
| 578 |
# (ponts par nœuds génériques) : ils ne tournent qu'en dernier recours,
|
| 579 |
-
#
|
| 580 |
-
# fortement décotée (cf. SCHEMA_CONFIDENCE).
|
| 581 |
_EFFORT2_SCHEMAS = (
|
| 582 |
_schema_composition,
|
| 583 |
_schema_target_generic,
|
|
|
|
| 304 |
|
| 305 |
|
| 306 |
def _schema_deduction_isa(ctx: _Ctx) -> InferenceResult | None:
|
| 307 |
+
"""Déduction par généralisation : `A r_isa G` ∧ `G R B` ⟹ `A R B`.
|
| 308 |
|
| 309 |
Le schéma le plus rentable — un trait porté par un générique se transfère.
|
| 310 |
AGRÉGATION MULTI-CHEMINS : on n'arrête PAS au 1er générique concluant, on
|
|
|
|
| 526 |
|
| 527 |
|
| 528 |
def _schema_target_generic(ctx: _Ctx) -> InferenceResult | None:
|
| 529 |
+
"""Via un générique de l'object : `subject R G` ∧ `object r_isa G`."""
|
| 530 |
for gname, gw, via in _gens(ctx, ctx.object):
|
| 531 |
if norm(gname) == norm(ctx.subject):
|
| 532 |
continue
|
|
|
|
| 546 |
# 1. schémas gratuits / exacts : guards, prefix, inverse, implication
|
| 547 |
# 2. RÉFUTATIONS spécialisées : isa_incompatible, class_elim
|
| 548 |
# 3. schémas SAINS porteurs de signe : deduction_isa, transitivity,
|
| 549 |
+
# hyponym_propagation — ils peuvent conclure « vrai » OU « faux ».
|
| 550 |
+
# 4. réfutation tardive par cohyponymie.
|
| 551 |
+
# La SYNONYMIE (schéma synonym_equiv et r_syn dans les chemins de
|
| 552 |
+
# généralisation) a été DÉSACTIVÉE volontairement : la synonymie JDM n'est
|
| 553 |
+
# pas substituable (ex. « pénis r_syn sexe » est en fait une hyperonymie),
|
| 554 |
+
# elle générait trop de faux positifs. Le schéma `_schema_synonym_equiv`
|
| 555 |
+
# reste défini mais ne figure plus dans la cascade.
|
| 556 |
_EFFORT1_SCHEMAS = (
|
| 557 |
_schema_guards,
|
| 558 |
_schema_prefix,
|
|
|
|
| 570 |
# Réfutation tardive : cohyponymie — uniquement si aucun chemin ISA
|
| 571 |
# positif n'a abouti (sinon la transitivité aurait confirmé).
|
| 572 |
_schema_cohyponym,
|
|
|
|
|
|
|
| 573 |
)
|
| 574 |
# Effort 2 : composition (curée, saine) d'abord, puis les schémas LÂCHES en
|
| 575 |
# bas de cascade — target_generic, double_isa. Ces deux-là sur-génèrent
|
| 576 |
# (ponts par nœuds génériques) : ils ne tournent qu'en dernier recours,
|
| 577 |
+
# et leur confiance est fortement décotée (cf. SCHEMA_CONFIDENCE).
|
|
|
|
| 578 |
_EFFORT2_SCHEMAS = (
|
| 579 |
_schema_composition,
|
| 580 |
_schema_target_generic,
|