Що таке граф знань та як їх приміряти в Agentic RAG із LLM

Усі статті, обговорення, новини про AI — в одному місці. Підписуйтеся на DOU | AI!

Одним зі способів полегшення пошуку взаємопов’язаної та релевантної інформації з додатковим контекстом для запиту користувача в RAG додатках із ШІ є використання бази даних Knowledge Graph, яка збирає дані в повʼязані мережі. Наприклад, Neo4j, FalkorDB або Nebula Graph.

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

Графи знань проти пошуку подібності в неструктурованих векторних базах даних

Векторні бази даних (Vector DB) і пошук за схожістю між фрагментами (Chunks) тексту пропонують значні переваги для застосунків ШІ та RAG/Agent. Пошук Chunks за схожістю може витягувати семантично схожі фрагменти інформації з неструктурованих даних, що дозволяє збагачувати контекст для застосунків ШІ та підвищувати якість відповідей Large Language Models (LLM). Найбільш помітною перевагою пошуку за схожістю є його здатність працювати без будь-якої попередньо визначеної схеми чи знань про дані. Він завжди забезпечує певний рівень результату незалежно від запиту. Однак це буває і недоліком, оскільки результати не завжди є точними.

Існують методи, які полегшують цю проблему та покращують результати векторного пошуку такі як переранжування та критичне оцінювання, підбір оптимального розміру чанків, та додавання метаданих та фільтрація, але ці кроки не обовʼязкові і навіть виконавши їх векторний пошук схожості має свої обмеження. Наприклад, він не здатен відповісти на питання, що охоплюють кілька фрагментів тексту або весь масив даних. Він не справляється з питаннями на кшталт «Скільки разів у книзі згадується Холмс?». А також з питаннями, що вимагають розуміння ідей, частини яких «горизонтально» пронизані та повʼязані скрізь увесь текст. Попри недоліки, простота пошуку схожості у Vector DB та той факт, що він завжди працює, зробили такий підхід досить популярним і незамінним механізмом збагачення контексту для відповідей LLMs при створенні різноманітних застосунків ШІ.

Пошук за схожістю також неефективний для вилучення непрямих зв’язків між об’єктами з «багаторівневими» зв’язками. Наприклад, особа, яка знає особу, яка відвідувала певне місце. Саме тут структурована інформація має перевагу. Структуровані бази даних можуть обробляти складні запити та відстежувати зв’язки між різними частинами даних, надаючи повнішу і точну відповідь. Але вони мають схему і правила, як вставляти та витягувати інформацію. Це робить їх більш складними, ніж пошук за схожістю у векторних БД.

Онтологія

Якщо ви знайомі з термінологією Schema з реляційної БД, це схожий термін, але для вільного тексту та простішої структури даних, ніж SQL.

Так само як і у випадку зі схемою SQL, онтологія є формою класифікації, організації та індексування знань у групи або типи для полегшення пошуку цієї інформації.

Розглянемо цей приклад: «Andre летить у Париж». Розділимо на три частини:

  • «Andre» — це суб’єкт (Вузол/Node);
  • «летить у» є відношенням (Звʼязок/Relationship);
  • «Париж» — це об’єкт (Вузол/Node).

Вузол представляє такі сутності, як місце, особа, організація тощо. Відношення представляє зв’язок між цими сутностями, як-от залежності чи власники.

Тепер потренуймося створювати категоризації для суб’єкта/об’єкта та відношення, щоб класифікувати та впорядковувати дані для полегшення пошуку. Розглянемо інший приклад: «У машини є колеса». Тепер ми захочемо мати:

  • субʼєкт може бути з міткою: Людина або Машина;
  • звʼязок двох категорій: «ДІЄ» і «МАЄ»;
  • об’єкт це: місто або машина.

Це наша схема — наша онтологія. Коли ви створюєте граф знань, потрібно створити онтологію для даного тексту. Побудуйте онтологію з сутностями («Париж», «Andre», «Volvo V70») або концептами («Місто», «Людина», «Автомобіль»).

Існують напрацювання, як створити онтологію за допомогою моделей LLM без залучення людей. Це також може бути місцем для незначного вдосконалення, а ми хочемо накопичити якомога більше дрібних удосконалень, оскільки всі вони разом створюють кращий продукт. Тому перевіряйте такі автоматично створені онтології.

Я хотів би підкреслити універсальність баз даних графів знань (KGDB). Вони вміють працювати з різними типами даних, включаючи зберігання пов’язаних знань, витягнутих з неструктурованих текстових даних, таких як книга, напівструктурованих даних і структурованих таблиць, таких як CSV-файли. Крім того, деякі KGDB (Neo4j, SurrealDB і FalkorDB) можуть функціонувати як векторні бази даних. Це підвищує їхню гнучкість і розширює можливості використання зі штучним інтелектом. І Neo4j, і FalkorDB підтримують мову запитів Cypher Query і протокол доступу Bolt.

У порівнянні з реляційними базами даних, KGDB може продемонструвати вищу продуктивність, особливо коли очікується велика кількість операцій SQL Join. KGDB використовує знання, пов’язуючи вузли зі зв’язками, і не покладається на індексування табличної інформації, як реляційні БД. Тому, якщо потрібно витягти понад п’ять рівнів глибоких ієрархічних операцій з’єднань зі зв’язками «батьки-нащадки», або сформувати запити, що включають більш як 500 ідентифікаторів з’єднань, KGDB буде ефективнішим вибором. Крім того, KGDB здійснює повнотекстовий пошук в індексі, що полегшує пошук даних без знання схеми.

Однак важливо зазначити: попри свою універсальність, KGDB має певні обмеження. Їх слід враховувати, наприклад, при прийнятті рішення про його застосовність для конкретних випадків роботи:

  • якщо ви плануєте зберігати лише структуровані дані, реляційна БД забезпечить кращу продуктивність та універсальність, а головне — мова SQL для запитів буде звичнішою, ніж Cypher.
  • Деякі KGDB, такі як Neo4j, FalkorDB та SurrealDB, мають набір основних векторних операцій, що робить їх універсальними БД. Однак вони можуть бути не такими швидкими у пошуку даних, як спеціалізовані векторні БД, і обмежені у можливостях, у порівнянні із спеціалізованими векторними базами такими як як Milvus, Chroma або Weavite. Крім того, Neo4j має обмеження вимірності 4,096. Що є досить великим і має бути достатнім для майже всіх завдань, але в деяких випадках буває незручним. Neo4j наразі не вміє використовувати векторний індекс у поєднанні з попередньою фільтрацією; можна застосовувати лише пост-фільтрацію у поєднанні з векторним індексом. Хоча SurrealDB не підтримує мову запитів Cypher Query, яка дуже схожа на традиційний SQL, але не є такою самою й іноді має погану документацію.
  • KGDB скоріш не підходить для мультимедійного контенту. Натомість краще використовувати Vector DB або щось інше.

Ви зберігатимете всі ці типи даних у різних місцях і бекендах. Наприклад, текстові файли — в KGDB, векторній БД, або в обох сховищах. Табличні дані, ймовірно, в реляційній БД.

Неповний граф

Насправді у більшості випадків ви отримаєте свій Граф знань з онтологією, яка, як виявиться, не повністю охоплює ваші дані. Отже, швидше за все більшу частину часу ви матимете неповний граф. Тож інші засоби все ще можуть бути корисними для супроводу графу знань. Саме тоді нам знадобиться резервний план  —  вектори. Крім того, якщо ви зберігаєте та оброблюєте відгуки користувачів, можете автоматично або напівавтоматично витягувати додаткові метадані та онтологію свого набору даних, збагачуючи граф.

На щастя, бази даних Graph, на відміну від SQL/реляційних баз даних, називаються «без схем». Не найкраща назва (якщо ви запитаєте мене, я б назвав це «схема пізніше») оскільки ваша задача мати якомога повнішу схему/онтологію, щоб отримати більш значущу інформацію з великого набору даних. Тож підхід «схема пізніше» дозволяє гнучко додавати вашу онтологію по ходу роботи, покращуючи та витягуючи все більше і більше інформації з вашого набору даних з часом.

Вектор, граф та LLM

Можна подумати, що векторні бази даних і Graph DB несумісні. Цікаво, що їхнє поєднання здатне дати кращі результати.

Один із підходів  — збагатити ваш граф знань для першої фази RAG. Уявіть, що у вас є великий набір тексту. Скажімо, повне зібрання творів сера Артура Конан Дойля. LLM проаналізує текст і створить онтологію або схему для його книг. Однак цей процес може призвести до створення синонімів вузлів і зв’язків, а також до непов’язаних сутностей, які виглядають схожими.

Щоб розв’язати цю проблему, вставте всі сутності з вузлів і зв’язків у векторний простір. Модель Embeddings розташує схожі сутності близько одна до одної у векторній БД. Потім ідентифікуйте близькі пари та порівняйте їх за допомогою оцінки парної подібності (Pairwise) з LLM, щоб визначити, чи вони справді є синонімами. Повторюючи цей процес, ідентифікуйте пари синонімічних сутностей, зменшуючи втиірність та шум.

І навпаки, ви можете взяти інформацію з вашого вже наявного графа знань, щоб використовувати його для збагачення метаданих до фрагментів у векторній БД. Ці метадані допоможуть відфільтрувати фрагменти, що стосуються запиту користувача. Наприклад, якщо запит користувача містить 2024 рік, а ваші фрагменти мають в метаданих тег «рік=2024», відфільтруйте та шукайте лише фрагменти з указаним роком. А потім шукайте подібності лише серед них, зменшуючи шум.

Розріджені та Густі Графи

Оскільки це досить новий напрямок, термінологія ще не зовсім стала. Терміни розріджений (sparse) та густий (dense) графи ще можна зустріти як малий та великий граф. Останні дві назви, як на мене, дуже погана ідея. Ці терміни плутають і ведуть в неправильному напрямку розуміння цих сутностей.
Для розуміння різниці між густим та розрідженим графами уявіть текст будь-якої книги. Ми можемо витягнути з неї тільки людей та місця, в той час як там містяться ще й події, концепти тощо. Витягнувши лише дуже лімітовані типи даних, ми зможемо створити граф, який називають «розрідженими». У той же час, якщо ми витягуємо з тексту усю можливу доступну інформацію, це дає створити «густий» граф.
Не дивлячись на ніби більшу перевагу «густих» графів, на практиці (принаймні наразі) вони менш оптимальні. Тому що створюють складнощі в здобуванні інформації. Для таких даних тяжко побудувати конвеєр RAG, який би автоматично створював запити до KGDB, щоб діставати ці дані. Друга проблема — LLM, витягнувши і підставивши додаткову (не значиму) інформацію, збережену в базі, як контекст, може заплутати LLM.

Висновки

Важливо розуміти свої дані та як з ними працювати. Введення додаткового контексту, як правило, забезпечує кращі результати. Граф знань допомагає знаходити взаємопов’язану інформацію з додатковим контекстом. На відміну від векторних баз даних, графи знань не лише індексують інформацію, але й встановлюють логічні залежності між сутностями в тексті. Бази даних графів знань (KGDB) є універсальними, працюють з різними типами даних і можуть функціонувати як векторні бази даних.

Вони перевершують реляційні бази даних у продуктивності, особливо при великій кількості SQL Join операцій. KGDB використовують знання для зв’язування вузлів і можуть виконувати повнотекстовий пошук, що робить їх ефективними для глибоких ієрархічних запитів. KGDB мають обмеження. Для структурованих табличних даних реляційні БД можуть бути продуктивнішими і зручнішими. Структуровані бази даних кращі для складних запитів, але мають і складніші схеми та правила. KGDB можуть бути неефективними для мультимедійного контенту.

Граф знань часто буває неповним, тому варто використовувати резервні засоби (вектори). Бази даних Graph є «без схем», що дозволяє гнучко додавати онтологію протягом роботи, збагачуючи дані та покращуючи інформацію.

Векторні бази даних і пошук за схожістю корисні для ШІ та RAG/Agent застосунків, бо дозволяють витягувати семантично схожі фрагменти без схеми. Це спрощує роботу, але іноді призводить до неточних результатів. Недоліки містять нездатність обробляти запити, що охоплюють кілька фрагментів або складні питання. Векторний пошук неефективний для непрямих зв’язків між об’єктами.

Поєднання векторних баз даних і Graph DB здатне дати кращі результати. Можна збагатити граф знань, вставивши сутності у векторний простір. Модель Embeddings допоможе розташувати схожі сутності близько, а LLM визначить синоніми, зменшуючи шум. І навпаки, граф знань здатен збагачувати метадані у векторній БД для кращого фільтрування даних, що підвищує точність пошуку.

Підтримка

Якщо вам сподобалася ця стаття і ви хочете підтримати мене:

  1. Натисніть «Подобається 👍» та додайте «До обраного ⭐️» мою статтю; це допоможе мені. Також слідкуйте за мною на DOU, щоб отримувати останні статті.
  2. Дайте відгук у коментарях нижче, навіть якщо це просте «дякую» — це допоможе мені розуміти, що моя робота була не марною. Якщо є помилки, скажіть де, а найголовніше як виправити, не претендую на роль всезнайки.
  3. Шукаю ентузіастів та однодумців, що знаються на Python та NLP і хотіли б втілити описані ідеї та моїх статтях у життя, і, можливо, навіть зробити сумісний проєкт. Напишіть мені в LinkedIn. На разі працю над PoC, який використовує описані принципи у моїх статтях з побудови RAG та KG. Буду радий поділитись своїми напрацюваннями й знаннями.
👍ПодобаєтьсяСподобалось19
До обраногоВ обраному13
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Дякую за статтю. Чи знаєте ви приклади існуючих бенчмарків KGDB на яких можна тестувати різні підходи з RAG, щось типу CIFAR для зображень?

Привіт, дякую Олексій!

Під це може бути два типи бенчмарка: створення графа і витягування із графової бази.

Benchmark побудови графу:
KGValidator та link.springer.com/...​0.1007/s11280-024-01297-w

Для GraphRAG Retrieval не обовʼязково мати конкретно для графу, на приклад
Comprehensive RAG Benchmark
arxiv.org/abs/2406.04744

Щойно опублікував другу частину статті про Графи Знань. В ній про Cypher, Coreference Resolution (CR), Named Entity (NER), концепти та рівні та побудову графів.

dou.ua/forums/topic/49578

Почитавши статтю про векторний пошук на сайті neo4j і графи знань, єдине враження що залишилось — ще один вендор баз данних докрутив збереження і пошук векторів і тепер намагається продати своє ʼунікальне рішенняʼ. Нижче були вже скептичні коментарі на рахунок створення антологій, цікаво є хоч один підтвердженний приклад де це добре працює в продакшині і вирішує практично якісь проблеми з детальним описом і як — а не є просто намаганням придумати проблему і дати чисто теоретичний інструмент для її вирішення.

Ось і мені цікаво побачити конкретний продакшн кейс, де показано, що були отакі от проблеми, а після впровадження графових ДБ вони отак от вирішилися.

Поки що це виглядає як прикольна штука на погратися для людей, які люблять оверінжинірінг.

Як я сказав в статті одне не відміняє інше і обидва треба по міняти на практиці, просто треба по міняти правильно. Графи можуть покращити якість, але неможливо ними вирішити усі проблеми.

На справді я із вами більше погоджуюсь. Більше того скажу що реалізація векторного пошуку в Neo4j чи будь-яких інших не профільних графових базах даних скоріше дуже відстає від власне БД які спеціалізуються на векторному пошуку.

На приклад в векторних БД є можливість фільтрації чанків по метаданним ДО того як робити пошук схожоті. В той час як із Neo4j це можна зробити тількі ПІСЛЯ. Що явно великий недолік у витрачені ресурсів.

Тому так, бази даних графів знань намагаються зараз залізти в другий ринок і їх рішення принаймні на разі, дуже базове і відстає по функціоналу.

Дякую за цікаву статтю.

Підкажіть будь ласка чи використовували ви графові бази даних для RAG на продакшені?
Якщо так, то що це були за дані?

Зараз працюємо над Proof of Concept (PoC) KG + RAG

А що за дані у вас, який ви робите цей PoC? Яка їх природа?

Вільний текст перетворити в граф знань. теоретично будь-який текст з якого можна побудувати граф, де є іменовані сутності та звʼязки між ними

Ну а вільний текст про що? Які там можна сутності виділити і які побудувати залежності між сутностями?

Будь-що: Імена, адреси, контакти, назви компаній, ціни, концепти. Може навіть бути код.

Приклад: Шевроле хол с жив на Бейкер стріт.
Маємо дві ноди і звʼязок між ними який на мові Cypher описується таким чином:

(Шерлок: Людина) -[:Жив]-> (ʼБейкер стрітʼ: Адреса)

В самому верху статті картинка що ми витягуємо із прикладом. В наступній статті буде про кроки як і що витягувати докладніше.

Ну це toy example, мене цікавлять саме реальні продакшн кейси, за домопогою яких ви змогли щось змогли покращити retrieval в порівнянні з векторним пошуком.

Це основа до реальних прикладів як це працює.
Створення графу із тексту так працює, витягуємо іменовані сутності і звʼязки між ними за допомогою NLP, LLM чи комбінації.
Це дозволяє чатботу відповідати на питання на які векторний пошук в принципі не здатен відповісти, де треба зробити кількісний аналіз чи складну вибірку, в цій статті власне про це написано. І навпаки векторний пошук може відповісти на питання про почуття, де просто пошук подібності працює.

Сергій, я не розумію якого формату відповідь ви очікуєте.

Умовно кажучи відповідь такого плану:

Продакшн кейс — ЛЛМ-агент для технічної підтримки користувачів певного software продукту.
Індексовані дані: база знань (мануал) по цьому софту.

На векторному пошуку у нас були такі-то метрики ретрівалу, такі-то метрики всієї RAG системи в цілому.

Також ось конкретні кейси незадовільних відповідей нашого агенту.

Після впровадження GraphRAG у нас метрики ретрівалу стали такими-то, метрики всієї RAG системи такими-то.

І також ми бачимо, що на тих самих кейсах, які були незадовільними при векторному пошуку, при графовому, або гібридному все стало добре.

Щось типу такого.

Сергій, як я сказав ми в процесі створення пацплайну PoC який будує граф на базі тексту, він ще не готовий відповідно я не можу відповісти на ваше питання із конкретикою із цифрами та метриками.

Але, тут тестувати навіть не треба щоб зрозуміти де векторний пошук буде кращій де граф буде кращій, на це я вже відповів і надав приклади, як в коментах так і в самій статті.

Якщо задача знайти, на приклад скільки разів Холмс відвідав Бейкер стріт (за умови що автор прямо в книзі цього не написав), то граф буде кращій, бо ми можем звернутись до БД із побудованим запитом і база порахує та поверне усі такі події (за умови що ми їх витягнули із книги та зберегли в базі). Понім надавши прораховану відповідь у контекст LLM, якість відповіді очевидно буде набагато кращою за векторний пошук. Тобто граф при міняємо у випадках якщо до питання просто шукаючи у векторній базі і повертаючи декілька чанків є не достатнім інструментом, тобто коли для відповіді на питання конистувача ми не можемо відповісти бо воно явно в тексті не написано, тобто граф треба коли інформація дуже розмазана по багатьом чанкам тексту і треба зробити більш складний запит в базу типу виведи мені усі назви локацій де жертва розслідування Холмса була жіночої статі та носила червону сумочку.

Якщо ми хочемо знайти чане/шматок тексту або пару чанів схожого тексту і цього буде достатньо для відповіді, на приклад коли користувач питає «де Шерлок Холмс почувався найкраще?», тут краще підійде пошук подібності у векторній БД.

Сподіваюсь я задовільнив ваше питання при наймані по великому рахунку якщо не повністю.

Дякую! Так, як раз мені це і було цікаво зрозуміти коли краще векторний пошук застосовувати, а коли графи.

До речі, як ви вимірюєте перфоманс системи?

Плануємо для метрик оцінки якості створити синтетичний набір даних та використовувати Evaluation тулзи типу RAGas, але ми ще не там.

Скажите, а у вас бывают вакансии для студентов, на проекты для решения данного классу задач?

Напишіть мені в Лінкедін, подумаємо.

ник у меня там такой же. Уже подключился

Почему вы не используете генетический алгоритм для преобразования свободного текста в граф знаний для более эффективного извлечения и структурирования информации? Этот подход может быть особенно полезен в случаях, когда данные сложны и многогранны, а традиционные методы могут оказаться недостаточно эффективными, например для сложного текста, т.к. могут эффективно искать оптимальные структуры графа в сложных пространствах решений. Очень круто было бы использовать Named Entity Recognition (NER), например, для автоматического распознавания и классификации сущностей, а также при использовании токенизация, для разделения текста на слова или фразы для дальнейшего анализа.

Оце щойно примарилися якісь вікі плагіни до розпізнавального енжайну.
Гугл транслятор перекладає «ерафійскі баронства» як «рафісі баронства».
Замислився я: як людина розпізнає, що ерафійські то баронства країни ерафії?
А тоді: а як зможе розпізнати ШІ? Треба щось додавати. Якісь плагін від третьої сторони допоміг би.
Та й швидше плагінами покривати всю функціональність.
Тоді розпізнаний текст буде результатом сумісної паралельної обробки декілька сот алгоритмів, а може й значно більше, кожен з яких тільки за своє розпізнання відповідатиме.
Ну а щоб плагінування стало можливим, архітектура необхідна відповідна.

Можете написать какие именно инструменты вы использовали, для визуализации этой статьи. Нужно для курсача, шё бы не копипастить. Особенно интересует чем граф рисовали.

Neo4j Browser. Це вбудовано в Neo4j Desktop, воно безкоштовне.

Коли ти пришвидшуєшься — світ навколо уповільнюється. Але коли всі пришвидшуються — світ навколо руйнується.
Невже ви хочете існувати як вольфрамова спіраль у електричній лампі розжарювання?
Невже ви бажаєте цього для ваших нащадків?

Світ так рухається що із цим поробиш 🤷

Так рухається алкоголізм. Алкоголізм це соціальне зло.
Світ рухається як соціальне зло.

Хоч мені дійсно цікаво з чимось таким розібратися (наприклад, як робити мислячі копії), та зробити свій внесок, у мене немає грошей, щоб робити це безкоштовно.
Цей ваш світ — світ грошей. Я до нього не належу. У вашому світі грошей — якщо ви втрачаєте свої гроші, ви гинете. Разом з вами гинуть ваші можливі внески.
Як я втратив всі свої гроші? Дуже просто — я повільний. Жодна організація світу грошей не тримає повільних у штаті. (Хоча я міг би придумати повільно декілька сот варіантів де повільні виконавці вигравали б)
Що цікаво — якби мене винаймали ШІ вони б мені роботу надали, тому що їм пофігу було б на те що я гальмо, а може навіть і дуже важлива було б саме ця моя властивість.
Але є тут і інше — світ грошей це поганий світ. Боротьба за прискорення розвитку це боротьба за якнайшвидше використання всіх ресурсів планети.
Найефективніше? — ні.
Найбезпечніше ?- ні.
Найшвидше.
Всіх. Ресурсів.
Але саме недостатність ресурсу породжує конфлікт за нього між більш менш сильними сторонами.
А тут у вас що — пошуки підвищення недостатньості ресурсів.
Саме повільність розвитку могла б вас врятувати. Уповільнення з пошуками спрощення — ось якою мала б бути мета всього людства.
Щодо ШІ — ускладнення їх мислення не призведе до перемоги світу грошей.
Воно призведе до перемоги ШІ над людством.
---
Отака моя повільність. Вийшло навіть продемонструвати для вас, яка вона у мене.
До речі, саме зараз, я шукаю якусь роботу, з чимось таким пов’язану.

Дуже філософсько якось вийшло.
Щодо «все на грошах», так погано, але краще ніж капіталізм ще не придумали. Без грошей ніхто не буде нічого робити, якщо усім все дати, бо нікому нічого не буде треба.

Може колись прийдемо до якогось дзен стану, а поки маємо що маємо.

Без грошей ніхто не буде нічого робити, якщо усім все дати, бо нікому нічого не буде треба.

Це набір силогізмів, маніпуляція. Не відповідь.

Якщо добре спланувати процеси — тільки лише найнеобхідніше — гроші для цього стануть непотрібні.

Гроші це щось на кшалт заміни records in databases. Хто кому скільки винен праці.

Але з грошима можна хитрувати. А як похитруєш з годинами праці зарєєстрованими у базах даних?

P.S.

Перший варіант відповіді вийшов слабкий. Це відредагований.

Почему, не придумали, уже давно придумали, называется плановая экономика.

Граф знань, його конструювання це дуже близько до пошуків єдиної діючої моделі всього, а це дуже близько до планування економіки, навіть у тих випадках, коли одного року маємо врожай, а іншого навпаки.

Не согласен, проводить прямые параллели между графом знаний и планированием экономики было бы неверно. Экономика — это динамичная система, зависящая от множества факторов, включая человеческий фактор, который сложно формализовать в виде строгой модели. Более того, централизованное планирование экономики, основанное на единой модели, уже доказало свою неэффективность в прошлом.
Что касается колебаний урожайности из года в год, то это скорее связано с климатическими и погодными условиями, которые трудно предсказать с высокой точностью. Граф знаний может помочь в анализе факторов, влияющих на урожайность, но не сможет полностью устранить эти колебания.
В целом, граф знаний — это мощный инструмент для структурирования и анализа знаний, но его применение в экономическом планировании имеет свои ограничения. Для эффективного управления экономикой необходимо сочетание различных подходов, включая использование графов знаний, но с учетом динамичности и сложности экономических систем. Экономика, хлопцы как по мне ближе к медицине, где нет законов, а есть закономерности, хотя в экономике законы есть их там, по-моему, пять.

Ось я тобі зараз розповім, як ковбасу поділити рівно навпіл.
Беремо ковбасу і ножа. І приблизно навпіл ділимо. А тоді порівнюємо обидві частини.
Відрізаємо зайве у більшої частини і ділимо приблизно навпіл оце зайве. Тоді порівнюємо його... Але всі вже кричать — досить, досить, вже майже навпіл.

Тут треба дивитися на те, як взаємодіють гроші і час. Можна побачити що гроші працюють як вузликові листи тобто отримуючи гроші чи навпаки віддаючи їх створюємо якусь зміну, якусь рєєстрацію (бухгалтерську проводку). Тобто гроші потрібні як носії інформації. Звідси можна екстраполювати їх майбутнє. За умови подальшого розвитку інформаційних технологій.

Олеже, це все дуже звісно цікаво. Але давайте все ж таки більше про граф знань.

Любую финансовую схему можно изобразить в виде графа, со всеми вытекающими.

Нет, просто плановая экономика, это экономика развития, а не потребления как рыночная. Если отсутствуют законы, то использовать граф знаний будет проблематично.

Є ще такий різновид: припустимо, людина створює і передоплачує замовлення на якійсь виріб. Це дуже файно для економіки мати такого користувача. Бо згідно цього замовлення можна розрахувати всі необхідні для виробництва витрати. У такій схемі — «спочатку отримати замовлення — тоді виробити» ми бачимо гарантію точності розрахунків для всіх хто у цій схемі.
Якби ще не інфляція за час виробництва/доставки виробу. Здорожчання виконання замовлення з часом призведе до необхідності доплатити після одержання.
Можна порівняти з тим, що зараз — на складах вже є більш менш схожі вироби, просто прийшов та купив. Але так, виробництва не знає точну потребу у виробах. Виготовляє або більше або менше...

lol. Вже давно доказано що планова економіка не працює і ринкова економіка набагато краща.

Це як раз те що зараз росія вимушена через санкції, робити планову економіку яка погано працює і веде до колапсу.

Але давайте будь-ласка тут краще про графи знань поговоримо а не про комунізм і планову економіку.

Вибач, я не можу. Тут потрібне поглиблене дослідження цієї теми.
У мене немає на це вільного часу. У деяких моїх постах раніше, я щось таке передбачав, чи прогнозував — про те, що колись будуть будувати запити на нативній мові і було це ще коли ніхто не чув про LLM.
Але моя старанність нічим не була винагороджена, витрачені ресурси не були скомпенсовані.
Оце так працює чудова риночна економіка?

Дякую за цікаву статтю,
Буду радий бачити продовження!

Дякую Максиме! Готовлю наступну в кінці вересня/початок жовтня.

А можете сделать видеоуроки по статьям? И выложить на ютуб?

Ох, то напевно сильно затратно по часу вийде.

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

В статті буде тільки високорівнево текстом описано, коду мінімально.

Якщо вас цікавить тема із ШІ, RAG та графами знань може вам буде цікаво доєднатись до Discord Server Sky AI.

Мій нікнейм там qdrddr.

Незрозуміло, звідки LLM навчились створювати онтології. Ви не плутаєте онтології з просто обʼєктним представленням даних у БД? Чи можете вказати референси, звідки взяли це про генерацію онтології LLM?

Це ще не поставлений на рейки процес.
Я собі уявляю у два можливі підходи, упевнений є і інші:
1) KeyLLM витягує нам ключові фрази, через LLM + Векторний пошук по документу за допомогою цих ключових фраз генеруємо онтологію
2) навпаки: спочатку створили граф і витягнули усі named entity та звʼязки, потім у Neo4j є можливість відобразити на існуючий граф його онтологію як є, де ми можемо за допомогою LLM вичистити сміття і прибрати із такої некеровано створеної онтології те що нам не треба і причісати залишок.

Смарт-структуры в графах знаний, такие как онтологии, действительно могут быть неправильно поняты или перепутаны с простыми объектными представлениями данных в базах данных. Онтологии представляют собой более сложные и структурированные модели, которые описывают сущности, их свойства и отношения между ними, в то время как объектные представления в БД часто фокусируются на хранении данных без явного описания семантики.
Что касается генерации онтологий с помощью LLM (Large Language Models), то это действительно интересная тема. LLM могут создавать онтологии, используя свои способности к пониманию и генерации текста на основе больших объемов данных, на которых они были обучены. Однако важно отметить, что эти модели не «учатся» создавать онтологии в традиционном смысле. Вместо этого они могут генерировать текст, который соответствует структуре и формату онтологий, основываясь на паттернах, которые они усвоили из обучающих данных. Так нам на 122-ой разговаривали.

Правільніше буде сказати, що онтологія — це вже складний граф знань, де зв’яків поміж елемантами може бути більше ніж одна. Та і структура елементів може бути дуже складною. Десь бачив онтологію для бібліотек, там тільки проперті було сотні на елемент. Про кількість зв’язків мовчу.

Если связей меньше чем одна, то о каком графе знаний может идти речь? Сюдою лучше применять простую модель данных, которая чаще всего представляется в виде пары «ключ-значение» или ассоциативного массива, базоваого графа, (это может быть полезно для представления базовых отношений, таких как «принадлежит», «содержит», «связан с» и т.д).например редис какой-нибудь, реляционка, питонячие словари или шё то подобное хлопцы. В этой модели каждый элемент (узел) связан с другим элементом (узлом) через единственную связь, что делает структуру более простой и понятной.Если у вас есть сущности «Препод» и «Лекции», и между ними существует только одна связь «читал», то вы можете представить это следующим образом:
Препод: { «id»: 1, «name»: «Иван», «lection_id»: 101 }
Лекция: { «id»: 101, «title»: «Программирование на Python», «prepod_id»: 1 }
В этом примере связь между преподом и лекцией представлена единственным полем lection_id в объекте "Препод".В то же время граф знаний позволяет моделировать сложные взаимосвязи, детально описывать объекты и применять логический вывод. Однако это достигается ценой большей сложности разработки и поддержки онтологий. Объяснил как мог, хлопцы, думаю помидоры в меня за такое не полетят.

В принципі, воно вміє. Перевірив на прикладі CharGPT:

Generate a simple ontology with «book» «author» «publisher» classes. Properties are whatever you wish. Relations also as you wish. Create several example entities (3-4 for each class).
The ontology should be in OWL format. Just print raw OWL without supporting text.

Відповідь:
<rdf:RDF xmlns="http://example.org/books#"      xml:base="http://example.org/books"      xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"      xmlns:owl="http://www.w3.org/2002/07/owl#"      xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"      xmlns:xsd="http://www.w3.org/2001/XMLSchema#">           <!-- Ontology Declaration -->     <owl:Ontology rdf:about="http://example.org/books"/>     <!-- Classes -->     <owl:Class rdf:about="http://example.org/books#Book"/>     <owl:Class rdf:about="http://example.org/books#Author"/>     <owl:Class rdf:about="http://example.org/books#Publisher"/>     <!-- Object Properties -->     <owl:ObjectProperty rdf:about="http://example.org/books#hasAuthor">         <rdfs:domain rdf:resource="http://example.org/books#Book"/>         <rdfs:range rdf:resource="http://example.org/books#Author"/>     </owl:ObjectProperty>          <owl:ObjectProperty rdf:about="http://example.org/books#hasPublisher">         <rdfs:domain rdf:resource="http://example.org/books#Book"/>         <rdfs:range rdf:resource="http://example.org/books#Publisher"/>     </owl:ObjectProperty>          <!-- Data Properties -->     <owl:DatatypeProperty rdf:about="http://example.org/books#title">         <rdfs:domain rdf:resource="http://example.org/books#Book"/>         <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>     </owl:DatatypeProperty>          <owl:DatatypeProperty rdf:about="http://example.org/books#publicationYear">         <rdfs:domain rdf:resource="http://example.org/books#Book"/>         <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#int"/>     </owl:DatatypeProperty>     <owl:DatatypeProperty rdf:about="http://example.org/books#name">         <rdfs:domain rdf:resource="http://example.org/books#Author"/>         <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>     </owl:DatatypeProperty>     <owl:DatatypeProperty rdf:about="http://example.org/books#publisherName">         <rdfs:domain rdf:resource="http://example.org/books#Publisher"/>         <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>     </owl:DatatypeProperty>     <!-- Individuals (Entities) -->     <!-- Books -->     <rdf:Description rdf:about="http://example.org/books#Book1">         <rdf:type rdf:resource="http://example.org/books#Book"/>         <title rdf:datatype="http://www.w3.org/2001/XMLSchema#string">The Great Gatsby</title>         <publicationYear rdf:datatype="http://www.w3.org/2001/XMLSchema#int">1925</publicationYear>         <hasAuthor rdf:resource="http://example.org/books#Author1"/>         <hasPublisher rdf:resource="http://example.org/books#Publisher1"/>     </rdf:Description>     <rdf:Description rdf:about="http://example.org/books#Book2">         <rdf:type rdf:resource="http://example.org/books#Book"/>         <title rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1984</title>         <publicationYear rdf:datatype="http://www.w3.org/2001/XMLSchema#int">1949</publicationYear>         <hasAuthor rdf:resource="http://example.org/books#Author2"/>         <hasPublisher rdf:resource="http://example.org/books#Publisher2"/>     </rdf:Description>     <rdf:Description rdf:about="http://example.org/books#Book3">         <rdf:type rdf:resource="http://example.org/books#Book"/>         <title rdf:datatype="http://www.w3.org/2001/XMLSchema#string">Moby Dick</title>         <publicationYear rdf:datatype="http://www.w3.org/2001/XMLSchema#int">1851</publicationYear>         <hasAuthor rdf:resource="http://example.org/books#Author3"/>         <hasPublisher rdf:resource="http://example.org/books#Publisher3"/>     </rdf:Description>     <!-- Authors -->     <rdf:Description rdf:about="http://example.org/books#Author1">         <rdf:type rdf:resource="http://example.org/books#Author"/>         <name rdf:datatype="http://www.w3.org/2001/XMLSchema#string">F. Scott Fitzgerald</name>     </rdf:Description>     <rdf:Description rdf:about="http://example.org/books#Author2">         <rdf:type rdf:resource="http://example.org/books#Author"/>         <name rdf:datatype="http://www.w3.org/2001/XMLSchema#string">George Orwell</name>     </rdf:Description>     <rdf:Description rdf:about="http://example.org/books#Author3">         <rdf:type rdf:resource="http://example.org/books#Author"/>         <name rdf:datatype="http://www.w3.org/2001/XMLSchema#string">Herman Melville</name>     </rdf:Description>     <!-- Publishers -->     <rdf:Description rdf:about="http://example.org/books#Publisher1">         <rdf:type rdf:resource="http://example.org/books#Publisher"/>         <publisherName rdf:datatype="http://www.w3.org/2001/XMLSchema#string">Scribner</publisherName>     </rdf:Description>     <rdf:Description rdf:about="http://example.org/books#Publisher2">         <rdf:type rdf:resource="http://example.org/books#Publisher"/>         <publisherName rdf:datatype="http://www.w3.org/2001/XMLSchema#string">Secker & Warburg</publisherName>     </rdf:Description>     <rdf:Description rdf:about="http://example.org/books#Publisher3">         <rdf:type rdf:resource="http://example.org/books#Publisher"/>         <publisherName rdf:datatype="http://www.w3.org/2001/XMLSchema#string">Harper & Brothers</publisherName>     </rdf:Description> </rdf:RDF>
Нема під рукою зараз чогось типу Protege, щоб перевірити, але виглядає ок. Якщо протренувати на спеццифічних штуках, результати повинні бути краще.
Звісно, треба експерементувати з аналізом тексту та побудовою онтології на базі непідготовленої інформації. + потрібен гарний інпут від людини з поясненням яку структуру треба організувати.

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

логіка і «сєті» це речі не пов’язані
генетичний алгоритм? для онтології? це щось з разряду фантастики

Генетический алгоритм может найти более эффективные способы группировки и связывания элементов онтологии

Онтологія це в першу чергу символне представлення саме знань. Чи є твердження у символьному вигляді знаннями, чи ні, може стверджувати тільки носій знань з наявним механізмом їх обробки — людина. Наразі других генераторів знань у нас не існує. Що ваш генетичний алгоритм перебором звязків зможе оцінити — велике питання. Чи є наявність і унікальність звязку (воно може нічому не суперечити) ознакою вірних знань? Звісно ні. «Кіт палить онтологію». «Книжка їде навколо червоного». Логічно? Якщо суха логіка, то так, логічно, помилок нема. Не дублюється нічого. Але не відповідає наявним знанням. Книжки не їздять. Коти не палять. Я допускаю, що у якомусь тексті саме це буде ключовими словами, з яких можна набудувати отаку бредову концепцію. В кращому випадку, ви зможете валідувати якусь нову онтологію за допомогою наявної, яка вже має вірно закодовані знання. Нема знань — нема мультиків. Виділити знання з хаотичних стверджень навіть людині важко.

Синтетические сети — нейронные сети, которые могут быть использованы для генерации данных или для улучшения обучения. Например, синтетические данные могут быть созданы для тренировки LLM, когда реальных данных недостаточно. Это может помочь в улучшении обобщающих способностей модели. Использование синтетических данных для обучения LLM может быть полезным в случаях, когда реальные данные недоступны или их трудно собрать. Это может быть особенно актуально для специфических доменов, где данные могут быть ограничены.
Оптимизация с помощью генетических алгоритмов: Генетические алгоритмы могут использоваться для автоматизации процесса выбора архитектуры модели, что может помочь в создании более эффективных LLM. Это может включать выбор количества слоев, количества нейронов в каждом слое и других параметров.

логіка і «сєті» це речі не пов’язані

Попробую объянить как можно проще, щё архитектура нейронной сети определяется с помощью логических правил и принципов, таких как количество слоев, связи между нейронами, функции активации и т.д. А именно:
____________________________________________________
Алгоритмы обучения, такие как обратное распространение ошибки, используют логические операции для корректировки весов связей между нейронами в процессе обучения на данных.
_____________________________________________________
Логические операции, такие как AND, OR, NOT, применяются при реализации логических «впускных клапанов» в нейронных сетях для обработки входных сигналов и генерации выходов.
__________________________________________________________
Логические правила используются для интерпретации и объяснения решений, принимаемых обученной нейронной сетью.Таким образом, логика и нейронные сети тесно взаимосвязаны и дополняют друг друга в области искусственного интеллекта. Логика обеспечивает теоретическую основу для проектирования и обучения нейронных сетей, в то время как нейронные сети применяют логические операции для обработки данных и обучения.

генетичний алгоритм? для онтології? це щось з разряду фантастики

Не это не фантастика, мы на лабах такое уже делали, вот привожу пример оттуда: Оптимизация структуры онтологии: Генетические алгоритмы могут помочь в оптимизации иерархии классов и отношений в онтологии, чтобы достичь более эффективного представления знаний.
Выбор атрибутов: При создании онтологии генетические алгоритмы могут использоваться для выбора наиболее релевантных атрибутов для классов, что позволяет уменьшить сложность и повысить качество онтологии.
Автоматизация создания онтологий: Генетические алгоритмы могут быть применены для автоматического создания и модификации онтологий на основе данных, что позволяет адаптироваться к изменениям в предметной области.
Эволюция онтологий: Они могут использоваться для эволюции существующих онтологий, позволяя им адаптироваться к новым требованиям и данным.

Те шо ви написали це набір речень. Ваші лаби це якісь фантазії про онтології які не має нічого спільного з реальністю. Наведіть якісні приклади, бажано з референсами на нормальні наукові ресурси.
У KRR є такі штуки як ontology alignment (встановлення звязку поміж декількома онтологіями) і ontology clustering (якщо дуже примітивно, це групування концептів в рамках онтології, але не тільки). От в цих випадках генетичні алгоритми інколи використовуються. В якості елементів дослідження онтологій, а не створення. Наприклад:
www.igi-global.com/...​ent-through-genetic/43155
dl.acm.org/doi/abs/10.1145/3439772
doi.org/...​0.1016/j.eswa.2008.12.046

Ви може це мали на увазі?

UPD: якщо читачам цікаво, як раз онтології використовуються для оптимізації генетичних алгоритмів
Цікаве дослідження www.researchgate.net/...​ub-Ontology-Evolution.pdf

When using genetic algorithms to solve optimization problems in semantic-based applications, we find that these methods cannot interpret semantic relations and hence overlook useful information in evolution. Therefore, genetic algorithms are insufficient ot satisfy the requirements in this case. We propose ot use formal semantics of ontology to improve genetic algorithm ni several aspects and make ti more adaptive to solve semantic-based problems. nI this study, we present asemantic-based genetic algorithm ot incorporate domain knowledge into hte algorithm and perform evolution based on hte ontology semantics. The advantages of the algorithm include expressing semantic information ni chromosome representation and preserving the information by applying genetic operators in evolution. We illustrate the usage of the algorithm by applying it to solve the problem of sub-ontology evolution. Our experiments with a large-scale traditional Chinese medicine ontology as the benchmark demonstrate the feasibility of the algorithm in solving semantic-based problems.

Коментар порушує правила спільноти і видалений модераторами.

А коли вже можна буде набуті онтології цілком з одного мозку до іншого по вайфаю передавати?

Розумію, що жартуєте, але як фанат всяких кіберпанків, не можу утриматись.
Нажаль, дуже нескоро. І якщо на сьогодні вже думки майже навчились зчитувати з мозку, то з write навіть поки ідей нормальних нема. Найближчі років 50-100 нічого такого не буде.

Я лише трохи жартував. Гіпотеза досягнення технологічної сингулярності наразі хвилює як ніколи. Один малесенький AGI і справу буде зроблено.
Щодо трансферу досвіду, то уявіть собі таку красу: хтось десь відпочиває, набуває всіляких вражень, тоді його мозок сканують та ці враження тиражують і продають...
Втім, це вже все було відзнято у «Згадати все»

Один малесенький AGI

Це як намалюйте один овал, намалюйте другий, домалюйте сову.
Якщо говорити про розвиток AI, то наразі ми на етапі закінчення першого овалу. Як розробника і частково дослідника у цій області, мене це дуже засмучує. Про сінгулярність більше всього говорять ті, кому треба терміново залучити у бульбашку новий VC, бо гроші яскраво палають терафлопсами у великих моделях.

Рішення знаходиться або легко, або у протилежному куті кімнати.
Якщо рішення нема, чи вся необхідна інформація collected?
До речі, давно хотів запитати у спеціаліста:
Якщо мережа побачить щось, чому у неї немає назви, чи збереже вона це під згенерованим рендомно ідентифікатором? Щоб колись порівнючи оце незнамо що у пам’яті з подібною але вхідною інформацією, нарешті запитати: Та що це, в біса, таке?
Чи не буде це автоматизованим набуттям досвіду без участі людини?
Особливо, якщо обмінюватися інформацією будуть ШІ (один великий як човен авіаносец, а інший швидкий збирач інформації як павук гугля )

Ну в принципі існують алгоритми які можуть зрозуміти що два ідучих підряд слова скоріш фраза чи якийсь концепт, навіть без LLM.
А потім можна зробити агента який лізе в інтернет і шукає опис цієї сутности, на приклад в Гуглі чи Вікіпедії

Для мене речення це набір ідентифікаторів. І як можна побачити — деякі словосполучення буває замінються одним ідентифікатором. Я називаю це — пакуванням.
Таке слово буде упаковкою. Деякі спеціалізовані тексти це упаковки упаковок упаковок.
Порядок виникнення ідентифікаторів у мозку у відповідь на інший набір ідентифікаторів (вхідний, від когось чи від чогось) теж цікава для розгляду річ.
Звідси — речення не є результатом послідовним, а хто кого обжене у кінцевому результаті з тисяч паралельних обробок.

А потім можна зробити агента який лізе в інтернет і шукає опис цієї сутности, на приклад в Гуглі чи Вікіпедії
We find that indiscriminate use of model-generated content in training causes irreversible defects in the resulting models, in which tails of the original content distribution disappear. We refer to this effect as ‘model collapse’ and show that it can occur in LLMs as well as in variational autoencoders (VAEs) and Gaussian mixture models (GMMs). We build theoretical intuition behind the phenomenon and portray its ubiquity among all learned generative models. We demonstrate that it must be taken seriously if we are to sustain the benefits of training from large-scale data scraped from the web.
Shumailov, I., Shumaylov, Z., Zhao, Y. et al. AI models collapse when trained on recursively generated data. Nature 631, 755–759 (2024). doi.org/...​0.1038/s41586-024-07566-y

Цей документ зовсім про іншу історію. До речі ваше посилання не робоче ось нагуглив його.

www.ncbi.nlm.nih.gov/...​pmc/articles/PMC11269175

Я пропонував шукати в інтернеті як частина RAG pipeline щоб знаходити новий термін і підтягувати що це таке як контекст, і не намагатись створити нову модель.

Цей же документ що ви скинули про колапс моделей «AI models collapse when trained on recursively generated data» в свою чергу про інше:
1. не про RAG, а про створення нової LLM
2. Мова саме про то щоб коли ми тренуємо нову модель то датасет було згенеровано попередньою моделлю.

Тема цікава але зовсім не те про що я говорив.

«In this paper, we investigate what happens when text produced by, for example, a version of GPT forms most of the training dataset of following models.»

Да, есть такие алгоритмы, хлопцы! Вот они:N-граммы: Анализируя последовательности из N слов, можно выявить часто встречающиеся комбинации, которые могут указывать на фразы или концепты.
Семантический анализ: Используя методы семантического анализа, можно определить, как слова связаны друг с другом и какие концепты они представляют.
Кластеризация: Алгоритмы кластеризации могут помочь группировать похожие слова и фразы, что позволяет выделить концепты.
После того как алгоритм определит, что два идущих подряд слова представляют собой фразу или концепт, можно создать агента, который будет искать информацию об этой сущности в интернете. Например, такой агент может использовать API поисковых систем, таких как Google или Wikipedia, для получения описаний и дополнительной информации о найденных концептах. Лучше это так заюзать!

как слова связаны друг с другом и какие концепты они представляют.

А от про це хтілося б детальніше. Бо це і є проблема — перейти від синтаксису до семантики.
Бо в лоб — виявлені концепти, патерни теж будуть — про синтаксис а не про семантику.
Іншими словами — для переходу треба перейти на вищий рівень абстракції, аніж є у тексті.

Інакше — ми отримаємо не онтологію, а переказ зміста тексту, просто у більш формальному форматі, в іншому синтаксису.

Конечно переход от синтаксического анализа к семантическому пониманию является ключевой проблемой при построении онтологий. Простого выявления часто встречающихся фраз и шаблонов недостаточно для создания полноценной онтологии, отражающей смысловые связи между концептами.
Для перехода на более высокий уровень абстракции и семантического понимания можно использовать техники глубокого обучения, таких как word embeddings и нейронные сети, может помочь выявлять скрытые семантические связи между словами на основе контекста, кроме того можно заюзать методы кластеризации и тематического моделирования для группировки связанных концептов. Хотел еще добавить, шё для более глубокого понимания темы, лучше прийти на 122 -ую, но думаю для вас это уже не актуально!

второй абзац у вас бессодержателен. типичный маркетинг булшит :)

То есть выявить концепт, как оппозицию к "

Простого выявления часто встречающихся фраз и шаблонов недостаточно для создания полноценной онтологии

"
не получится.

Сможет ли ИИ сделать такой же вывод, или что-то навыявляет :)

Что бы сделать вывод, что абзац является маркетинговым бульшитом, нужно в этом разбираться и иметь соответствующие скилы, если бы вы разбиралися то должны были знать, что вначале ИИ должен провести семантический анализ, сравнение с контекстом, оценку стиля, использование фоновых знаний и сравнение с другими частями текста. Простого анализа шаблонов тут будет недостаточно. Нужен комплексный подход, сочетающий различные методы обработки естественного языка. Например, можно использовать лексический анализ, который будет включать в себя, частотный анализ: Определение частоты появления слов и фраз для выявления ключевых тем.
N-граммы: Анализ последовательностей из N слов для выявления паттернов и часто встречающихся фраз, про которые я упомянул выше.

как слова связаны друг с другом и какие концепты они представляют.

Например, использовать семантические связи
Слова могут быть связаны различными семантическими отношениями, такими как:
Синонимия: Слова с похожими значениями (например, «автомобиль» и «машина»).
Антонимия: Слова с противоположными значениями (например, «горячий» и «холодный»).
Гипонимия и гиперонимия: Отношения «часть-целое» (например, «яблоко» — гипоним для «фрукты»).
Ассоциации: Слова, которые часто встречаются вместе или подразумевают друг друга (например, «солнце» и "тепло«).вызывают друг друга (например, «солнце» и «тепло»).

Например, использовать семантические связи

ну так в этом же проблема — чтобы использовать — их надо выявить. а в тексте их нет. в тексте — синтаксис, и синтаксические связи.

Слова с похожими значениями (например, «автомобиль» и «машина»).

а какой у них — общий концепт?

Слова с противоположными значениями (например, «горячий» и «холодный»)

а их семантика из какого множества?

«яблоко» — гипоним для «фрукты»

не только. и это отношение — не «часть целое» без привлечения не указанного концепта — множество.

Ассоциации: Слова, которые часто встречаются вместе или подразумевают друг друга
...
например, «солнце» и «тепло»

да, а «ветер — это потому что деревья качаются»

вызывают друг друга (например, «солнце» и «тепло»)

и в каких отношениях состоят эти два смысла, используя:
синонимию, антонимию («Над горизонтом встало холодное солнце, в лучах которого только засверкали льды»), гипонимия и гиперонимия.

То есть, протестируйте указанные вам способы вручную, напишите тест — который вначале упадет :) по TDD

Вот простой тест, который проверяет наличие указанных семантических связей между словами. В этом тесте мы будем использовать простую питонячую структуру, чтобы проверить каждую связь.

import unittest

class TestSemanticRelations(unittest.TestCase):

    def test_synonyms(self):
        self.assertTrue(are_synonyms("автомобиль", "машина"))

    def test_antonyms(self):
        self.assertTrue(are_antonyms("горячий", "холодный"))

    def test_hyponymy(self):
        self.assertTrue(is_hyponym("яблоко", "фрукты"))

    def test_hypernymy(self):
        self.assertTrue(is_hypernym("фрукты", "яблоко"))

    def test_associations(self):
        self.assertTrue(are_associated("солнце", "тепло"))

if __name__ == '__main__':
    unittest.main() </ pre><code>def are_synonyms(word1, word2):
    synonyms = {
        "автомобиль": ["машина"],
        "машина": ["автомобиль"]
    }
    return word2 in synonyms.get(word1, [])
Далее создаем питонячую функцию, которые будут проверять семантические связи. Для целей тестирования будем использовать простые примеры, что бы всем хлопцам было понятно.
def are_antonyms(word1, word2):
    antonyms = {
        "горячий": ["холодный"],
        "холодный": ["горячий"]
    }
    return word2 in antonyms.get(word1, [])

def is_hyponym(hyponym, hypernym):
    hyponyms = {
        "фрукты": ["яблоко", "банан", "груша"],
        "овощи": ["морковь", "картофель"]
    }
    return hyponym in hyponyms.get(hypernym, [])

def is_hypernym(hypernym, hyponym):
    return is_hyponym(hyponym, hypernym)

def are_associated(word1, word2):
    associations = {
        "солнце": ["тепло", "свет"],
        "ветер": ["деревья", "погода"]
    }
    return word2 in associations.get(word1, [])
Если тесты пройдут успешно, это будет для нас означать, что семантические связи между словами определены правильно.
В качестве резюме. Таким образом, мы создали тест для проверки семантических связей между словами, используя подход TDD. Этот тест поможет выявить и подтвердить различные семантические отношения, такие как синонимия, антонимия, гипонимия, гиперонимия и ассоциации. Наверное, это очень простое объяснение, поэтому объяснил как мог...
Якщо мережа побачить щось, чому у неї немає назви, чи збереже вона це під згенерованим рендомно ідентифікатором? Щоб колись порівнючи оце незнамо що у пам’яті з подібною але вхідною інформацією, нарешті запитати: Та що це, в біса, таке?
Чи не буде це автоматизованим набуттям досвіду без участі людини?
Особливо, якщо обмінюватися інформацією будуть ШІ (один великий як човен авіаносец, а інший швидкий збирач інформації як павук гугля )

Головна проблема тут, що на поточному рівні розвитку у AI нема самого механізму давання назви чомусь. Нема ні порівняння, ні навіть розуміння того, що воно обробляє чи порівнює. Мережа не може «бачити» нічого, окрім потоку інпутів у вигляді чисел. Тобто, ми поки не можемо задавати такі питання про що воно буде робити.
Чому так?
По-перше, немає поки ніяких реалізацій моделей знань, які б могли використовуватись алгоритмами машинного навчання так, щоб машина «розуміла» дані, на яких навчається. AI без «підказки» не вміє декодувати і зберігати знання про оточення. Для цього людям доводиться робити feature engineering, і давати моделям інформацію з оточення перекодовану у числа. Кодувати знання оточуючого світу у внітрішні символьні представлення без підказок воно не вміє. Якими б розумними не здавались LLM, вони не розуміють текст, який вам віддають. Їм взагалі пофігу що там, текст або числа — воно буде шукати патерни всюду, і на будь який інпут давати відповідь згідно того, що їм до цього годували. Ви бачите логіку у відповідях саме тому, що ваш мозок має механізм розкодування закодованих у тексті людських знань.

По-друге, сучасні нейронні мережі (і не тільки мережі, там багато цікавих алгоритмів) це зліпки на основі коефіциєнтів, отриманих при навчанні. Зліпки, які не так то просто оновлювати. Так, існують способи навчати інтерактивно, коли дані постійно залітають у мережу, але там дуже багато проблем, які призводять до деградації ефективності навчання і подальшого використання моделей. Є проблеми з валідаційними даними (тими, що використовуються в навчанні, щоб зрозуміти, наскілько ефективно мережа «сприймає» фічі). Є проблеми зі збереженням старих знань при донавчанні.
Так, існує reinforced learning, коли мережа навчається на результатах обробки оточення, але там людина робить штучний мепінг зовнішнього сигналу з сенсора у лейбл, який вішається на дані. Сама модель в цей мепінг не вміє (описане в «по-перше»).
GPT можуть донавчатись на фідбеках, але роблять вони це не прям онлайн, а ітераціями. І коштує це недешево.

Так що говорити о «розумінні» і самостійному навчанні поки зарано. Системи, які хоч приблизно зможуть щось таке, скоріш за все будуть великими мультиагентними системами, побудованими на різних технологіях ML, великих онтологіях, і з розвинутою внутррішньою комунікацією поміж агентами.

Немає. Все правільно. Для того і було поставлене питання.
Мережі це відкриття для одних речей та проте глухий кут для інших. У який ви дивитеся. У якому шукаєте зараз. Вони лише частина. Важлива. Але не та, що зараз потрібна.
Як взагалі утворився людський мозок? Нашаруваннями. Але нашаруваннями, до мозку, були створені також алгоритми.
Подивиться на поведінку амеб. Там немає ЦНС.
І тому ШІ потрібен алгорітмічний енжайн, як на мене.
Я так думаю, бо для мене Всесвіт це клітковий механізм на після квантовому рівні. Говорячи клітковий я маю на увазі cell from Life Convey і все що притаманне.
А там кораблі (чи планери) неначе живі. Але чи можуть копірувати? чи можут робити поворот, чи можуть порівнювати?
Чи можуть результати порівняння (оце і будуть рендомні ідентифікатори) записувати у свій код? (але тут вже дуже складно)

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

Це сучасні соціальні мережі
Половина Ютьюбу це продаж свого позитивного досвіду іншим, в кого нема на це часу/грошей — розпаковки, відпочинок, подорожі, і тд

Хлопцы, поглядите в интернете про то, шё Илон Маск уже активно работает над проектом Neuralink, который направлен на создание интерфейсов между мозгом и компьютером. Технология предполагает возможность считывания и передачи информации из мозга, что может привести к потенциальной передаче данных от одного человека к другому. А всем известно, хлопцы, ше Илон мужчина серьезный, думаю скоро появиться, хотя бы на уровне прототипа.

Він молодець в якомусь плані зробив деякі цікаві речі так. Але я б на нього не молився бо як мужчина він пи*дун сказочнік ще той якщо ви уважно стежите за ним та його заявами. І по друге він проти України і за Трампа. Якщо Трамп виграє Україні буде зовсім не легко.

Передача данных между мозгами — это не только технологическая задача, но и вопрос этики, права и философии. Например, препод узнает шё ты думаешь о его лекции, сдавать придется тогда долго...Онтология действительно может быть применена например, для мозговых интерфейсах с целью классификации различных типов интерфейсов, их функциональности и применения.

Передача данных между мозгами — это не только технологическая задача

а і з філософії свідомості. Як передати — кваліа? uk.wikipedia.org/wiki/Кваліа
Якщо кваліа приватне, індівідуальне, то які б данні не передавали — воно не передасться. Щоб воно передалось треба зробити «deep clone» — тобто стерти все у приймачу, знищити його індівідуальність.

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

Щось ви прям дуже далеко зайшли від графів знань ))

Это не я, я цитировал Илона Маска, его видение решения этой проблемы...

Найпростіше дослідити кваліа можна так: приростивши збоку ще одну голову. Тоді кваліа стане двоголовим. І тому відповідь що кваліа не передається, а поширюється.
Кваліа не можна передати, але можна поширити. А от питання — якщо потім стару голову потроху зменшувати чи не залізе/перелізе/зміститьця кваліа у нову голову?

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

Я вирішів що кваліа не треба передавати, щоб додати до власних згадувань чиїсь, скопійовані. Це буде просто як згадати щось ще.
Щодо додавання чиїхось — хіба це не є learning?
Хтось на ютюбе курсах вчиться чужому досвіду. Ось вам і трансфер.
Але вчиться повільно і не гарантовано.
От якби швидко і гарантовано — була б тоді повноцінна передача даних.
Щось таке.
Це мабуть вчора захотілося мені пожартувати)

Ось вам і трансфер

Нема ніякого трансферу — бо кожен вчиться особисто, індивідуально. Курси, препод, і т.д. просто показують який результат повинен бути, якщо ти засвоїв якісь — навички.

Нема принципової різниці між нарощуванням біцепсів і вивченням бух обліку — це все особисте напрацьовування навичок. Для яких не існує трансферу.

До речі це можна було би автоматизувати як я написав вище: беремо документ, за допомогою KeyLLM дістаємо ключові слова, далі просимо LLM створити онтологію і заміняємо у вашому статичному промпті замість «book» «author» «publisher» на вивід KeyLLM

Це занадно просто і невірно. Перевірив на більш складних або неявних прикладах, і все не дуже добре. Наприклад, спробуйте так:

Generate a simple ontology with «sun» «cat» «abstraction» classes.

Дуже гарно видно, як працюють LLM.

Як воно знайде зв’язки? Впевнені, що вибере вірні домени для ключів? Ніт. LLM так не працюють. Вони просто не вміють в логіку і звязки. Вони вміють в знаходження верогідності паттернів.

Як ви вважаєте було би тоді краще?

Можу помилятись, але здається:
1) Мати готову онтологію, за допомогою якої можна буде якимось чином валідувати ці наші нові нагенеровані

2) Використовувати модель натреновану на онтологіях

В обох випадках треба мати наявні перевірені онтології.

Ну можна спробувати зробити свій власний KG який в себе включатиме онтологію із класами які нас цікавить. І потім підтягувати тільки із цього графа. А потім вже підтягувати онтологію із графа динамічно як приклад в контекст LLM за допомогою того ж самого similarity search (але разом із залежностями до якоїсь глибини), до речі similarity search є вже вбудований в багатьох графових базах типу Neo4j, FalcorDB, NebulaGraph.

І знов таки, спочатку зробити вірну онтологію. А далі вже не важливо, LLM це, чи звичайний перцептрон.

Неет хлопцы, LLM и обычный перцептрон — это разные концепции в области машинного обучения, с различными архитектурами, функциональностью и применениями Перцептрон: Ограничен в своих возможностях и может использоваться для простых задач классификации. Касаемо правильной онтологии согласен, правильно построенная онтология позволит вам эффективно структурировать знания предметной области. Это важная основа для дальнейшей работы, будь то использование LLM, перцептронов или других подходов машинного обучения, как то так...

Ніхто і не казав що однакові. Max сказав, що коли вже є спочатку побудована якісна онтологія і коли ми оброблюємо конкретний один текст, то під цей текст ми вже можемо далі обирати частину (підмножину) створеної раніше онтології будь-яким із цих двох способів, в тому числі за допомогою LLM.

я же про ’это и написал правильно построенная онтология ключ к успеху...Но ее еще нужно правильно построить...

Про смартструктуры статья будет?

Не знаю про такий.
Як англійською термін правильно?

наскільки я розумію, мається на увазі щось на кшталт arxiv.org/abs/1712.01208

так же хлопцы как и по-русски. Смарт-структура в графах знаний — это концепция, которая позволяет эффективно организовывать и представлять данные в виде графа, где узлы (вершины) представляют сущности, а ребра (связи) отражают отношения между ними. Она нацелена на улучшение поиска, обработки и анализа информации, делая ее более доступной и понятной как для людей, так и для машин. Наверное можно заюзать реализации встраивания графов с использованием алгоритма Node2Vec, но это неточно...

Так шё там по смартам сделаете? Я тогда вас включу в курсач, в список источников соответственно со ссылкой на вас

Цікаво, чи існують якісь засоби візуалізації графів знань з можливістю виокремлення окремих підграфів за певними критеріями? Наприклад, для зручного, швидкого візуального інтерактивного пошуку потрібних знань.

Так, в Neo4j Desktop є Bloom browser,
Щоб знайти під граф треба сформувати запит який витягне тільки потрібні вам ноди і звʼязки, якщо такий Cypher Query виконати ви отримаєте візуалізацію підграфа.
Приклад, витягуємо під граф усіх лікарів що працюють в лікарні Marcy:

MATCH (d:Doctor)-[r:WORKS_IN]->(h:Hospital {name: «Mercy»})
RETURN d, r, h

Є багато алгоритмів візуалізації які не завʼязані на Neo4j.

Наприклад, існує C++ Core Guidelines як великий односторінковий текст на GitHub. Це — великий, постійно оновлюваний, перелік best practices з програмування на C++.

Чи можливо, без надзусиль, перетворити C++ Core Guidelines у візуальний граф C++ понять, які там зустрічаються, із можливістю по кожному з цих понять окремо, за потребою, отримувати перелік всіх речень, де згадується потрібне поняття?

Якщо це можливо, то було б дуже цікаво подивитись на покроковий roadmap розв’язку такого плана задачі.

В такому разі я б сказав що ваш запит це не проста візуалізація, а великий комерційний проект, знаю що такі є, нещодавно спілкувався із інженером який працював на подібному проекті.

Вас цікавить не «відображення» існуючого вже побудованого графу, а «побудова власного графу із власного коду» чи тексту. І це на справді зовсім не легка задача автоматизувати створення графу із вільного тексту чи коду.

Я про це готую наступну статтю, вона більш високорівнева, як це робити і будувати пайплайн.

Дякую — цікаво!

Підписатись на коментарі