\title{Erhaltung der Qualität der Chatbot-Struktur}
\date{\today}
\begin{document}
\maketitle
\newpage
\tableofcontents
\newpage
\section{N-Gramm Model}
N-Gramme sind das Ergebnis der Zerlegung eines Textes in Fragmente. Der Text wird dabei zerlegt, und jeweils N aufeinanderfolgende Fragmente werden als N-Gramm zusammengefasst.\cite{ngram} Die Fragmente sind in unserem Fall Wörter (Token) die uns spaCy erzeugt.
\\
\\
\\
Beispiel: Mono- und Bigramme des Satzes "Hallo schöne Welt"\\
\\
Monogramme: Hallo, schöne, Welt\\
Bigramme: Hallo schöne, schöne Welt
\section{Vektorizierung von Strings}
Um Strings effizient miteinander vergleichen zu können, besteht die Möglichkeit diese als Vektor darzustellen.
\subsection{Bag-of-words (BOW) Model}
Ein Text wird als unstrukturierte Ansammlung von Wörtern betrachtet. In einem Vektor wird lediglich die Häufigkeit der aufgetretenen Wörter festgehalten.
\cite{bow}
\\
\\
Beispiel: \\
Satz 1: "Der Baum ist groß."\\
Satz 2: "Das Haus ist groß." \\
\\
Durch spaCy erhalten wir folgende Token:\\
"Der", "Baum", "ist", "groß"\\
"Das", "Haus", "ist", "groß"\\
\\
Aus diesen Tokens lässt sich nun folgende BOW darstellung ableiten:\\
Wichtig hierbei ist zu sehen, dass in den Ergebnissvektoren auch die Anzahl der Wörter vorkommen,
die nicht im Ursprungssatz vorhanden sind (0).
Dies ist notwendig um die Analyse der Vektoren von unterschiedlich langen Sätzen zu ermöglichen.\\
Desweitern ist es möglich nicht nur Monogramme in diese Vektorform zu bringen, sondern auch beliebige N-Gramme die aus den Tokens erzeugt werden.\\
\\
Beispielcode zum Erzeugen einer BOW Matrix aus mehreren Strings mittles sklearn:\\
\begin{spverbatim}
from sklearn.feature_extraction.text import CountVectorizer
A = ["string 1", "string 2", "string 3"]
count_vectorizer = CountVectorizer(
ngram_range=(1, 2),
tokenizer=spacy_tokenizer
)
features = count_vectorizer.fit_transform(A).toarray()
\end{spverbatim}
\subsection{word2vec}
spaCy kann aus Wörtern, durch das verwenden eines neuronalem Netzwerks, Vektoren erzeugen.
Der große Vorteil gegenüber der BOW Vektoren ist, dass sie auch semantische Zusammenhänge darstellen
können, wie zum Beispiel Synonyme.
\cite{word2vec}
\\
\\Beispielcode zum Erzeugen einer word2vec Matrix aus mehreren Strings mittles spaCy:\\
\begin{spverbatim}
import spacy
parser = spacy.load('de_core_news_sm')
A = ["string 1", "string 2", "string 3"]
B = []
for sent in rki_faq:
doc = parser(sent)
B.append(doc.vector)
\end{spverbatim}
\section{Ähnlichkeitsanalyse}
\subsection{Ähnlichkeit zweier Vektoren}
Sei $I =\{v |\; v \in(\mathbb{R})^n, \;\norm{v}_2=1\}$ eine Menge von normierten Vektoren. Ziel der Ähnlichkleitsanalyse ist es die Ähnlichkeit bzw. Distanz zweier Vektoren $a,b \in I$ zueinander zu bestimmen. Hierfür gibt es verschiedene Distanz-/Ähnlichkeitsfunktionen.
Eine Funktion $s: I \times I \rightarrow\mathbb{R}$ heißt Ähnlichkeitsmaß/-funktion, falls für alle $a, b \in I$ gilt:
\begin{gather*}
s(a,b)\;=\;s(b,a)\\
s(a,b)\geq0\\
s(a,b) = 1 \iff a = b
\end{gather*}
Eine Funktion $d: I \times I \rightarrow\mathbb{R}$ heißt Distanzmaß/-funktion, falls für alle $a, b \in I$ gilt: