Чому граф знань не збирається з текстів сам
Розрізнені реєстри, договори, протоколи нарад і робоче листування зазвичай уже лежать в одному сховищі — здається, що для графа знань цього достатньо.
На практиці з неструктурованих документів не складається зв'язна структура: пошук відповідає за одним файлом, але не показує, як сутності пов'язані між собою, і аналітик продовжує зводити зв'язки вручну.
Корінь проблеми — в рівні обробки: автоматичне вилучення сутностей працює за одним документом і не зводить результати між собою. Один контрагент у трьох розрізнених реєстрах записаний по-різному, а різні об'єкти носять однакові імена.
Без нормалізації та розв'язання збігів сутностей граф знань з текстів розсипається на незв'язані фрагменти.
Відношення даються ще важче. Правила «хто на кого посилається» і «що з чого випливає» потрібно описати схемою типів, інакше вилучені факти нема з чим зіставити.
Тип зв'язку, його напрямок і опора на конкретний фрагмент тексту задаються онтологією — тільки після цього за графом можна будувати запити, а не гортати джерела.
Окрема тема — зв'язність даних. Ми вимірюємо її часткою сутностей, що потрапили хоча б в один підтверджений зв'язок, і часткою «висячих» вузлів без жодного відношення.
Коли зв'язність падає, граф формально побудований, але аналітичної цінності не дає: ним не пройти шлях від постачальника до кінцевого об'єкта.
Далі розбираємо, як це закривається: як будується схема сутностей і відношень, чим підтверджується кожен зв'язок і за якими метриками видно, що граф справді збирається, а не просто заповнюється вузлами.
Що дає автоматичне вилучення сутностей і зв'язків
Конвеєр вилучення розбирає документ на речення, виділяє сутності та зв'язки між ними, після чого нормалізація сутностей зводить варіанти написання до одного вузла: «ТОВ Ромашка», «Ромашка» і друкарська помилка з латинською літерою стають одним записом з історією джерел.
Без цього кроку граф швидко перетворюється на набір майже однакових вузлів, і вибірка за організацією дає неповну відповідь.
Повнота вилучення залежить не від моделі, а від схеми зв'язків: ми фіксуємо типи відношень заздалегідь (постачальник, власник, філія, конфлікт) і проганяємо корпус двома незалежними проходами.
Зв'язок потрапляє в граф тільки з посиланням на вихідний документ і абзац, тому хибне спрацювання завжди можна відкликати, не розбираючи весь граф заново.
Контроль якості розмітки будується на регулярній стратифікованій вибірці: випадкові документи кожного типу плюс усі спірні випадки йдуть на ручну перевірку, а розбіжності між розмітниками складаються в окремий список.
Ми відстежуємо точність і повноту окремо за кожним типом зв'язку — так видно, що саме деградує при зміні формату вхідних файлів.
Оновлення зв'язків працює інкрементально: новий документ додає ребра, а застарілі зв'язки не видаляються, а позначаються недійсними з датою, тому граф залишається відтворюваним на будь-який момент часу.
Віддаємо результат у стандартній моделі — RDF — і у вигляді реляційних таблиць, щоб граф можна було підключити до наявних сховищ без переїзду даних.
Практичний ефект: корпус у десятки тисяч документів обробляється за одну ніч замість тижнів ручної розмітки, частка зв'язків з підтвердженим джерелом сягає 0,9 на контрольній вибірці, а клас помилок «різні написання однієї сутності» зникає на етапі нормалізації, а не спливає у звітах.
Способи побудови: порівняння підходів та обмеження
Автоматична побудова зв'язків — це завжди компроміс між повнотою і точністю: чим ширші правила та словник, тим більше зайвих ребер осідає в графі.
Щоб порівнювати варіанти чесно, ми проганяємо кожен на одному й тому самому корпусі та звіряємо з відкладеною розміткою — рахуємо точність на вилучених відношеннях, а не на окремих термінах.
Правила та словники синонімів зручно описувати в переносному форматі SKOS: схему править експерт-предметник, а не розробник, і вона не прив'язана до однієї системи. Нижче — варіанти, між якими реально обирають, з їхніми межами.
| Варіант | Коли підходить | Обмеження |
|---|---|---|
| Правила та словники синонімів | Вузька термінологія, є готові довідники | Нове написання або друкарська помилка проходять повз правила; словник ведуть руками, конфліктні правила дають подвійні ребра |
| Статистичні та векторні методи | Текстів багато, розмітки немає, потрібна тематична близькість сутностей | Дають зв'язок «схоже» без типу відношення; поріг близькості підбирається навмання, на частих термінах — хибні спрацювання |
| Навчена модель вилучення відношень | Потрібні типізовані зв'язки: хто кого згадує, що в що входить | Потребує розміченої предметної області; зміна області веде до перенавчання, рідкісні типи зв'язків не вивчаються |
| Гібрид з ручним доналаштуванням схеми | Схема області відома і її потрібно дотримати | Дорожче в постановці: потрібен експерт-предметник і калібрування порогів на реальних даних |
Жоден із варіантів не дає готового графа «з коробки» — обмеження методів знімаються тільки їхнім поєднанням. Тому на старті ми фіксуємо схему відношень, збираємо еталонну розмітку на 200–300 фрагментах і за нею обираємо, де достатньо правил, а де потрібна модель.
Етапи впровадження: від аудиту корпусу до передачі схеми
Порядок робіт вибудуваний так, щоб кожна наступна сходинка спиралася на перевірений результат попередньої: спочатку розуміємо, що взагалі є в текстах, потім фіксуємо, які зв'язки нам потрібні, і тільки потім налаштовуємо вилучення.
Пропуск будь-якого кроку коштує дорожче — схема, побудована без аудиту корпусу, ламається на перших же реальних документах.
-
Аудит корпусу текстів. Рахуємо обсяг і формати, частку сканів і таблиць, знаходимо дублікати, різномовні вставки та документи із застарілими реквізитами. На виході — карта корпусу: що вилучається впевнено, що потребує передобробки, а що в граф не потрапить узагалі.
-
Проєктування схеми зв'язків. Узгоджуємо перелік типів сутностей і типів зв'язків, обмеження та правила успадкування, спірні випадки розбираємо з вашими аналітиками.
Схему фіксуємо в машинозчитуваному вигляді з версіонуванням — її зміна пізніше не потребуватиме перезбирання графа з нуля.
-
Налаштування вилучення. Збираємо словники синонімів, скорочень і довідників, налаштовуємо правила нормалізації, злиття дублів і прив'язку сутностей до стійких ідентифікаторів. Тут же вирішуємо, які зв'язки виводяться за шаблоном, а які — за змістом фрагмента.
-
Контрольні вибірки. Розмічаємо вручну кілька сотень фрагментів і рахуємо повноту та точність окремо за кожним типом зв'язку, а не однією усередненою цифрою. Помилки розбираємо за причинами і повертаємося до правил та словників, доки показники не стабілізуються.
-
Перевірка на реальних запитах. Проганяємо типові питання ваших фахівців і звіряємо шляхи в графі з тим, як їх будує людина. Це ловить розриви зв'язків, яких метрики на вибірці не бачать.
-
Передача рішення. Віддаємо схему зв'язків, словники, правила, скрипти перезбирання графа і регламент оновлення; проводимо розбір із вашою командою, щоб граф можна було розширювати без нас.
Що передаємо на руки: артефакти та регламенти супроводу
Після здачі у замовника залишається не лише працюючий граф знань, а й увесь комплект артефактів, за яким команда може розвивати рішення без нас.
Схема, словники, права та регламенти лежать у вашому репозиторії з контролем версій — їх можна читати, правити й передавати новим інженерам.
- Схема графа — типи вузлів і зв'язків, обов'язкові атрибути, правила злиття дублів; версія схеми під контролем змін.
- Словники сутностей — нормалізовані форми назв, аліаси та правила розв'язання конфліктів, коли одна сутність приходить у кількох написаннях.
- Правила доступу — матриця ролей: які типи вузлів і зв'язків видно кому, включно з обмеженнями на вихідні документи.
- Регламент оновлення — періодичність завантаження нових текстів, поріг перезбирання зачепленої частини, порядок ручної перевірки спірних зв'язків.
- Документація рішення — потік від завантаження тексту до запису в граф, опис конфігурації, розгортання з нуля.
- Супровід схеми — як додати новий тип сутності або зв'язку без перезбирання всього графа і зберегти зворотну сумісність.
- Еталонна вибірка та порядок відкату — розмічені тексти для заміру повноти і точності, знімки графа для повернення до невдалого оновлення.
Передаємо робочі конфігурації, а не описи: на прийманні ваші інженери самі проганяють чергову партію текстів і оновлюють граф. Далі рішення живе на вашій стороні — зі зрозумілим порядком змін і перевірюваною якістю.
Кейс: граф знань за архівом технічної документації
Замовник — виробниче підприємство з великим архівом технічної документації: паспорти обладнання, регламенти обслуговування, бюлетені змін, звіти про відмови.
Документи лежали розсипом по папках і системах, пошук ішов за ключовими словами, а зв'язаність розділів — які вузли потрапляють в одні регламенти, які відмови тягнуть за собою ті самі вузли — трималася в головах двох інженерів.
Ми зібрали конвеєр: розмітка структури документів, вилучення сутностей і відношень, нормалізація термінів (один вузол під п'ятьма написаннями — один запис), вибіркова перевірка людиною.
Зв'язки лягли в графову базу Neo4j — обхід на 3-5 переходів перестав бути ручним збиранням і виконується запитом.
Метрики до і після
| Метрика | До | Після |
|---|---|---|
| Зв'язків у графі | близько 1 200, занесені вручну | понад 40 000, вилучені автоматично |
| Ручний розбір потоку документів | весь масив | вибіркова перевірка ~8% |
| Відповідь на «які регламенти зачіпає вузол» | 20-40 хвилин по папках | секунди, обходом за зв'язками |
| Повнота зв'язків на контрольній вибірці | 55-60% за оцінкою експертів | понад 90%, розбіжності розібрані |
Окремо про валідацію: автоматику ми не вважали істиною в останній інстанції.
Інженери розмітили контрольну вибірку, розбіжності розбирали і правили правила вилучення — після двох ітерацій частка спірних зв'язків упала, і граф став робочим інструментом, а не набором зв'язків, які ніхто не перевіряв.
Чим відрізняється вилучення зв'язків від розмітки сутностей?
Розмітка сутностей відповідає на питання «хто і що згадано»: модель проходить по тексту, виділяє фрагменти і присвоює кожному тип — організація, людина, проєкт, нормативний документ, дата. На виході виходить плаский перелік згадок з координатами в документі.
Такий перелік зручно рахувати, але за ним не можна відповісти на жодне питання про зв'язки: він не знає, хто кого призначив і що з чого випливає.
Вилучення зв'язків додає другий шар — типи відношень між знайденими сутностями: «працює в», «володіє часткою», «постачає», «підпорядковується», «згадується разом з».
Тут вирішує контекст згадки: відношення виводиться не з близькості слів, а із синтаксичної ролі та присудка, тому «директор підписав договір з постачальником» і «директор згадав постачальника у звіті» дають різні ребра з різною впевненістю.
Між двома шарами стоїть розв'язання неоднозначності. Одна організація в корпусі зустрічається як повне найменування, абревіатура і друкарська помилка; людина — за прізвищем, ініціалами та посадою.
Якщо згадки не зведені до одного вузла, граф розпадається на ізольовані фрагменти, і зв'язки губляться частіше, ніж при помилці розмітки.
Зв'язність структури — те, заради чого обидві роботи робляться разом. Розмітка без відношень дає список сутностей, відношення без розмітки — ребра з невідомими кінцями.
Тому результат перевіряємо не точністю на окремій згадці, а часткою вузлів, включених у зв'язний шлях, і числом зв'язків на сутність: за таким графом уже будуються відповіді на питання і пошук за ланцюжками.
Технічні сумніви: якість, обсяг і супровід
Сумніви щодо графа знань повторюються: повнота вилучення, дублі сутностей, сумісність із уже прийнятою онтологією і життя зв'язків після запуску. Розбираємо кожне — через устрій процесу, а не обіцянки.
Наскільки повно вилучаються сутності?
Повноту і точність рахуємо на розміченій вибірці з ваших документів — окремо за типами вузлів і зв'язків, а не на демонстраційній підбірці. Де модель помиляється, додаємо словники та правила нормалізації, спірні фрагменти йдуть на ручну дорозмітку і стають навчальними прикладами. Поріг приймання фіксуємо до старту робіт.
Як граф позбавляється дублів?
Один об'єкт приходить скороченням, друкарською помилкою, в іншому відмінку, латиницею і кирилицею. Блок злиття порівнює варіанти за написанням, контекстом і зовнішніми довідниками та зводить їх в один вузол із синонімами.
Кожне злиття журналюється і є оборотним: помилкове об'єднання розбирається, а не залишається назавжди.
Чи доведеться відмовлятися від своєї онтології?
Ні. Якщо у вас є галузева модель, довідники або прийнятий класифікатор, вилучення ведеться в їхніх рамках: типи вузлів, зв'язки й атрибути беруться звідти, а не з нашої схеми за замовчуванням. Розбіжності показуємо окремо — ви вирішуєте, розширювати модель чи нормалізувати дані під неї.
Що відбувається при оновленні корпусу?
Граф добудовується порціями: нові документи проходять вилучення, зв'язки додаються, застарілі отримують позначку часу замість видалення. Так видно, коли зв'язок з'явився і на якому джерелі ґрунтується.
Повне перезбирання потрібне лише при зміні схеми — іде з перевіркою на еталонній вибірці, щоб метрики не просіли.
Обговоримо задачу: що потрібно для старту робіт
Оцінка обсягу робіт із графа знань залежить від двох речей: який корпус і які зв'язки ви вважаєте обов'язковими на виході.
Щоб не відповідати «приблизно і колись», нам достатньо ввідних нижче — за ними ми прикидаємо число ітерацій розмітки, трудовитрати на вилучення сутностей і межі пілотної ділянки.
- Склад корпусу: скільки документів і типів, приблизний обсяг, мови, у якому вигляді вони лежать зараз — текстові файли, верстка, скани, вивантаження з облікової системи або листування.
- 5–10 прикладів реальних документів різного типу: за ними видно розмітку, щільність термінів, частку таблиць і зображень — це точніше за будь-яку анкету.
- Поточні словники та довідники: класифікатори, реєстри, списки синонімів і скорочень. Якщо їх уже ведуть, ми підхоплюємо їх як основу, а не будуємо термінологію заново.
- Очікуваний результат за зв'язками: які типи сутностей і відношень потрібні, чи потрібна вага або ступінь впевненості в кожного зв'язку, наскільки глибоко будувати ланцюжки.
- Правила доступу: де фізично лежать дані, хто власник, чи дозволене вивантаження і чи є фрагменти, які обробляти не можна.
- Точка застосування: який процес має отримати граф — пошук по базі, звітність, відповіді на питання співробітників або розбір звернень.
Цього достатньо, щоб повернутися з оцінкою обсягу робіт і планом впровадження: де проходить пілотна ділянка, що на ній перевіряємо і за якими метриками вирішуємо розширювати на весь корпус.
Опишіть задачу і додайте приклади документів — повернемося з розрахунком термінів, етапами та складом перевірок на пілоті.







