Dies ist ein Chatbot, der Antworten auf die meisten Ihrer Fragen / FAQ zu Corona gibt. Der Chatbot gibt Ihnen Antworten auf die Daten der WHO (https://www.who.int/). Dies hilft denjenigen, die Informationen benötigen oder mehr über diesen Virus erfahren möchten.

Es verwendet ein neuronales Netzwerk mit zwei verborgenen Schichten (genug für diese QnA), das vorhersagt, welches Muster mit der Frage des Benutzers übereinstimmt, und an diesen Knoten sendet. Aus den Fragen des Benutzers können weitere Muster hinzugefügt werden, um die Ergebnisse zu verbessern und weitere Informationen zu Coronavirus in die JSON-Datei aufzunehmen. Je mehr Sie diesen Chatbot trainieren, desto präziser wird er. Der Vorteil der Verwendung von Deep Learning besteht darin, dass Sie nicht dieselbe Frage stellen müssen, die in der JSON-Datei geschrieben wurde, da Stammwörter aus dem Muster mit der Benutzerfrage übereinstimmen

Voraussetzungen:

Python 3
NumPy
nltk
TensorFlow v.1.15 (keine GPU erforderlich)
tflearn

Trainingsdaten:
Um die Daten an Chatbot weiterzuleiten, habe ich json mit möglichen Fragenmustern und unseren gewünschten Antworten verwendet.
Die für das Projekt verwendete JSON-Datei lautet WHO.
Für dieses Projekt habe ich meine JSON-Datei als WHO.json bezeichnet.
In der JSON-Datei befindet sich die Kategorie, in die alle diese Antworten fallen.
Muster werden verwendet, um alle möglichen Fragenmuster aufzulisten.
Antworten enthält alle Antworten in Bezug auf die gemusterten Fragen

import nltk 
import numpy 
import tflearn 
import tensorflow 
import pickle 
import random 
import json 
nltk.download('punkt') 
   
from nltk.stem.lancaster import LancasterStemmer 
stemmer = LancasterStemmer() 
  
 
with open("WHO.json") as file:                   
    data = json.load(file) 
      
try: 
    with open("data.pickle", "rb") as f: 
        words, l, training, output = pickle.load(f) 
except: 
      
    
    words = [] 
    l = [] 
    docs_x = [] 
    docs_y = [] 
      
   
    for i in data["intents"]:    
        for p in i["patterns"]: 
            wrds = nltk.word_tokenize(p) 
            words.extend(wrds) 
            docs_x.append(wrds) 
            docs_y.append(i["tag"]) 
   
            if i["tag"] not in l: 
                l.append(i["tag"]) 
    
    words = [stemmer.stem(w.lower()) for w in words if w != "?"]          
    words = sorted(list(set(words))) 
    l = sorted(l)                                       
      
    
    
    training = [] 
    output = [] 
    out_empty = [0 for _ in range(len(l))] 
    for x, doc in enumerate(docs_x): 
        bag = [] 
   
        wrds = [stemmer.stem(w) for w in doc] 
   
        for w in words: 
            if w in wrds: 
                bag.append(1) 
            else: 
                bag.append(0) 
        output_row = out_empty[:] 
        output_row[l.index(docs_y[x])] = 1
   
        training.append(bag) 
        output.append(output_row) 
          
    
    training = numpy.array(training)         
    output = numpy.array(output) 
    with open("data.pickle", "wb") as f: 
        pickle.dump((words, l, training, output), f) 
  
          
tensorflow.reset_default_graph()                     
   
net = tflearn.input_data(shape=[None, len(training[0])]) 
net = tflearn.fully_connected(net, 8) 
net = tflearn.fully_connected(net, 8) 
net = tflearn.fully_connected(net, len(output[0]), activation="softmax") 
net = tflearn.regression(net) 
  
  
model = tflearn.DNN(net) 
    
  
model.fit(training, output, n_epoch=1000, batch_size=8, show_metric=True)         
model.save("model.tflearn") 
   
def bag_of_words(s, words):                                 
    bag = [0 for _ in range(len(words))] 
   
    s_words = nltk.word_tokenize(s) 
    s_words = [stemmer.stem(word.lower()) for word in s_words] 
   
    for se in s_words: 
        for i, w in enumerate(words): 
            if w == se: 
                bag[i] = 1
   
    return numpy.array(bag) 
   
   
def chat(): 
    print(
    ) 
      
    while True: 
        inp = input("You: ") 
        if inp.lower() == "quit": 
            break
   
        results = model.predict([bag_of_words(inp, words)])[0] 
        results_index = numpy.argmax(results) 
          
        
        tag = l[results_index] 
        if results[results_index] > 0.7: 
            for tg in data["intents"]: 
                if tg['tag'] == tag: 
                    responses = tg['responses'] 
   
            print(random.choice(responses)) 
        else: 
            print("I am sorry but I can't understand") 
   
chat()