Fraises en quartiers et autres caractéristiques de la traduction automatique: pour franchir une nouvelle étape vers les cuisines automatisées, vous devez enseigner la technique pour comprendre les recettes écrites en langage humain et en logique humaine. Pour ce faire, ils doivent être transformés. Sous la coupe, le texte réfléchit au problème qui est né autour d'une tasse de café lors de la discussion d'un sujet connexe.

Cuisines automatisées. Étapes nécessaires
Les appareils de cuisine intelligents facilitent le processus de cuisson, mais les gens font encore la plupart du travail: laver, couper et y mettre des aliments, mélanger, etc. Et comme je voudrais juste dire: "Pot, cuisiner", et pour que tout se lave, se coupe, se mélange, et l'utilisateur n'ait qu'à attendre le signal sonore et aller prendre un repas.
Désormais, les cuisines automatiques n'apparaissent qu'à l'échelle industrielle, mais elles atteindront très prochainement le niveau des ménages. Pour ce faire, vous devez résoudre plusieurs groupes de problèmes et ces solutions doivent être abordables.
Le premier groupe de tâches consiste à donner à la cuisine la capacité d'agir indépendamment de l'utilisateur.
Ce problème, par exemple, peut être résolu en introduisant dans la cuisine un
système de manipulateurs , un
convoyeur ;
Le deuxième groupe de tâches consiste à introduire la vision par ordinateur et un système de capteurs dans la cuisine pour déterminer automatiquement le degré de préparation d'un plat ou d'une partie de celui-ci.
Le troisième groupe de tâches est l'interface de gestion. La tâche peut être réalisée via l'application sur smartphones, ainsi que des assistants vocaux.
Et enfin, le quatrième groupe - la tâche de la logique de cuisine de comportement. Comment apprendre à cuisiner en cuisine? Par exemple, un robot cuisinier est formé par une personne - un chef professionnel. Mettant des capteurs sur ses mains, il montre lentement comment. La machine reproduit ensuite ses actions, dans les moindres détails, jusqu'à se serrer la main. Bien sûr, pendant le traitement, les mouvements supplémentaires doivent être supprimés, mais si le programmeur manque quelque chose, le robot chef s'arrêtera un jour pour se gratter le nez inexistant.
De plus, pour enseigner au robot une recette, les mouvements doivent être répétés plusieurs fois. Même si vous apprenez au robot des mouvements individuels, qu'il peut ensuite combiner, le temps pour une telle formation prendra beaucoup de temps. Sans parler du respect le plus strict de la recette et, apparemment, des ingrédients calibrés: permettre au robot de distinguer ses yeux des pommes de terre est une tâche d'ingénierie complexe distincte. Et après la cuisson, vous devez encore laver la cuisinière et la vaisselle.
Une recette est un code.
Si vous revenez à la situation actuelle - c.-à-d. pour tenir compte de la composante économique du problème, des difficultés de développement, etc., il devient clair que dans un avenir prévisible, nous ne pouvons qu'enseigner aux appareils électroménagers intelligents comment lire la recette et l'appliquer. Cela nécessite de convertir la recette en code. Mais les logiciels classiques Java ou C ne conviennent guère ici - ils peuvent décrire la recette, mais si l'utilisateur souhaite y apporter des modifications, il devra alors contacter le support technique ou s'inscrire à des cours de programmation. De plus, le code classique est trop formel. Par exemple, si les ingrédients disent «champignons séchés», alors les ingrédients frais n'entreront pas en cuisine. Pour compliquer encore la tâche, les recettes de cuisines nationales sont présentées dans différentes langues naturelles.
Mais je voudrais donner à l'utilisateur la possibilité de trouver une recette intéressante pour lui sur le Web, de la télécharger et de la cuisine robotique - de l'interpréter correctement et de l'appliquer. La tâche maximale est la capacité de la cuisine, en fonction des préférences culinaires de l'utilisateur, à rechercher et à proposer des options. Les bonnes recettes de cuisine ne doivent pas seulement inclure une liste d'ingrédients bruts et de méthodes de cuisson, mais aussi les conditions environnementales dans lesquelles les produits poussent. Un plat appartient à la cuisine nationale selon de nombreux critères, notamment des méthodes de cuisson spécifiques, des ustensiles, des outils, etc. Transformer toutes ces données sous une forme numérique appropriée ou, très probablement, les interpréter sera une tâche difficile.
Alors, quelles langues peuvent être utilisées pour faire des recettes?
RDF
Les technologies existantes pour la représentation formalisée des connaissances se répartissent en plusieurs groupes de structures.
Il s'agit notamment de l'approche du Web sémantique avec ses technologies
OWL et
RDF . Les collections en ligne d'ensembles de données connexes utilisant des outils Web sémantique sont également appelées données liées. Récemment sur Habré il y avait
un article consacré à ce concept, donc nous ne nous concentrerons pas dessus. De nombreux projets de numérisation sont construits autour de l'idée d'utiliser une
ontologie supérieure , qui peut être développée par des
ontologues dans un domaine spécifique de la connaissance.
Prenons le cas de l'utilisation et de l'application de ces outils pour numériser les cuisines nationales. L'idée principale de RDF est qu'Internet s'éloigne du stockage d'informations perçues uniquement par les humains, devenant un réseau mondial de processus en interaction. Comme son nom l'indique, RDF est la base de l'expression des informations sur les ressources. Tout d'abord, sur les documents Web et diverses organisations. Son formalisme est basé sur l'idée de classes et de propriétés statiques. La question se pose: dans quelle mesure est-il raisonnable de considérer la recette comme une entité et non comme un processus complexe avec des arguments, le calcul du temps, des sous-processus entrants, etc. Pour la recette, cela ne sera clairement pas suffisant.
Schema.org
La deuxième approche est l'initiative
Schema.org , un effort de collaboration de la communauté en ligne pour créer, maintenir et promouvoir des schémas de structuration des données sur Internet. Cette initiative vise à fournir un vocabulaire normalisé pour les métadonnées communes publiées sur les ressources Web. Les ressources Web liées à la cuisine peuvent utiliser les métadonnées de classe de recette stockées par
référence . Voici un exemple de code de recette fourni par Google:
<script type=> { : http: //schema.org/, : , : , : [ https: //example.com/photos/1x1/photo.jpg ], : { : , : }, : , : , : { : , : , : }, : , : , : , : { : , : , : , : }, : [ , , , , , , , , , ], : } </script>
Le vocabulaire et le format adoptés par
Schema.org sont principalement axés sur la présentation de métadonnées de haut niveau dans des documents Web. Cependant, un graphe sémantique correctement normalisé nécessite une représentation beaucoup plus explicite des concepts. La plupart des valeurs de chaîne dans les champs
Schema.org sont des textes naturels qui nécessitent une interprétation cognitive humaine. Un tel texte ne peut pas être lu directement par les systèmes numériques sans outils spéciaux
de traitement du
langage naturel , qui sont souvent sujets à des erreurs. À titre d'illustration, la traduction automatique de Google convient à un élément de ligne de la liste des ingrédients dans l'exemple de recette ci-dessus:
'fresh strawberries, quartered'
La traduction en russe donne un sens sémantique complètement faux:
' , '
avec «écartelé», utilisé dans le sens de «logement», comme dans «Nos troupes étaient logées à Boston», plutôt que «Coupé en quatre».
L'absence de rôles clairement définis des objets et une identification explicite des méthodes rendent la tâche de traduction automatique de la recette beaucoup plus difficile.
Pour notre tâche futuriste de recettes numériques - un scénario dans lequel une machine robotique pourrait suivre des instructions de cuisson, une simple ligne de texte ne peut pas être une solution.
Considérez une description typique d'un ingrédient:
'8 Granny Smith apples — peeled, cored and sliced'

Il est évident que cette ligne de texte contient beaucoup d'informations de classification: l'ingrédient brut en tant que classe, une variété spécifique de pommes, le nombre de morceaux, une liste de méthodes qui doivent être appliquées à chaque partie afin d'utiliser l'ingrédient normalement: enlever les graines, peler, couper un objet en parties d'une certaine formes.
Le formalisme de
Schema.org n'est pas assez expressif pour écrire le processus de cuisson dans un code de programme. Pour numériser correctement les recettes de cuisine robotisée, nous devons séparer la description de l'ingrédient de la logique
La troisième approche est la modélisation des recettes cognitives.
La façon traditionnelle d'écrire une recette est de commencer par les ingrédients et les opérations que vous devez effectuer. Ce style d'ordre et de description est appelé impératif ou procédural. Un style déclaratif ou fonctionnel de description de la logique d'un processus commence généralement par le haut de la pyramide d'exécution, le résultat utile attendu que nous voulons atteindre.
Considérez la présentation simplifiée suivante de la recette classique de la soupe aux champignons russe. Les flèches indiquent les sous-processus (parfois alternatifs) nécessaires au processus parent.

L'interprétation cognitive peut être déroutante même lorsque nous essayons de définir une recette. Le terme «recette» a plusieurs significations contextuelles. Il peut être défini dans un sens général comme un moyen d'obtenir le résultat souhaité. Lorsqu'il est utilisé dans le contexte de la cuisine, il désigne un ensemble d'instructions pour la préparation d'un plat culinaire. Ainsi, ce concept peut être considéré comme un objet doté de certaines propriétés, telles que les ingrédients et le temps nécessaires. Comme alternative, il peut être considéré comme un processus technologique qui possède des données initiales, passe par une série d'étapes qui doivent être achevées et conduit à certains résultats. La recette comprend également le temps nécessaire pour terminer les étapes et une description des ustensiles nécessaires.
Depuis 2006, afin de développer un formalisme optimal pour exprimer la sémantique complexe d'un langage naturel, le projet
Knowdy a été créé, axé sur la gestion des données de graphes.
Projet Knowdy
Knowdy est un projet logiciel open source d'un groupe de recherche linguistique à Saint-Pétersbourg engagé dans le développement d'une base de données de graphiques ultrarapides qui vous permet de travailler directement et efficacement avec des graphiques conceptuels, en contournant toutes les vues intermédiaires, telles que les tables SQL. Le moteur de base de données est implémenté en C et peut être utilisé à la fois comme service réseau et comme bibliothèque autonome pour l'environnement intégré.
Après plusieurs années de recherche et développement, l'équipe de recherche et développement a trouvé un format de données spécial pour Knowdy DB appelé GSL (Acronym General Semantics Language). GSL est optimisé pour le stockage compact de graphiques conceptuels. Il est utilisé pour stocker des données, envoyer des messages et échanger des informations. Ce format n'est pas trop verbeux, comme XML, et un peu plus compact que JSON. Le langage accepte certaines fonctionnalités des expressions S Lisp, mais avec une grande modification de la sémantique, car vous devez garder à l'esprit que les graphiques ne sont pas des listes. La description entre crochets dans GSL est d'une importance particulière, car elle permet aux utilisateurs d'exprimer non seulement des regroupements à plusieurs niveaux, mais également des opérations CRUD dans le système de stockage de la base de données.
Dans la description GSL, le processus est codé en fonction de la première classe, qui peut être nommée ou peut être anonyme, prend en charge l'héritage de la fonction de base, a des arguments et des sous-processus qui peuvent fonctionner en parallèle. Les processus ci-dessous décrivent une logique de la même recette pour la soupe aux champignons russe.
{!proc prepare mushroom soup mix [_gloss {ru }] {is cooking by boiling} {arg cut-mushrooms {do prepare mushroom mix}} {arg cut-potatoes {do prepare potato mix}} {arg cut-onions {do prepare onion mix}} {do _put [_gloss {ru .}] {obj _all} {target-loc container}}} {!proc prepare mushroom mix [_gloss {ru }] {arg clean-mushrooms {do clean mushrooms}} {do _cut [_gloss {ru .}] {obj clean-mushrooms} {form slice {size 1.5 {unit cm}}}}}
R4S utilise une troisième approche. Il vous permet d'imaginer une recette avec le degré de formalisme nécessaire, pour décrire à la fois l'essence et l'action. Une recette écrite de cette façon dans la base de données peut être rapidement téléchargée et appliquée par la technologie. Dans les appareils de notre développement, où les recettes sont prises en charge, elles sont enregistrées au format GSL. Il est prévu de former le réseau neuronal pour l'enregistrement des recettes des peuples du monde, ce qui simplifiera l'échange de recettes et fournira une base technologique pour des cuisines automatisées à part entière.
Nous rencontrons souvent des tâches apparemment insignifiantes, dont la mise en œuvre n'est pas si simple. Selon vous, quelle langue peut être utilisée pour écrire des recettes, d'une part accessibles aux utilisateurs du monde entier, et d'autre part, comprises et interprétées par les machines?