Comment puis-Chaîne de Markov Chatbots travail?
Je pensais à la création d'un chatbot en utilisant quelque chose comme des chaînes de markov, mais je ne suis pas entièrement sûr de savoir comment le faire fonctionner. Ce que je comprends, vous créez une table de données avec un mot donné et puis les mots qui suivent. Est-il possible de joindre toute sorte de probabilité ou d'un comptoir, tandis que la formation du bot? C'est que même une bonne idée?
La deuxième partie du problème est avec les mots-clés. En supposant que je peux déjà identifier des mots-clés à partir de la saisie de l'utilisateur, comment puis-je générer une phrase qui utilise ce mot-clé? Je n'ai pas toujours envie de commencer la phrase avec le mot-clé, alors comment puis-je les semences de la chaîne de markov?
- Tableaux de données en 2D n'est pas vraiment utile pour l'Intelligence Artificielle, un graphique serait beaucoup plus bénéfique. Pour obtenir les mots qui suivent, Réseau Bayésien est la meilleure solution. Former des phrases, Traitement de la Langue est nécessaire et vous ne pouvez pas le faire avec la logique de base (tels que les Chaînes de Markov)
- Vous ne pouvez pas le faire avec des Chaînes de Markov? Certains robots existent qui utilisent des Chaînes de Markov, mais il est vraiment met juste des phrases, qu'ils ne font pas toujours sens, je suppose.
- Vous pouvez, mais pas le traitement du langage. Juste essayer de comprendre la cause la plus probable de la phrase.
- Que voulez-vous dire "juste trouver le plus probablement la peine"? Ce serait quelque chose comme un réseau bayésien me donner que des chaînes de markov ne le serait pas? Que serais-je procédé? Ne sont pas des Chaînes de Markov, un peu comme les réseaux Bayésiens? Je veux dire, vous êtes toujours aux prises avec des probabilités et quelque chose comme un graphe orienté, c'est juste stockés dans une table à la place.À chaque mot que vous avez toujours le choix de la prochaine mot de suivre avec une probabilité donnée, n'est-ce pas? Quelle est la différence? Et pourrais-je commencer avec des Chaînes de Markov et à l'ajout de la logique? Toutes les suggestions? Merci!
- Chaînes de Markov sont en quelque sorte des unidimensionnel Bayésien Filets, BNs sont plus générales. Vous pouvez utiliser des chaînes de markov, mais ils ne sont pas vraiment utiles dans un langage de traitement de la demande.
- Que feriez-vous me conseillez de mettre en œuvre à l'aide de Bayésienne des filets alors? Ce qui serait différent? Désolé, je suis encore un peu fragile sur eux 🙂 je ne pense pas que vous connaissez des exemples que je peux couler mes dents? J'ai trouvé quelques trucs sur des chaînes de Markov, mais la plupart du Réseau Bayésien des choses est assez abstrait.
- Bayésien Filets résultat serait absurde de phrases qui ont l'air naturel (Pour quelqu'un ne connaissant pas bien l'anglais, il semble que ceux sont juste des mots, il n'est pas familier avec) beaucoup de robots les utiliser car ils sont faciles à utiliser. Lire au sujet de traitement de la langue naturelle
- J'ai été, mais c'est un vaste sujet qu'il est assez difficile de savoir par où commencer. Avez-vous des pointeurs? Merci! Aussi, si BNs entraînerait dans des phrases qui ne répondent pas à l'utilisateur, comment est-ce différent de Markov Chaînage?
- L'IA est un vaste sujet. Une fois, j'ai fait un chatbot avec Bayésien Filets, Sémantique des Toiles et des idées créatives, qui sonnait bien. Si vous ne connaissez pas beaucoup d'IA, s'en tenir à des idées créatives. Un Bayésienne Net rendrait votre bot dire des choses comme "êtes-vous peruel?", ce qui n'est pas une phrase correcte, mais vous fait vous sentir comme sa puce! (Appliquer Bayésienne des Filets sur la lettre de choix dans les mots pour faire de nouveaux mots, c'est ce CAPTCHA algorithmes de faire comme vous l'avez vu absurde, mais de belles paroles dans les images CAPTCHA)
- À droite, la chose que j'essaie de comprendre, c'est quel est l'avantage de la Bne woudl vous donner que des Chaînes de Markov ne le serait pas? Ce qui serait mis en œuvre différemment, en plus d'avoir un graphe orienté au lieu de le garder dans une base de données? Il pourrait être plus rapide à répondre, mais ce genre de fonctionnalité qui serait différent? Il me semble que c'est plus facile/mieux pour stocker sur le disque plutôt que de garder tout chargé dans la mémoire de toute façon?
- Chaînes de Markov peut vous aider à choisir entre un 1D ensemble de choses, les réseaux Bayésiens permettent de choisir à partir d'un ensemble de 2D chose (deux facteurs). Dans votre cas Markovs Ferait
- Ah, ouais, ça a du sens. Merci! Il serait bon de prolonger un peu si, dans ce cas, vous peut-être raison.
Vous devez vous connecter pour publier un commentaire.
J'ai fait une chaîne de Markov chatbot pour l'IRC en Python a quelques années et il peut faire la lumière la façon dont je l'ai fait. Le texte généré ne doit pas nécessairement faire aucun sens, mais il peut être vraiment agréable à lire. Permet de le décomposer en étapes. En supposant que vous avez une entrée fixe, d'un fichier texte (vous pouvez utiliser l'entrée de texte dans le chat ou des paroles de chansons ou il suffit d'utiliser votre imagination)
Boucle à travers le texte et de faire un Dictionnaire, le sens de clé - valeur conteneur. Et mettre toutes les paires de mots clés et le mot suivant comme une valeur.
Par exemple: Si vous avez un texte "a b c a b k" vous commencez avec un "b" comme la clé et "c" en tant que valeur, puis "b c" et "a" comme valeur... la valeur doit être une liste ou n'importe quelle collection de portefeuille 0..de nombreux "objets", comme vous pouvez avoir plus d'une valeur pour une paire de mots. Dans l'exemple ci-dessus, vous avez un "b" à deux reprises, suivie de poing par "c", puis à la fin par "k". Si à la fin vous aurez un dictionnaire/hachage qui ressemble à ceci:
{'a b': ['c','k'], 'b c': ['a'], 'c a': ['b']}
Maintenant, vous avez la structure nécessaire pour la construction de votre funky texte. Vous pouvez choisir de démarrer avec une clé aléatoire ou un lieu fixe! Donc, compte tenu de la structure que nous avons, nous pouvons commencer par sauver un "b" au hasard, puis de prendre une suite de mot à partir de la valeur, c ou k, de sorte que la première enregistrer dans la boucle, "a b k" (si "k" est la valeur aléatoire), puis vous continuez par le déplacement d'un pas vers la droite, qui dans notre cas est "b k", et enregistrer une valeur aléatoire pour cette paire si vous avez, dans notre cas, pas du tout afin de vous sortir de la boucle (ou vous pouvez décider d'autres trucs comme recommencer). Lorsque la boucle est en fait l'impression de votre texte enregistré à la chaîne.
Le plus gros de l'entrée, plus les valeurs que vous avez pour vous-clés (la paire de mots) et ensuite un "plus intelligente bot" de sorte que vous pouvez "train" de votre robot en ajoutant plus de texte (peut-être le chat d'entrée?). Si vous avez un livre en entrée, vous pouvez construire une belle aléatoire des phrases. Veuillez noter que vous n'avez pas à prendre un seul mot qui suit une paire comme une valeur, vous pouvez prendre 2 ou 10. La différence est que votre texte apparaîtra plus précises si vous utilisez le "plus" blocs de construction. Commencer avec une paire de clé et le mot suivant comme une valeur.
Donc, vous voyez que vous pouvez en avoir deux étapes, tout d'abord faire une structure où vous choisir au hasard une touche pour démarrer avec, puis prendre la clé et imprimer une valeur aléatoire de la clé et continuer jusqu'à ce que vous n'avez pas de valeur ou de certaines autres conditions. Si vous voulez, vous pouvez "semence" d'une paire de mots à partir d'une fenêtre de discussion à partir de votre clé-valeur de la structure pour avoir un début. Sa place à l'imagination, la façon de démarrer votre chaîne.
Exemple avec de vrais mots:
Maintenant construire une boucle:
Choisir une clé aléatoire, de dire "salut mon" et de choisir au hasard une valeur, un seul ici, de sorte que son "nom"
(ÉCONOMIE "salut mon nom").
Maintenant déplacer d'un cran vers la droite en prenant "mon nom", comme la clé suivante et choisir une valeur aléatoire... "est"
(ÉCONOMIE "bonjour, mon nom est").
Maintenant déplacer et prendre "le nom est" ... "Al"
(ÉCONOMIE "bonjour, mon nom est AL").
Maintenant, prenez "Al" ... "et"
(ÉCONOMIE "bonjour, mon nom est Al et").
...
Quand vous venez à "et je" vous permettra de choisir au hasard une valeur, permet de dire que "peut", puis le mot "je" est, etc... lorsque vous arrivez à votre condition d'arrêt ou que vous n'avez pas de valeurs d'imprimer la construction de la chaîne dans notre cas:
"bonjour, mon nom est Al et je peux vivent là-aussi longtemps que je veux"
Si vous avez plus de valeurs, vous pouvez accéder à toutes les touches. Plus les valeurs les plus de combinaisons que vous avez et la plus aléatoire et le plaisir du texte.
Le bot choisit un mot au hasard à partir de votre entrée et génère une réponse en choisissant un autre mot aléatoire qui a été vu pour être un successeur à son lieu de mots. Ensuite, il répète le processus pour trouver un successeur à ce mot, à son tour et de manière itérative jusqu'à ce qu'il pense que c'est assez dit. Il parvient à cette conclusion en s'arrêtant à un mot qui était avant un signe de ponctuation dans le texte de formation. Il retourne ensuite en mode d'entrée à nouveau pour vous permettre de répondre, et ainsi de suite.
Il n'est pas très réaliste, mais par la présente, je mets quiconque au défi de faire mieux en 71, lignes de code !! C'est un grand défi pour toute herbe Pythonists, et je souhaite juste que je pouvais ouvrir le défi à un public plus large que le petit nombre de visiteurs que je reçois sur ce blog. Pour coder un bot qui est toujours la garantie d'être grammaticale doit sûrement être plus près de plusieurs centaines de lignes, j'ai simplifié très simplement en essayant de penser à la règle la plus simple pour donner à l'ordinateur d'un simple coup de couteau à avoir quelque chose à dire.
Ses réponses sont plutôt impressionniste, pour dire le moins ! Aussi, vous devez mettre ce que vous dites dans des guillemets simples.
J'ai utilisé de la Guerre et de la Paix pour mon “corpus” qui a pris une couple d'heures pour le parcours de formation, l'utilisation d'un fichier plus court si vous êtes impatient...
ici est le formateur
Ici est le bot:
Vous avez tendance à obtenir un sentiment étrange quand il dit quelque chose qui semble partiellement à faire sens.
Vous pouviez faire comme ceci:
Faire une chaîne de markov d'ordre 1 générateur, en utilisant des mots et des lettres.
Chaque fois que quelqu'un poste quelque chose, ce qu'il a posté est ajouté à bot de base de données.
Également bot permettrait de sauver quand il était allé au chat et quand un gars a posté le premier message (en multiples de 10 secondes), puis il permettrait d'économiser la quantité de temps que ce même gars attendu pour poster à nouveau (en multiples de 10 secondes)...
Cette deuxième partie sera utilisée pour voir quand le gars va poste, donc il a rejoint le chat et après un certain laps de temps basé sur une table avec "au bout de combien de 10 secondes, l'un gars a posté après avoir rejoint le chat", alors qu'il allait continuer à la poste avec le même tableau de la pensée "comment est le temps utilisé pour écrire le post qui a été posté après un post qu'il a utilisé les X secondes pour réfléchir et écrire"