\documentclass[a4paper, twoside]{IEEEtran}

\usepackage{array}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[ngerman]{babel}
\usepackage[style=ieee, backend=biber, bibencoding=utf8]{biblatex}
\addbibresource{literatur.bib}\usepackage{csquotes}
\renewcommand*{\bibfont}{\footnotesize}
\usepackage{booktabs}
\usepackage{microtype}
\usepackage{xcolor}
\usepackage{graphicx}
\usepackage{listings}
\lstset{basicstyle=\footnotesize\ttfamily, breaklines=true, keepspaces=true, columns=fixed, numberstyle=\tiny, keywordstyle=\color{blue}}
\usepackage{tikz}
\usetikzlibrary{positioning,fit,calc,backgrounds}
\usepackage{tabularray}

\renewcommand{\lstlistingname}{Codebeispiel}

\lstdefinestyle{mystyle}{
    language=Python,
    basicstyle=\ttfamily\small,
    commentstyle=\color{green},
    keywordstyle=\color{blue},
    numberstyle=\tiny\color{gray},
    stringstyle=\color{purple},
    breakatwhitespace=false,
    breaklines=true,
    captionpos=b,
    keepspaces=true,
    numbers=left,
    numbersep=5pt,
    showspaces=false,
    showstringspaces=false,
    showtabs=false,
    tabsize=2,
    escapeinside={(*@}{@*)} % for escaping to LaTeX
}

\lstset{style=mystyle}

\title{Vorstellung von Program-aided Language Model Prompts
\thanks{Dieser Beitrag entstand im Rahmen des \emph{Konferenzseminars Machine Learning}, das im Wintersemester 2023/24 vom Fachbereich Informatik und Naturwissenschaften der Fachhochschule Südwestfalen durchgeführt wurde. --- Als Basis für diese \LaTeX-Vorlage dient das IEEE Conference Template der IEEE Computational Intelligence Society.}}

\author{
    \IEEEauthorblockN{Philipp Horstenkamp\\}
    \IEEEauthorblockA{Fachhochschule Südwestfalen}

    \vspace{3mm}
    Konferenzseminar Machine Learning\\
    Wintersemester 2023/24
}

\begin{document}

\maketitle

\begin{abstract}
Eines der Probleme welches bei der nutzung von LLMs auftritt ist eine reduktion der ausführung von mathematischen operationen.
Sie entwickeln das gleiche problem wie der Menschliche verstand das das Berechnen von Mathematischen ergebnissen mit Flüchtigkeitsfehlern.
Eine mögliche lösung dafür ist die formulierung von Mathematischen problemstellungen in einfachem Programmcode welcher dann wie ein ``Taschenrechner'' analog verwendet wird
um die Mathematischen operationen als Arithmetisch logische berechnung durchzuführen und nicht als Sprachmodel welches versucht die reihenfolge der nächst wahrscheinlichen Tokens zu generieren.
So können die stärken des Aufgabenmodels mit den stärken von direkt ausgeführten Mathematischen operationen kombiniert werden um Ergebnisse zu erzielen welche Mathematisch sauberer sind.
Dieses prinzip ist in dem Paper „PAL: Programing aided langauge model“ ~\cite{gao2023pal} vorgestellt worden.
Hier wird es zusammengefasst.
\end{abstract}

\begin{IEEEkeywords}
LLM, Prompt-Engineering, Mathematical, Informatik
\end{IEEEkeywords}

\section{Einleitung}\label{sec:einleitung}
Seid 2023 mit der veröffentlichung von ChatGPT sind LLMs in aller Munde.
Die entwicklung hat aber natürlich schon fiel früher begonnen.
Mit wenigen beispielen ließen sie sich auch schon vor einigen Jahren dazu einsetzen eine einen Rechenweg auszuformulieren
und so zu einer symbolischen lösung zu kommen welche dann eingesetzt und ausgerechnet werden aber auch diese sehr schritt für schritt ausgeführte berechnung ~\cite{CoT}
hat das problem das die Mathematischen operationen in einem Sprachmodel gelöst werden,
welches dafür sich aus dem Textkörper welcher als grundlage zum Lernen verwendet wurde die grundrechenregeln Ableiten muss.
Dies und das LLMs die nächsten Zeichen vorhersagen sort dafür das es extrem schwer für diese ist die correct aufgeschriebenen probleme correct zu lösen.
Verschiebt man die Berechnung selber aber in eine Software, welche von dem LLM geschrieben wird, umgeht man dieses problem und erreicht so eine viel bessere Qualität.
Zur Zeit des PAL papers wurde das Lösen über few-shot-learning angestossen~\cite{few-shot1}~\cite{few-shot2}.
Few shot learning gibt eine Menge and Frage und Antwortpaaren als beispiel wie eine Problemlösung aussehen könnte.
Dies sorgt dafür das fragestellungen vom LLM im Scheme der Beispiele angegangen werden und das LLM so etwas geführt wird.
PAL nutzt few-shot prompting, um so ein LLM dazu zu bringen eine Python funktion, als Antwort zurückzugeben.
Dabei ist natürlich wichtig, dass die gegebenen beispiele maßgeblich die Probleme eingrenzen die mit dieser Technik gelöst werden können.

Das Januar 2023 Vorgestellte PAL verfahren ist nun ein integrierter Teil von z.\ B.\ ChatGPT.
Ob sich dies aus dem hier vorgestellten PAL Papier entwickelt hat, ist natürlich schwer zu sagen.

Hier ein vergleich wie dies in Chain-of-Thought ~\cite{CoT} vs. PAL~\cite{gao2023pal} vs. aktueller ChatGPT4\cite{ChatGPTexample} aussehen kann.

\begin{figure*}[htbp]
    \centering
    \includegraphics[width=\textwidth]{PAL Example Expanded.drawio.pdf}
    \caption{CoT\cite{CoT} vs. PAL\cite{gao2023pal} vs. ChatGPT4\cite{ChatGPTexample} nach\cite{gao2023pal}}
    \label{fig:cot-pal-chatgpg}
\end{figure*}

\section{Hintergrund}\label{sec:Few-shot-prompting}

\subsection{Few-shot Prompting}
Eine der erstaunlichen fähigkeiten von LLMs ist das sie mit wenigen beispielen welche zeigen wie man ein Problem
einer bestimmten art lösen könnte diese Lösungen oft auf andere probleme übertragen können ~\cite{few-shot2}~\cite{few-shot1}.

Beide können wie in der den ersten beiden Eingabe / Ausgabe combination in \ref{fig:cot-pal-chatgpg} aus nur wenigen beispielen bestehen.
Wichtig dabei ist das sich die lösungen auch stilistisch sehr stark an den gegebenen beispielen Orientieren.
Dies ist eine Technik um ein LLM zu nutzen und keine modifikation am LLM selber.
Few-shot Prompting gehört daher zum Gebiet des Prompting, nicht der LLM erstellung.

\subsection{Chain of Thought (CoT)}

Eine der Weit verbreiteten Techniken, um mehr aus LLMs herauszuholen ist diese Anzuregen ihre Antwort schrittweise aufzubauen.
Die Few-shot Variante dazu ist das die Beispiele, die Zwischenschritte sowohl inhaltlich ausformulieren als auch die nötigen mathematische Operationen gliedert.
So wird das LLM angeregt sowohl den Gedankengang welcher zum ergebnis fürt durchzuführen und nicht einfach zu einem Ergebnis wie z. B. 42 zu kommen, weil 42 oft als Beispiel genutzt wird.
Diese Technik wird im Allgemeinen Chain of Thought genannt ~\cite{CoT} paper dargelegt.

\section{Program-aided Language Models}

Die natürliche Fortsetzung von CoT~\cite{CoT} ist das Model anzuregen Mathematische und
logische probleme als programmcode zu formatieren welcher die eigentliche Mathematische operation ausführt.
Dies entfernt die Stärkste schwachstelle welche Zeitgenössische LLMs gegenüber Mathematisch/Lögischen operationen haben.
Solange der Programmcode so aufgebaut ist das er den Gedankengang der Problemlösung aufbaut werden so die
stärken von Chain of Thought Prompts genutzt und die Schwächen für mathematische Operation von LLMs vollständig zu umgehen.

Beim Aufbau von PAL prompt beispielen ist zu beachten,
das die Variablen sich an den grundsatz der Verbalisierung halten und aussagekräfte Namen haben sollten, die möglichst gut im Fließtext der
Aufgabenstellung wiederzufinden sind, damit die Verbindung zu diesen Besonders deutlich wird.

Auch wenn es möglich ist die Schritte einzeln auszuführen und dann mit den ergebnissen weiterzuarbeiten wurde der einfachere anstatt der einmaligen Ausführung.

\section{Experimente}

Die Experimente zur Quantifizierung der Effizienz von PAL wurden auf den Datensätzen welche schon für CoT~\cite{CoT} verwendet wurden ausgeführt.
Dabei wird sowohl die fähigkeit zum Lösen mathematischer Probleme,
abstrakten Problemen und algorithmische Probleme quantifiziert.
Die CoT Beispiele, welche den Lösungsstiele zeigen werden,
dabei einfach von CoT übernommen und in den PAL style einer Antwort übertragen.
Um eine gute vergleichbarkeit zu gewährleisten,
werden dabei die equivalent beispiele in beiden Stilen verwendet, um die Qualität der ergebnisse beider algorithmen unter gleichen Bedingungen zu testen.

So wurden zum Beispiel zufällig Beispiele 3, 6 und 8 aus der Mänge ger beispiele ausgewählt und Probleme wurden sowohl über CoT als auch über PAL mit dieser Kombination ein Problem gelöst.
So kann der Zufallsfaktor wie gut Beispiele zum Problem passen herausgerechnet werden und die Ergebnisse werden vergleichbarer.
Auf die Beispiele und die Fragestellung folgt immer die Forderung das Antworten in Python ausfallen sollen und zwar in dem dargelegten Format.

Neben CoT und PAL wurde auch noch die Direkte frage nach einem Ergebnis probiert um die Qualitativen unterschiede sauber anzeigen zu können.

\subsection{Mathematische Berechnungen}

Zur evaluation des KI models wurden mathematische Aufgaben aus 8 Datensetzen auf Grundschulniveau verwendet.
Experimente konnte gezeigt werden, dass Kommentare und lange beschreibungen zwischen den Codezeilen die ergebnisse nicht verbessern.
Daher sind die Beispiele recht schier.

In Codebeispiel \ref{list:math-prompt-example} ist ein Beispiel aus dem PAL repository, welches zeigt wie ein solcher Mathematischer Prompt aussehen kann.
Das Beispiel wurde dabei nicht übersetzt da unklar ist in wie weit eine Übersetzung die Qualität von generiertem code Schwächt.
Gerade da Code im wesentlichen in Englisch geschrieben wird.

\begin{lstlisting}[language=Python, caption=Prompt Beispiel für mathematische Probleme, label=list:math-prompt-example]
(*@\textbf{Q: Olivia has \$23. She bought five bagels for \$3 each. How much money does she have left?}@*)

# solution in Python:

ddef solution():
    """Olivia has $23. She bought five bagels for $3 each. How much money does she have left?"""
    money_initial = 23
    bagels = 5
    bagel_cost = 3
    money_spent = bagels * bagel_cost
    money_left = money_initial - money_spent
    result = money_left
    return result
\end{lstlisting}

\subsection{Abstraktes denken}

Hier wurden verschiedene Probleme gelöst. Dies ging es um Attribute von Objekten welche Relative zu einander Position sind.
Also um Probleme wie ein Grauer Esel, ein Brauner hund, eine Graue katze und eine Roter Hahn stehen aufeinander. Welche farbe hat das Tier unter dem Hund?
Dann geht es um aussagen wie Verschobene und gefilterte Daten. Im Beispiel gibt es Tabellarische Daten zu Pinguinen welche nach Attributen gefiltered und danach Gezählt werden müssen.
Zuletzt geht es noch um das Verständnisse von Datum und Zeitabstände. Probleme wie Peters Reise sollte 5 Stunden dauern. Er hat aber doppel so lange gebraucht wie geplant.
Wenn er um 23 Uhr angekommen ist. Wann ist er losgefahren?

Zu allen drei Problemstellungen gibt es jeweils separate Prompts im stile von Codebeispiel \ref{list:math-prompt-example}.

\subsection{Algorithmische Aufgaben}

Hier wird sich mit dem Lösen von Deterministische aufgabenstellungen auseinandergesetzt.
Nicht mit allgemeinen sondern spezifischen fragestellungen wie dem Kategorischen zählen von Objekten, oder dem erstellen von Sequenzen nach Anweisungen.

Codebeispiel \ref{list:obj-count} zeigt einen mögliches Beispiel für einen Zählerprompt aussehen kann.

\begin{lstlisting}[language=Python, caption=Prompt Beispiel zum Zählen von Objekten, label=list:obj-count]
(*@\textbf{Q: I have a chair, two potatoes, a cauliflower, a lettuce head, two tables, a
cabbage, two onions, and three fridges. How many vegetables do I have?}@*)

# solution in Python:

def solution():
"""Olivia has $23. She bought five bagels for $3 each. How much money does she have left?"""

def soloution()
    """Counting all vagetables. Chair, table and friges arn't counted."""
    vegetables_to_count = {
        'potato': 2,
        'cauliflower': 1,
        'lettuce head': 1,
        'cabbage': 1,
        'onion': 2
    }
    return sum(vegetables_to_count.values())
\end{lstlisting}

\section{Ergebnisse}

\begin{table*}
\centering
\resizebox{\linewidth}{!}{%
\begin{tabular}{ll|cccccccc}
\hline
Algorithm & LLM          & GSM8K & GSM-HARD & SVAMP & ASDIV & SINGLEEQ & SINGLEOP & ADDSUB & MULTIARITH  \\
\hline
DIRECT    & Codex        & 19.7  & 5.0      & 69.9  & 74.0  & 86.8     & 93.1     & 90.9   & 44.0        \\
CoT       & UL2-20B      & 4.1   & -        & 12.6  & 16.9  & -        & -        & 18.2   & 10.7        \\
CoT       & LAMBDA-137B  & 17.1  & -        & 39.9  & 49.0  & -        & -        & 52.9   & 51.8        \\
CoT       & Codex        & 65.6  & 23.1     & 74.8  & 76.9  & 89.1     & 91.9     & 86.0   & 95.9        \\
CoT       & PaLM-540B    & 56.9  & -        & 79.0  & 73.9  & 92.3     & 94.1     & 91.9   & 94.7        \\
CoT       & Minerva 540B & 58.8  & -        & -     & -     & -        & -        & -      & -           \\
PAL       &              & 72.0  & 61.2     & 79.4  & 79.6  & 96.1     & 94.6     & 92.5   & 99.2        \\
\hline
\end{tabular}
}
\caption{Model performance on various tasks}
\label{tab:model_performance}
\end{table*}

\subsection{Ergebnisse der mathematischen Aufgaben}


\subsection{Ergebnisse der Aufgaben zum Abstrakten Denken}


\subsection{Ergebnisse zu Algorithmischen Aufgaben}



\section{Ausblick}

Prompts im Deutschen? Qualität?

% https://chat.openai.com/share/3a78d9db-9caa-4745-a417-0ef229bd7728

\printbibliography
\end{document}
