Галоўная / Артыкулы / RDF у GraphRAG: практычныя слоі онтологій з прыкладамі VOO

RDF у GraphRAG: практычныя слоі онтологій з прыкладамі VOO

Адз індэксах паведамленняў і тройках дадзеных, через RDFS, OWL і SHACL — калі онтологіі перамагаюць табліцы і як яны стабілізуюць GraphRAG.

2162 слоў

Антологія здаецца містычной; ідея ж простая. Цэта явна даговоренасць пра певную сферу: якія рэчы існуе, якія зв’язкі є дазволенымі, якія правіла павінны ўжывацца для гэтых зв’язкаў, і што машына можа вывести з вялікі ўжо наяўных фактов. Класычная фраза Грубера — «явнае апісанне канцэптуалізацыі» — проста означае опис, чытальны для машыны, пра тое, як каманда выбрала разумець певную частку света.

Прыклад дапаможы: Vanguard S&P 500 ETF (VOO). У публічных матэрыялах сказана, што VOO створаны для відстэйкання показніка S&P 500. Система знаёмых павінна розумець прынеймна:

Vanguard S&P 500 ETF — это ETF. Йім керуе Vanguard. Ён відстэйкае індекс S&P 500.

Гэтыя тры рэченні вже стосуюцца кожнага з основных аспектаў.

Антологія і граф знаёмых — не адно і тое ж

Антанатыя визначае правілы свету. Граф знанняя храніць факты пра той свет.

Антанатыя можа прызначыць ETF і AssetManager як тыпы, managedBy як звязак ад ETF да менеджера, а tracksIndex як звязак ад ETF да індэкса. Пасля граф храніць экзанплі: VOO — это ETF; VOO managedBy Vanguard; VOO tracksIndex S&P500Index.

Спрабуйце параванаваць гэта з дизайнам настольных гэймоў і ныявным станам на дошцы. Фраза “антанатыя ≈ шэма, граф знанняя ≈ даны” ёсць корыстным спрасцаваннем — нават якія антанатыя можа кодаваць болей багатае логіку, чым звычныя шэмы баз дадзеных.

Чы роўна завжды трэба антанатыю?

Няма. Пошук за точным ключам у калькulaцый калякох поль можа выконвачыцца ў табліцах або JSON. Работа з онтологіямы выклікае расходы на проектаў, кераванне, парабяранне і адтрыманне. Яна стае корыстной, калі з’яўляюцца такія проблемы:

Проблема 1. Разныя системы вжываюць разныя словы

fund provider, asset manager і management company могу абазавацца на одной ідэі. Онтологія выбірае прыемны термін і супарабяруе аліясы.

Проблема 2. Карыстувальнікі ставяць запытанні, якія вымагаюць встановлення зв’язкаў

“Калія ETF-ы, якімі керуе Vanguard, стежаць за індэксам акцыяў США?” вымагае багатоэтапнага шляху, а не простага падбору ключавага слова.

Проблема 3. Системе трэба выявляць некоректныя даны

Якщо managedBy павінен выказваць на арганізацыю, то VOO managedBy John Smith павінен не працаваць — нават якщо Джон ёсць менеджерам портфеля. У регулюючыхся галузях адна неправильная деталь можа паслабіць санкцыяўнае адпаведальнасць і рэзультаты работы ШІ; абмежэнняя онтологіі выступаюць у ролі захоўніках стандартам.

Проблема 4. Сістэма павінна вылучаць факты, якія ніколі не былі безпосередна зберагнуты

Расчункі на адпаведнасць падкласаў і зворачных атрыбутаў можу стварыць неявныя типы і зворачныя звязкі.

Проблема 5. LLM павінен мець надзейны карты домэны

Моделі ствараюць структуры самымі рознымі спосабамі; онтологія забезпечвае пераканальную карту для разбівання, адназначэння і параболкі — особліва разам з GraphRAG.

Адны прыклад, пяць тэхналогічных слоёў

Сцэнарый VOO праходзіць праз пяць слоёў: ідэнтыфікаторы, тройкі RDF, схема RDFS, сэмантыка OWL і параболка SHACL.

Слоёў 1: ідэнтыфікаторы і прасторы імен

Стабільныя IRI запобегаюць збігам імен. Менеджер можа называцца так:

https://example.org/finance/Vanguard

Прэфіксы дапамагаюць залічваць файлы:

@prefix fin: <https://example.org/finance/> .

Што дазволяе раскрываць локальныя імены, такія як:

fin:Vanguard

Слой 2: RDF представляе факты як тройкі

Кожна запэўненне складаецца з суб’екта, прадыката і об’екта:

Subject       Predicate       Object
VOO           managedBy       Vanguard
VOO           tracksIndex     S&P 500 Index

Формат Turtle:

@prefix fin: <https://example.org/finance/> .

fin:VOO fin:managedBy fin:Vanguard ;
        fin:tracksIndex fin:SP500Index .

JSON-LD можа выкорыстоўваць той самы граф для веб-систем:

{
  "@context": {
    "fin": "https://example.org/finance/",
    "managedBy": {
      "@id": "fin:managedBy",
      "@type": "@id"
    },
    "tracksIndex": {
      "@id": "fin:tracksIndex",
      "@type": "@id"
    }
  },
  "@id": "fin:VOO",
  "managedBy": "fin:Vanguard",
  "tracksIndex": "fin:SP500Index"
}

Слой 3: RDFS вводзіць базовую схему

RDFS дадае класы, атрыбуты, домэн/дзіапазон і зв’язкі падкласаў. Простая таксанамія продуктав:

@prefix fin:  <https://example.org/finance/> .
@prefix rdf:  <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .

fin:FinancialProduct a rdfs:Class .
fin:Fund             a rdfs:Class ;
                     rdfs:subClassOf fin:FinancialProduct .
fin:ETF              a rdfs:Class ;
                     rdfs:subClassOf fin:Fund .
fin:AssetManager     a rdfs:Class .
fin:MarketIndex      a rdfs:Class .
fin:managedBy a rdf:Property ;
    rdfs:domain fin:Fund ;
    rdfs:range fin:AssetManager .
fin:tracksIndex a rdf:Property ;
    rdfs:domain fin:ETF ;
    rdfs:range fin:MarketIndex .

Акцэсаванне ETF пад гэтым дрэвам:

FinancialProduct
└── Fund
    └── ETF

Слой 4: OWL дадае болей багатыя семантыкі

OWL можа пазначаць інверсіі, кардинальнасць і нез’ўзаемнасць. Якщо managedBy ўзначае інверсію manages, зберагчы аднаковы направлення можна вывести іншае:

fin:VOO fin:managedBy fin:Vanguard .

Скэч інверсіі:

@prefix fin: <https://example.org/finance/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .

fin:managedBy a owl:ObjectProperty ;
    owl:inverseOf fin:manages .
fin:ETF owl:disjointWith fin:AssetManager .

Чытанне значэння людзьмом:

If VOO is managed by Vanguard,
then Vanguard manages VOO.

Стверджваны факт:

fin:VOO fin:managedBy fin:Vanguard .

Выведзеныны працоўныя наследкі:

fin:Vanguard fin:manages fin:VOO .

Слой 5: SHACL пераканальвае даныя графа

Форматы выкрываюць бягі інстанцый, якія маюць значэнне для автараў онтологій у прыменэнні. Валідны апісанне ETF:

@prefix fin: <https://example.org/finance/> .
@prefix sh:  <http://www.w3.org/ns/shacl#> .

fin:ETFShape
    a sh:NodeShape ;
    sh:targetClass fin:ETF ;
    sh:property [
        sh:path fin:managedBy ;
        sh:class fin:AssetManager ;
        sh:minCount 1 ;
        sh:maxCount 1
    ] ;

    sh:property [
        sh:path fin:tracksIndex ;
        sh:class fin:MarketIndex ;
        sh:minCount 1
    ] .

Компактная валідная інстанцыя:

fin:VOO a fin:ETF ;
    fin:managedBy fin:Vanguard ;
    fin:tracksIndex fin:SP500Index .

fin:Vanguard a fin:AssetManager .
fin:SP500Index a fin:MarketIndex .

Невалідны тип керуючага аб’екта павінен спрычыніць невяліднасць пераканалення:

fin:BrokenFund a fin:ETF ;
    fin:managedBy fin:Alice .

fin:Alice a fin:PortfolioManager .

Як выведзеныны ствараюць новыя знанні

Ланцюгі падкласаў спрыяюць паднесенню інстанцый уверх па дрэве:

fin:ETF rdfs:subClassOf fin:Fund .
fin:Fund rdfs:subClassOf fin:FinancialProduct .
fin:managedBy rdfs:range fin:AssetManager .
fin:managedBy owl:inverseOf fin:manages .

На адной з вузкіх стверджванняў типу:

fin:VOO a fin:ETF ;
    fin:managedBy fin:Vanguard .

Механізмы разумовага аналізу можуць вывести шырэйшыя типы:

fin:VOO a fin:Fund .
fin:VOO a fin:FinancialProduct .
fin:Vanguard a fin:AssetManager .
fin:Vanguard fin:manages fin:VOO .

Выведзеныны запалняюць прасоўкі; SHACL продавжае заходзіць тое, што пішалі людзі або прыстройства для выкарыстоўвання дадзеных.

Пытанні кампетэнцыі: проектаванне, прычымленае да пытанняў

Пачніце з пытанняў, на якія должна адпаведаць система — «Калія Vanguard ETF-ы стежаць за індэксамі акцый США?» — а потым выберыце тыпы, атрыбуты і обмежэння. Лічыцца, што такі падход прыяўляе онтологіі да практычнага выкарыстання, а не да філасофскай завершанасці.

Практычны процес стварэння онтологій

Domain goals + user questions + source data
                  ↓
       Competency-question generation
                  ↓
       Concept and relationship extraction
                  ↓
         Initial ontology proposal
                  ↓
     Reasoning, SHACL, and query evaluation
                  ↓
       Human review and iterative revision

Ітеравацыя: цілі і пытанні → канцэптуальная модель → формальная онтологія → заполненне графа → адпаведна пераканання → запыт/расчунок → праверкі.

Канцэптуальны эскіз:

ETF ──managedBy──> AssetManager
ETF ──tracksIndex──> MarketIndex

Прыклад запытку у формате SPARQL:

SELECT ?etf
WHERE {
  ?etf a fin:ETF ;
       fin:managedBy fin:Vanguard ;
       fin:tracksIndex fin:SP500Index .
}

Нагадка пра шаравую структуру:

RDF stores:
VOO managedBy Vanguard

RDFS understands:
VOO is a Fund, and Vanguard is an AssetManager

OWL can infer:
Vanguard manages VOO

SHACL checks:
Does VOO have exactly one valid AssetManager?
Does it track at least one MarketIndex?

Што можу автаматызаваць LLM-ы — і што яны не должны адлучваць самі

Моделі дапамагаюць ствараць атрыбуты, пропанаваць властывасці і запрошваць пытанні ўзгадкай пра кампетэнцыю. Яны не должны самавольна кераваць правіламі: фінальныя системы тыпоў, кардиналітэт і регуляторныя обмежэння выклікаюць патрэбу ў людзях, якія іх ствараюць, і тэставанні.

Дзе онтологія дапамагае GraphRAG

1. Разбіўка запиту

Заданыя зв’язкі паведамляюць систему планування, які крокі є значамымі.

2. Разв’язка ентытаў

Спакушаныя IRI і карты сінонімав зводзяць разлік між “Vanguard” і “The Vanguard Group”.

3. Контроль адзысквання

Анкеры і фільтры краяў є эфектывнымі, калі важлівы ідэнтыфікаторы, у працоўку з чыстым косайным коэфіцыентам.

4. Перакананне адпаведзення

Правіла SHACL і перакананні, выведзеныя з формы, адхоўляюць адпаведзенні, якія ствараюць незаконныя краяў.

Пяць прынцыпаў дизайна, якія варта прыменяць

  1. Раздзеляйце схему (онтологію) ад дадзэнняў экзампляра (графа).
  2. Проектавайце на адповедзі на канкрэтныя запитанні, а не на модныя терміны.
  3. Вядзьце прыоритет над малымі, тэставанымі обмежэннямі перед монолітнымі аксіомамі.
  4. Пераканавайце дадзеныя пад час запісу; выконвуйце логічныя расчынання там, дзе цэлькаўка є значнымай.
  5. Вважайце дапамогу LLM за адказку пад кераваннем чалавека.

Заключэнне

Антологіі — это даговоры, якія можна пераканалізаваць за дапамою машын. RDF храніць факты; RDFS і OWL дадаюць структуру та можлівасці для вываджэння заключэнняў; SHACL контролюе якасць экзанпляраў; GraphRAG выкарыстоўвае гэтыя рэзультаты як болей безпечную карту, чым толькі вектары. Прыклад VOO створаны намеравана маленькім: якщо тры рэчыцы можуць выкарыстоўваць пяць слоёў, то і рэальны каталог прыладоў можа — як толькі з’явяцца запытанні ўзгодна компетэнцыям і адпаведныя власнікі.

Зберагаюце журнал рашынняў на адной сторонцы для кожнай значныя класаў і атрыбутаў: чаму ён існуе, якое пытанне кампетэнціі ён задавае, і якая форма SHACL яго заходзіць. Палітыкі IRI версаваюцца так сама, як версаваюцца маршруты API; перэназыванне без перыяхоўкаў нарабляе проблемы ў кожным паслядовым з’ѐеднанні GraphRAG. Калі экстрактары пропануюць новыя рэшты, неабходна ўказаць форму або явны граф у режыме “без обмянакоў”, каб шумны выхад дзейнароў мов не занявалі кантролюемы сховішча. Ацэнюйце значэнне онтологіі па ступені пакрыцча пытанняў і часткі падтверджэння, а не па колькасці аксыом. Нарэшце, для кожнага практычнага развёртвання GraphRAG неабходна наяўнасць пакета фікстураў з законнымі і незаконнымі тройкамі, каб тэсты CI не праходзілі, калі “корыстная” змяна схемы таямніча расшырвае домэн/дзіапазон і дазволяе пакрыткам зноў прыяўляцца да фондаў.

Документавація пытанняў кампетэнціі разам з фікстурамі SPARQL дапамагае запобегчы тому, каб змяны схемы не адхіляліся ад тых пытанняў, на якія GraphRAG все ўсё должен даставаць адпаведныя рашынні.

Запісуйце запитанні працэздатнасці дакументаў праз SPARQL-фікстуры, каб правкі схемы не адхіляліся ад запитаў, на якія практычны GraphRAG все рава должен даўаць адпаведзі.

Запісуйце запитанні працэздатнасці дакументаў праз SPARQL-фікстуры, каб правкі схемы не адхіляліся ад запитаў, на якія практычны GraphRAG все рава должен даўаць адпаведзі.

Запісуйце запитанні працэздатнасці дакументаў праз SPARQL-фікстуры, каб правкі схемы не адхіляліся ад запитаў, на якія практычны GraphRAG все рава должен даўаць адпаведзі.

Запісуйце запитанні працэздатнасці дакументаў праз SPARQL-фікстуры, каб правкі схемы не адхіляліся ад запитаў, на якія практычны GraphRAG все рава должен даўаць адпаведзі.

Запісуйце запитанні працэздатнасці дакументаў праз SPARQL-фікстуры, каб правкі схемы не адхіляліся ад запитаў, на якія практычны GraphRAG все рава должен даўаць адпаведзі.

Запісуйце запитанні працэздатнасці дакументаў праз SPARQL-фікстуры, каб правкі схемы не адхіляліся ад запитаў, на якія практычны GraphRAG все рава должен даўаць адпаведзі.

Запісуйце запитанні працэздатнасці дакументаў праз SPARQL-фікстуры, каб правкі схемы не адхіляліся ад запитаў, на якія практычны GraphRAG все рава должен даўаць адпаведзі.

Запісуйце запитанні працэздатнасці дакументаў праз SPARQL-фікстуры, каб правкі схемы не адхіляліся ад запитаў, на якія практычны GraphRAG все рава должен даўаць адпаведзі.

Запісуйце запитанні працэздатнасці дакументаў праз SPARQL-фікстуры, каб правкі схемы не адхіляліся ад запитаў, на якія практычны GraphRAG все рава должен даўаць адпаведзі.

Запісуйце запитанні працэздатнасці дакументаў праз SPARQL-фікстуры, каб правкі схемы не адхіляліся ад запитаў, на якія практычны GraphRAG все рава должен даўаць адпаведзі.

Запісуйце запитанні працэздатнасці дакументаў праз SPARQL-фікстуры, каб правкі схемы не адхіляліся ад запитаў, на якія практычны GraphRAG все рава должен даўаць адпаведзі.

Запісуйце запитанні працэздатнасці дакументаў праз SPARQL-фікстуры, каб правкі схемы не адхіляліся ад запитаў, на якія практычны GraphRAG все рава должен даўаць адпаведзі.

Запісуйце запитанні працэздатнасці дакументаў праз SPARQL-фікстуры, каб правкі схемы не адхіляліся ад запитаў, на якія практычны GraphRAG все рава должен даўаць адпаведзі.

Запісуйце запитанні працэздатнасці дакументаў праз SPARQL-фікстуры, каб правкі схемы не адхіляліся ад запитаў, на якія практычны GraphRAG все рава должен даўаць адпаведзі.

Запісуйце запитанні працэздатнасці дакументаў праз SPARQL-фікстуры, каб правкі схемы не адхіляліся ад запитаў, на якія практычны GraphRAG все рава должен даўаць адпаведзі.

Запісуйце запитанні працэздатнасці дакументаў праз SPARQL-фікстуры, каб правкі схемы не адхіляліся ад запитаў, на якія практычны GraphRAG все рава должен даўаць адпаведзі.

Запісуйце запитанні працэздатнасці дакументаў праз SPARQL-фікстуры, каб правкі схемы не адхіляліся ад запитаў, на якія практычны GraphRAG все рава должен даўаць адпаведзі.

Запісуйце запитанні працэздатнасці дакументаў праз SPARQL-фікстуры, каб правкі схемы не адхіляліся ад запитаў, на якія практычны GraphRAG все рава должен даўаць адпаведзі.

Запісуйце запитанні працэздатнасці дакументаў праз SPARQL-фікстуры, каб правкі схемы не адхіляліся ад запитаў, на якія практычны GraphRAG все рава должен даўаць адпаведзі.

Запісуйце запитанні працэздатнасці дакументаў праз SPARQL-фікстуры, каб правкі схемы не адхіляліся ад запитаў, на якія практычны GraphRAG все рава должен даўаць адпаведзі.

Запісуйце запитанні працэздатнасці дакументаў праз SPARQL-фікстуры, каб правкі схемы не адхіляліся ад запитаў, на якія практычны GraphRAG все рава должен даўаць адпаведзі.

Запісуйце запитанні працэздатнасці дакументаў праз SPARQL-фікстуры, каб правкі схемы не адхіляліся ад запитаў, на якія практычны GraphRAG все рава должен даўаць адпаведзі.

Запісуйце запитанні працэздатнасці дакументаў праз SPARQL-фікстуры, каб правкі схемы не адхіляліся ад запитаў, на якія практычны GraphRAG все рава должен даўаць адпаведзі.

Запісуйце запитанні працэздатнасці дакументаў праз SPARQL-фікстуры, каб правкі схемы не адхіляліся ад запитаў, на якія практычны GraphRAG все рава должен даўаць адпаведзі.

Запісуйце запитанні працэздатнасці дакументаў праз SPARQL-фікстуры, каб правкі схемы не адхіляліся ад запитаў, на якія прадукцыйны GraphRAG все рава должен адпавядаць.

Запісуйце запитанні працэздатнасці дакументаў праз SPARQL-фікстуры, каб правкі схемы не адхіляліся ад запитаў, на якія прадукцыйны GraphRAG все рава должен адпавядаць.

Запісуйце запитанні працэздатнасці дакументаў праз SPARQL-фікстуры, каб правкі схемы не адхіляліся ад запитаў, на якія прадукцыйны GraphRAG все рава должен адпавядаць.

Запісуйце запитанні працэздатнасці дакументаў праз SPARQL-фікстуры, каб правкі схемы не адхіляліся ад запитаў, на якія прадукцыйны GraphRAG все рава должен адпавядаць.

Запісуйце запитанні працэздатнасці дакументаў праз SPARQL-фікстуры, каб правкі схемы не адхіляліся ад запитаў, на якія прадукцыйны GraphRAG все рава должен адпавядаць.

Запісуйце запитанні працэздатнасці дакументаў праз SPARQL-фікстуры, каб правкі схемы не адхіляліся ад запитаў, на якія прадукцыйны GraphRAG все рава должен адпавядаць.

Запісаце кэпасітэтныя запытанні пад SPARQL фіксатурамі, ўбліж, каб рэдагаванні схемы не адхіляліся ад запытанняў, на якія продакшнавы GraphRAG все ўсё должен адпавядаць.

Запісаце кэпасітэтныя запытанні пад SPARQL фіксатурамі, ўбліж, каб рэдагаванні схемы не адхіляліся ад запытанняў, на якія продакшнавы GraphRAG все ўсё должен адпавядаць.

Запісаце кэпасітэтныя запытанні пад SPARQL фіксатурамі, ўбліж, каб рэдагаванні схемы не адхіляліся ад запытанняў, на якія продакшнавы GraphRAG все ўсё должен адпавядаць.

Запісаце кэпасітэтныя запытанні пад SPARQL фіксатурамі, ўбліж, каб рэдагаванні схемы не адхіляліся ад запытанняў, на якія продакшнавы GraphRAG все ўсё должен адпавядаць.

Запісаце кэпасітэтныя запытанні пад SPARQL фіксатурамі, ўбліж, каб рэдагаванні схемы не адхіляліся ад запытанняў, на якія продакшнавы GraphRAG все ўсё должен адпавядаць.