AI-United » NLP » Chatbot selbst erstellen in Python

Chatbot selbst erstellen in Python

Chatbot selbst erstellen in Python

Chatbots verbessern und erleichtern intelligent unser Leben. Man kann viel zum Thema Chatbots in den Medien lesen, sie auf Webseiten und in Messengern finden. Die Analysten des Forschungsunternehmens Gartner behaupten, dass Chatbots von großer Bedeutung sind, weil sie viele Fragen verbunden mit dem Kundensupport beantworten können. In diesem Beitrag sehen Sie, wie man einen Chatbot selbst in Python erstellen kann.

Haben Sie vielleicht von Duolingo, von einer beliebten Sprachlern-Anwendung in Form eines Spiels gehört? Duolingo ist bekannt für seinen innovativen Lernstil. Das Konzept ist einfach: Fünf bis zehn Minuten interaktives Lernen pro Tag reichen aus, um eine Sprache zu lernen. Obwohl man mit dieser Sprachlern-Anwendung leicht eine Sprache lernen kann, haben die Benutzer ein Problem. Sie sind der Meinung, dass sie ihre Sprachkenntnisse nicht weiterentwickeln, weil sie selbstständig lernen. Sie fühlen sich unsicher paarweise zu kommunizieren. Dieses Problem ist von den Entwicklern nicht unbemerkt geblieben. Sie haben einen Chatbot in dieser Anwendung erstellt, damit die Benutzer ihre Sprachkenntnisse gut entwickeln und in die Praxis umsetzen können.

Was ist ein Chatbot?

Ein Chatbot ist ein Konversationsprogramm, das die menschliche Kommunikation durch Text oder Sprache imitiert. Chatbots helfen, Aufgaben zu automatisieren, indem sie nach einem bestimmten Algorithmus arbeiten. Reiseveranstalter, Banken, Telekommunikationsunternehmen, Versicherungen und andere Unternehmen verwenden Chatbots, um ihren Benutzer auf ihre Fragen schnell und jederzeit zu beantworten.

Wenn man über die Geschichte der Chatbots spricht, erwähnt man auch Joseph Weizenbaum, der im Jahr 1966 ein Computerprogramm namens Eliza entwickelte. Das Programm ahmt die Sprechweise des Psychotherapeuten nach und besteht nur aus 200 Codezeilen. Sie können immer noch mit Eliza chatten.

Wie funktioniert ein Chatbot?

Es gibt 2 Arten der Chatbots: regelbasierte und selbstlernende Chatbots.

  • Regelbasierte Chatbots haben eine Anweisung mit einer Liste von Befehlen und Schlüsselwörtern, um Fragen zu beantworten. Stellt der Benutzer Fragen, die nicht von den Entwicklern vorprogrammiert wurden, kann der Chatbot nicht mehr helfen.
  • Selbstlernende Chatbots  funktionieren nach dem Prinzip der künstlichen Intelligenz und sind effektiver als regelbasierte Chatbots. Sie verwenden keine vorbereitete Antworten. Es gibt zwei Arten von selbstlernenden Chatbots: Suchbots und generative Bots.

Suchbots verwenden heuristische Methoden, um eine Antwort aus einer Bibliothek von vordefinierten Replikaten auszuwählen. Diese Chatbots verwenden den Text der Nachricht und den Kontext des Dialogs, um eine Antwort aus einer vordefinierten Liste auszuwählen.

Generative Bots können ihre eigenen Antworten erstellen und reagieren nicht immer auf eine der vordefinierten Optionen. Dies macht sie intelligent, weil diese Bots jedes Wort in der Abfrage studieren und eine Antwort generieren.

Chatbot erstellen in Python

Sie müssen in der Lage sein, Scikit– und NLTK-Bibliotheken zu verwenden. Wenn Sie aber neu in der Verarbeitung natürlicher Sprache (NLP) sind, können Sie den Artikel lesen und dann die entsprechende Literatur studieren.

Natürliche Sprachverarbeitung (NLP)

Die Verarbeitung natürlicher Sprache ist ein Studienfach, in dem die Interaktion zwischen menschlicher Sprache und Computer untersucht wird. NLP basiert auf der Synthese von Informatik, künstlicher Intelligenz und Computerlinguistik. NLP ist eine Möglichkeit für Computer, die menschliche Sprache auf eine vernünftige und nützliche Weise zu analysieren und zu verstehen.

NLTK (Natural Language Toolkit) ist eine Plattform zur Erstellung von Programmen in Python, um mit natürlicher Sprache zu arbeiten. Das NLKT bietet einfache Schnittstellen für mehr als 50 Unternehmen und linguistische Ressourcen wie WordNet sowie eine Reihe von Bibliotheken für die Textverarbeitung zur Klassifizierung, Tokenisierung, Generierung, Tagging, syntaktischen Analyse und zum Verständnis der Semantik sowie die Entwicklung von NLP-Bibliothekshüllen für kommerzielle Anwendungen. Das Buch Natural Language Processing with Python ist eine praktische Einführung in die Programmierung der Sprachverarbeitung.

Laden und Installieren von NLTK
  • Installieren Sie NLTK: Starten Sie pip install nltk.
  • Testaufbau: Starten Sie Python, dann geben Sie import nltk ein.

Anleitungen für bestimmte Plattformen finden Sie hier.

Installation von NLTK-Paketen

Importieren Sie NLTK und starten Sie nltk.download(). Das wird den NLTK-Bootloader öffnen, wo Sie die Version des Codes und das Modell zum Herunterladen auswählen können. Sie können auch alle Pakete auf einmal herunterladen.

NLTK-Textvorverarbeitung

Das Hauptproblem bei den Daten besteht darin, dass sie im Textformat dargestellt werden. Um Probleme durch maschinelle Lernalgorithmen zu lösen, ist ein bestimmter Vektor von Eigenschaften erforderlich. Bevor Sie mit der Erstellung eines Projekts für NLP beginnen, müssen Sie es daher vorverarbeiten. Die Vorverarbeitung umfasst:

  • Konvertieren Sie Buchstaben in Groß- oder Kleinbuchstaben, damit der Algorithmus die gleichen Wörter nicht erneut verarbeitet.
  • Tokenisierung. Tokenisierung wird verwendet, um den Prozess der Umwandlung von gewöhnlichen Textzeichenketten in eine Liste von Token, d.h. Wörter, zu beschreiben. Der Vorschlags-Tokenizer wird verwendet, um eine Liste von Vorschlägen zu erstellen. Der Wort-Tokenizer erstellt eine Liste von Wörtern.
  • Entfernung von Rauschen, d.h. alles, was keine Zahl oder kein Buchstabe ist;
  • Entfernen von Stoppwörtern. Manchmal werden einige sehr gebräuchliche Wörter vollständig aus dem Wörterbuch ausgeschlossen, die für die Bildung einer Antwort auf die Frage eines Benutzers nicht als wichtig angesehen werden. Diese Wörter werden als Stoppwörter bezeichnet (Zwischenrufe, Artikel, einige einleitende Wörter);
  • Stemming: das Wort zur Wurzelbedeutung zwingen. Wenn wir zum Beispiel die Wörter “Stemes”, “Stemming”, “Stammed” und “Stemization” halten müssen, wird das Ergebnis ein Wort sein – “Stamm”.
  • Lemmatisierung. Die Lemmatisierung unterscheidet sich von der Stemming. Der Hauptunterschied zwischen ihnen ist, dass die Stemming oft nicht existierende Wörter hervorbringt, während Lemma existierende Wörter hervorbringt. Stemming kann man nicht immer in einem Wörterbuch finden, Lemmatisierung jedoch schon.
Word-Set

Nach dem ersten Schritt der Vorverarbeitung müssen Sie den Text in einen Vektor von Zahlen konvertieren. Word-Set ist eine Darstellung des Textes, der das Vorhandensein von Wörtern im Text beschreibt. Word-Set besteht aus einem Wörterbuch mit berühmten Wörtern und aus den Häufigkeiten, auf die jedes Wort im Text trifft.

Die Idee von “Word-Set” besteht darin, dass Texte inhaltlich ähnlich sind, wenn sie ähnliche Wörter enthalten. Außerdem können Sie nur aus einer Reihe von Wörtern etwas über den Inhalt des Textes lernen.

Wenn das Wörterbuch zum Beispiel die Wörter {Learning, is, the, not, great} enthält und wir einen Satzvektor “Learning is great” machen wollen, erhalten wir einen Vektor (1, 1, 1, 0, 0, 0, 1).

TF-IDF-Verfahren

Das Problem mit dem “Word-Set” liegt darin, dass der Text von häufig vorkommenden Wörtern dominiert werden kann, die keine wertvollen Informationen enthalten. Auch “Word-Set” gibt den langen Texten mehr Bedeutung als den kurzen Texten.

Ein Ansatz zur Lösung dieser Probleme besteht darin, die Häufigkeit des Auftretens des Wortes nicht in einem Text, sondern auf einmal zu berechnen. Dadurch wird der Beitrag z.B. der Artikel “a” und “the” ausgeglichen. Dieser Ansatz wird als TF-IDF (Term Frequency-Inverse Document Frequency) bezeichnet und besteht aus zwei Schritten:

  • TF – Berechnung der Worthäufigkeit in einem Text
  • IDF Berechnung, wie selten ein Wort in allen Texten vorkommt.
Beispiel

Nehmen wir den Text mit 100 Wörtern, in dem das Wort “Telefon” 5 mal vorkommt. Der TF-Parameter für das Wort “Telefon” ist (5/100) = 0,05.

Weiter stellen wir vor, dass wir 10 Millionen Dokumente haben, und das Wort “Telefon” erscheint in tausend von ihnen. Der Koeffizient wird berechnet als 1+log(10 000 000 000/1000) = 4. Somit ist TD-IDF 0,05 * 4 = 0,20.

TF-IDF kann in scikit so implementiert werden:

from sklearn.feature_extraction.text import TfidfVectorizer
Otiai-Koeffizient

TF-IDF ist eine Transformation, die auf Texte angewendet wird, um zwei reale Vektoren in einem Vektorraum zu erhalten. Dann können wir den Otiai-Koeffizienten eines beliebigen Vektorenpaares erhalten, indem wir ihr elementares Produkt berechnen und es in das Produkt ihrer Normen unterteilen. Somit wird der Winkelkosinus zwischen den Vektoren erhalten. Der Otiai-Koeffizient ist ein Maß für die Ähnlichkeit zwischen zwei Nicht-Null-Vektoren. Mit dieser Formel können wir die Ähnlichkeit zwischen zwei beliebigen Texten d1 und d2 berechnen.

Cosine Similarity (d1, d2) =  Dot product(d1, d2) / ||d1|| * ||d2||

Chatbot-Training

In unserem Beispiel verwenden wir die Wikipedia-Seite als Text. Kopieren Sie den Inhalt der Seite und legen Sie ihn in eine Textdatei namens “chatbot.txt”. Sie können einen anderen Text sofort verwenden.

Import der notwendigen Bibliotheken
import nltk
import numpy as np
import random
import string # to process standard python strings
Daten lesen

Lesen Sie die Datei corpus.txt und konvertieren Sie den gesamten Text in eine Satzliste und eine Wortliste zur Weiterverarbeitung.

f=open('chatbot.txt','r',errors = 'ignore')

raw=f.read()

raw=raw.lower()# converts to lowercase

nltk.download('punkt') # first-time use only

nltk.download('wordnet') # first-time use only

sent_tokens = nltk.sent_tokenize(raw)# converts to list of sentences 

word_tokens = nltk.word_tokenize(raw)# converts to list of words

Betrachten wir ein Beispiel für sent_tokens und word_tokens Dateien.

sent_tokens[:2]
['a chatbot (also known as a talkbot, chatterbot, bot, im bot, interactive agent, or artificial conversational entity) is a computer program or an artificial intelligence which conducts a conversation via auditory or textual methods.',
 'such programs are often designed to convincingly simulate how a human would behave as a conversational partner, thereby passing the turing test.']

word_tokens[:2]
['a', 'chatbot', '(', 'also', 'known']
Quellvorverarbeitung

Jetzt definieren wir die LemTokens-Funktion, die Token als Eingabeparameter übernimmt und normalisierte Token erzeugt.

lemmer = nltk.stem.WordNetLemmatizer()
#WordNet is a semantically-oriented dictionary of English included in NLTK.

def LemTokens(tokens):
    return [lemmer.lemmatize(token) for token in tokens]
remove_punct_dict = dict((ord(punct), None) for punct in string.punctuation)
def LemNormalize(text):
    return LemTokens(nltk.word_tokenize(text.lower().translate(remove_punct_dict)))
Keyword-Auswahl

Lassen Sie uns die Begrüßungslinie des Bot bestimmen. Wenn der Benutzer den Bot begrüßt, sagt der Bot hallo zurück. ELIZA verwendet einen einfachen Keyword-Vergleich für Begrüßungen. Wir werden die gleiche Idee verwenden.

GREETING_INPUTS = ("hello", "hi", "greetings", "sup", "what's up","hey",)

GREETING_RESPONSES = ["hi", "hey", "*nods*", "hi there", "hello", "I am glad! You are talking to me"]

def greeting(sentence):
 
    for word in sentence.split():
        if word.lower() in GREETING_INPUTS:
            return random.choice(GREETING_RESPONSES)
Antwortgenerierung

Um die Antwort unseres Bot auf die Eingabe von Fragen zu generieren, wird das Konzept der Ähnlichkeit verwendet. Deshalb importieren wir zunächst die notwendigen Module.

  • Importieren Sie den TFidf-Vektorisierer aus der Bibliothek, um einen Satz von Rohtexten in eine TF-IDF-Eigenschaftsmatrix zu konvertieren.
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity

Dieses Modul wird verwendet, um nach Schlüsselwörtern in der Abfrage des Benutzers zu suchen. Dies ist der einfachste Weg, um einen Chatbot zu erstellen.

Definieren Sie eine Antwortfunktion, die eine von mehreren möglichen Antworten zurückgibt. Wenn die Anfrage mit keinem der Keywords übereinstimmt, antwortet der Bot mit “Sorry! Ich verstehe dich nicht.”

def response(user_response):
    robo_response=''

TfidfVec = TfidfVectorizer(tokenizer=LemNormalize, stop_words='english')
    tfidf = TfidfVec.fit_transform(sent_tokens)
    vals = cosine_similarity(tfidf[-1], tfidf)
    idx=vals.argsort()[0][-2]
    flat = vals.flatten()
    flat.sort()
    req_tfidf = flat[-2]

    if(req_tfidf==0):
        robo_response=robo_response+"I am sorry! I don't understand you"
        return robo_response
    else:
        robo_response = robo_response+sent_tokens[idx]
        return robo_response

Schließlich spezifizieren wir Bot-Antworten am Anfang und Ende der Koversation, abhängig von den Antworten des Benutzers.

flag=True
print("ROBO: My name is Robo. I will answer your queries about Chatbots. If you want to exit, type Bye!")

while(flag==True):
    user_response = input()
    user_response=user_response.lower()
    if(user_response!='bye'):
        if(user_response=='thanks' or user_response=='thank you' ):
            flag=False
            print("ROBO: You are welcome..")
        else:
            if(greeting(user_response)!=None):
                print("ROBO: "+greeting(user_response))
            else:
                sent_tokens.append(user_response)
                word_tokens=word_tokens+nltk.word_tokenize(user_response)
                final_words=list(set(word_tokens))
                print("ROBO: ",end="")
                print(response(user_response))
                sent_tokens.remove(user_response)
    else:
        flag=False
        print("ROBO: Bye! take care..")

Wir haben es geschafft. Obwohl unser primitiver Bot kaum kognitive Fähigkeiten hat, war es eine gute Möglichkeit, mit NLP umzugehen und mehr über Chatbots zu erfahren.

Wie kann man einen Chatbot in Python in Ihrem Umfeld einsetzen?

Möchten Sie mehr über KI erfahren und wie Sie es in Ihrem Unternehmen einsetzen können?

Diese und weitere Fragen beantwortet gerne das AI United Team per Email oder in dem Q&A Bereich.

Quelle

AI-United-Redaktion

Kommentar hinzufügen

Your email address will not be published. Required fields are marked *

300-101   400-101   300-320   300-070   300-206   200-310   300-135   300-208   810-403   400-050   640-916   642-997   300-209   400-201   200-355   352-001   642-999   350-080   MB2-712   400-051   C2150-606   1Z0-434   1Z0-146   C2090-919   C9560-655   642-64   100-101   CQE   CSSLP   200-125   210-060   210-065   210-260   220-801   220-802   220-901   220-902   2V0-620   2V0-621   2V0-621D   300-075   300-115   AWS-SYSOPS   640-692   640-911   1Z0-144   1z0-434   1Z0-803   1Z0-804   000-089   000-105   70-246   70-270   70-346   70-347   70-410