Преминаване към основното съдържание
  1. Моите писания/

Под капака: Техническата реализация на NLP и RDF системата на NomNom

Докато продължаваме да разработваме NomNom, нашия интелигентен чатбот за рецепти, ние сме развълнувани да споделим някои от техническите детайли зад неговата реализация. В основата си NomNom комбинира напреднали техники за Обработка на естествен език (NLP) с надежден RDF-базиран граф на знанието, за да предостави безпроблемно, разговорно изживяване при търсене на рецепти.

NLP конвейерът: От потребителски вход до структурирана заявка #

Нашият NLP конвейер е проектиран да трансформира естествените езикови потребителски заявки в структурирани представяния, които могат да бъдат използвани за заявки към нашия RDF граф на знанието. Ето разбивка на ключовите компоненти:

  1. Токенизация: Използваме Natural Language Toolkit (NLTK) за Python, за да разбием потребителския вход на отделни токени. Тази стъпка е от решаващо значение за по-нататъшна обработка.

  2. Маркиране на частите на речта: Прилагаме маркера за части на речта на NLTK, за да идентифицираме граматическата роля на всяка дума в заявката. Това помага за разбирането на структурата на потребителската заявка.

  3. Разпознаване на именувани обекти (NER): Разработихме персонализиран NER модел, използвайки Stanford NER и допълнителни данни за обучение, специфични за кулинарната област. Това ни позволява да идентифицираме съставки, методи за готвене, кухни и други релевантни обекти в потребителската заявка.

  4. Анализ на зависимостите: Използваме Stanford Parser, за да разберем връзките между различните части на заявката, което е особено полезно за сложни заявки.

  5. Класификация на намеренията: Реализирахме модел за многокласова класификация, използвайки scikit-learn, за да категоризираме потребителските заявки в намерения като търсене на рецепти, хранителни запитвания или обяснение на техники за готвене.

  6. Генериране на заявки: Въз основа на извлечените обекти, идентифицираното намерение и анализираната структура, ние генерираме SPARQL заявка, която може да бъде изпълнена срещу нашия RDF граф на знанието.

RDF граф на знанието: Мозъкът на NomNom #

Нашият RDF граф на знанието е изграден и управляван с помощта на рамката Apache Jena. Ето как сме структурирали и реализирали този ключов компонент:

  1. Дизайн на онтологията: Разработихме персонализирана OWL онтология, която дефинира класове и свойства за рецепти, съставки, методи за готвене, хранителна информация и др. Тази онтология служи като схема за нашия граф на знанието.

  2. Въвеждане на данни: Създадохме Python скриптове, които трансформират данни за рецепти от различни източници (уебсайтове, готварски книги, потребителски предложения) в RDF тройки, съответстващи на нашата онтология.

  3. Хранилище на тройки: Използваме Apache Jena TDB като наше хранилище на тройки, което осигурява ефективно съхранение и заявки на RDF данни.

  4. SPARQL крайна точка: Настроихме Fuseki сървър, за да осигурим SPARQL крайна точка, позволяваща на нашата NLP система да прави заявки към графа на знанието.

  5. Машина за извод: Използваме вградените възможности за извод на Jena, за да извлечем допълнителни факти и връзки, подобрявайки богатството на нашия граф на знанието.

Свързване на NLP и RDF: Изпълнение на заявки и генериране на отговори #

След като имаме SPARQL заявка, генерирана от потребителския вход, процесът продължава както следва:

  1. Изпълнение на заявката: SPARQL заявката се изпраща към нашия Fuseki сървър и се изпълнява срещу RDF графа на знанието.

  2. Обработка на резултатите: Резултатите от заявката, върнати като RDF, се обработват и трансформират в по-използваем формат за нашата система за генериране на отговори.

  3. Генериране на отговори: Използваме система, базирана на шаблони, реализирана в Python, за да генерираме отговори на естествен език въз основа на резултатите от заявката и първоначалното намерение на потребителя.

  4. Управление на диалога: Проста машина на състоянията следи контекста на разговора, позволявайки последващи въпроси и уточнения.

Предизвикателства и решения #

Разработването на NomNom не беше без предизвикателства. Ето няколко, с които се сблъскахме и как ги адресирахме:

  1. Сложност на заявките: Някои потребителски заявки могат да бъдат доста сложни. Реализирахме система за декомпозиция на заявки, която разбива сложните заявки на по-прости подзаявки.

  2. Разрешаване на двусмислености: Кулинарните термини често могат да бъдат двусмислени. Използваме комбинация от анализ на контекста и подкани за уточнение от потребителя, за да разрешим двусмислености.

  3. Оптимизация на производителността: С нарастването на нашия граф на знанието, производителността на заявките може да бъде засегната. Реализирахме механизми за кеширане и техники за оптимизация на заявки, за да поддържаме отзивчивост.

  4. Многоезична поддръжка: За да обслужваме глобална аудитория, работим върху разширяване на нашия NLP конвейер, за да поддържа множество езици, започвайки с испански и френски.

Бъдещи технически подобрения #

Докато гледаме към бъдещето, ние сме развълнувани от няколко технически подобрения в нашата пътна карта:

  1. Дълбоко обучение за NLP: Изследваме използването на модели за дълбоко обучение, особено LSTM мрежи, за да подобрим нашите NLP възможности.

  2. Разпределен граф на знанието: За да се справим с нарастващите обеми данни, разглеждаме разпределени RDF решения за съхранение като Apache Rya.

  3. Интеграция на данни в реално време: Разработваме система за динамично актуализиране на нашия граф на знанието с нови рецепти и съдържание, генерирано от потребителите.

  4. Семантично разсъждение: Планираме да използваме по-напреднали възможности за семантично разсъждение, за да предоставим още по-интелигентни препоръки за рецепти и замени.

NomNom представлява вълнуващо пресичане на NLP, семантични уеб технологии и изкуствен интелект. Чрез комбиниране на тези авангардни технологии, ние създаваме чатбот, който не само разбира рецепти, но може да води смислени кулинарни разговори с потребителите.

Очаквайте още технически задълбочени анализи, докато продължаваме да подобряваме и разширяваме възможностите на NomNom!