Commit 1a6d011e authored by Mischa Buchhofer's avatar Mischa Buchhofer Committed by Patrick Schlindwein
Browse files

#24 Research & Test texts for summarization scoring

parent 016d5722
# Testfälle für die Textzusammenfassung und zu deren Güte
Folgende Links enthalten Einführungen in die Evaluation von maschinellen Textzusammenfassungen:
* https://cs.nyu.edu/~aparikh/lecture14-2017.pdf
### Bewertung des Inhalts
Um den Inhalt einer Zusammenfassung zu bewerten, gibt es zwei gängige Verfahren:
#### ROUGE: Recall-Oriented Understudy for Gisting Evaluation
* **Original Paper:** https://www.aclweb.org/anthology/W04-1013/
* **Python Implementierung:** https://github.com/google-research/google-research/tree/master/rouge
* **PyPi Bibliothek:** https://pypi.org/project/rouge-score/
ROUGE benötigt zur Bewertung
* eine maschinell-generierten Zusammenfassung: **System summary**
* eine von einem Menschen erstellte Zusammenfassung: **Reference summary**
Die Reference Summary wird als perfekte Zusammenfassung angesehen.
##### Recall & Precision
Mit der Reference Summary und der System Summary wird der Recall berechnet:
Recall bezeichnet dabei, wieviel von der Reference Summary in der System Summary enthalten ist. Beispiel, wenn wir den Recall anhand des Vorkommens der Wörter berechnen:
**System Summary:** the cat was found under the bed
**Reference Summary:** the cat was under the bed
**Recall:** 6/6 = 1.0, da alle 6 Wörter aus der Reference Summary in der System Summary enthalten sind.
**Precision:** 6/7 = 0.86, das heißt die Anzahl der "unnötigen" Wörter wirkt sich schlecht auf die Precision aus.
##### ROUGE-N, ROUGE-L & ROUGE-S
**ROUGE-N:** Im oberen Beispiel haben wir ROUGE-N verwendet, genau genommen ROUGE-1. Bei ROUGE-N werden n-Gramme verglichen, im oberen Beispiel war n=1, da wir wortweise verglichen haben. Wenn wir Bigramme('the cat', 'cat was', ...) vergleichen würden, würden wir ROUGE-2 verwenden.
**ROUGE-L:** Bewertet anhand der längsten Übereinstimmung von mehreren Wörtern.
**ROUGE-S:** Bewertet anhand der Reihenfolge, in der die Wörter im Satz angeordnet sind und berücksichtigt dabei Lücken (fehlende Wörter, im Vergleich zur Reference Summary).
##### Verwendung in Python
Unter docs/text-summarization-test-cases/src/rouge/rouge.py ist ein Python Skript abgelegt, welches die Verwendung mit eienr ROUGE-Bibliothek von Google zeigt. Zum Aufrufen des Skripts unter Linux, kann die Datei *run.sh* im selben Verzeichnis verwendet werden. *run.sh* kopiert eine Reference Summary aus dem test_data-Verzeichnis, sowie System Summaries für die Strategien "simple_spacy_summarizer" und "sentence_embedding". Die System Summaries sind unter docs/text-summarization-test-cases/test_data/output zu finden. Das Skript gibt auf der Konsole die ROUGE-Scores für die jeweiligen Zusammenfassungen aus.
**Zum weiteren Verständnis:**
* http://text-analytics101.rxnlp.com/2017/01/how-rouge-works-for-evaluation-of.html
* https://github.com/google-research/google-research/tree/master/rouge
#### BLEU
BLEU scheint vor Allem speziell auf den direkten Vergleich von einem einzelnen Satz ausgelegt zu sein. Bisher "picken" wir uns jedoch immer die "guten" Sätze aus dem Text heraus, kürzen diese aber nicht. Falls wir anfangen Sätze maschinell zu kürzen/zusammenzufassen, sollte BLEU nochmal evaluiert werden.
Ein Beispiel-Python-Skript (bleu.py), welches mehrere Sätze einliest und vergleicht kann trotzdem verwendet werden, wobei die Ergebnisse nochmal evaluiert werden sollten.
BLEU bewertet dabei die Precision einer Zusammenfassung stärker als ROUGE und bewertet auch die Kohärenz(das Zusammenhängen) von Sätzen.
##### Verwendung in Python
Unter docs/text-summarization-test-cases/src/bleu/bleu.py ist ein Python-Skript abgelegt, das äquivalent zur vorher beschriebenen rouge.py arbeiten, jedoch das Scoring mit BLEU vornimmt. Die run.sh im bleu-Ordner kann ebenfalls genutzt werden, um BLEU-Scores für die Testdaten zu berechnen.
**Zum weiteren Verständnis:**
* https://blog.machinetranslation.io/compute-bleu-score/
## Allgemeine Testfälle
* Überprüfung, ob die Textzusammenfassung kürzer ist als der eingegebene Text.
* Prüfung, ob die Rückgabe ein String ist
## Testdaten
Unter **docs/text-summary-test-cases/test_data** sind erste Testdaten abgelegt. Das Verzeichnis ist folgendermaßen strukturiert:
* **test_data:** Enthält Dateien für die Zusammenfassungen generiert werden können.
* **test_data/ref:** Enthält manuell erstellte Zusammenfassungen für die Texte aus test_data. Für die Zusammenfassungen wurden immer ganze Sätze gestrichen und nicht Sätze selbst gekürzt.
* **test_data/output:** Enthält Zusammenfassungen, die maschinell von unseren Strategien erstellt wurden.
## Bewertung der Qualität bei der Zusammenfassung einzelner Sätze
Aktuell "kürzen" wir keine Sätze sondern übernehmen diese vollständig. Sobald wir auch planen Sätze selbst zu kürzen, sollten wir uns mit den folgenden Aspekten zur Bewertung der Qualität hinsichtlich der Zusammenfassung von Sätzen weiter beschäftigen.
Im Paper *Evaluation_Measures_for_Text_Summarization.pdf (3.1 Text Quality Measures)* werden dafür folgende **Aspekte zur Bewertung der Qualität** aufgeführt:
* Grammatikalische Qualität: Der Text sollte keine Nicht-Text-Elemente(z.B. Marker, Verweise) oder Satzzeichenfehler oder inkorrekte Wörter enthalten.
* Keine Redundanzen: Der Text sollte keine redundanten Informationen beinhalten.
* Klare Referenzierungen/Verweise: Die Nomen und Pronomen sollten klar auf Entitäten verweisen, die in der Zusammenfassung enthalten sind. Z.B. sollte das Pronomen *er* jemanden im Kontext der Zusammenfassung meinen.
* Kohärenz und Struktur: Die Zusammenfassung sollte eine gute Struktur haben und die Sätze sollten kohärent sein (also zusammenhängen).
## Sonstiges
Als Startpunkt für weitere Recherchen hinsichtlich der Bewertung mit ROUGE kann dieser(https://stats.stackexchange.com/questions/301626/interpreting-rouge-scores) StackOverflow-Thread verwendet werden, der auf mehrere Paper zu dem Thema verlinkt.
# Example Command: python3 bleu.py ref_summary.txt sys_summary.txt
# Both text files should only have one sentence per line
# The BLEU Score is calculated for each line in ref_summary.txt and sys_summary.
import sys
import sacrebleu
from sacremoses import MosesDetokenizer
md = MosesDetokenizer(lang='de')
target_test = sys.argv[1] # Reference Summary
target_pred = sys.argv[2] # System Summary
# Open the Reference Summary file and detokenize the references
refs = []
with open(target_test, 'r') as test:
refs.append(md.detokenize(test.read()))
# Open the System Summary and detokenize the predictions
preds = []
with open(target_pred, 'r') as pred:
preds.append(md.detokenize(pred.read()))
# Calculate and print the BLEU score
bleu = sacrebleu.corpus_bleu(preds, [refs])
print(bleu.score)
# python3 ./bleu.py ./ref_summary.txt ./sys_summary.txt
# calculate ROUGE-Scores for sentence embedding
echo "BLEU Scores for Sentence Embedding"
cp ../../test_data/ref/wikipedia_alan_turing_ref.txt ./
cp ../../test_data/output/wikipedia_alan_turing_sentence_embedding.txt ./
python3 bleu.py ./wikipedia_alan_turing_ref.txt ./wikipedia_alan_turing_sentence_embedding.txt
rm wikipedia_alan_turing_ref.txt
rm wikipedia_alan_turing_sentence_embedding.txt
# calculate ROUGE-Scores for simple-spacy-summarizer
echo "ROUGE Scores for Simple Spacy Summarizer"
cp ../../test_data/ref/wikipedia_alan_turing_ref.txt ./
cp ../../test_data/output/wikipedia_alan_turing_simple_spacy.txt ./
python3 bleu.py ./wikipedia_alan_turing_ref.txt ./wikipedia_alan_turing_simple_spacy.txt
rm wikipedia_alan_turing_ref.txt
rm wikipedia_alan_turing_simple_spacy.txt
from rouge_score import rouge_scorer
import sys
target_test = sys.argv[1] # Reference Summary
target_pred = sys.argv[2] # System Summary
ref_summary = ""
with open(target_test, 'r') as test:
ref_summary = test.read()
sys_summary = ""
with open(target_pred, 'r') as test:
sys_summary = test.read()
scorer = rouge_scorer.RougeScorer(['rouge1', 'rouge2', 'rougeL'], use_stemmer=True)
scores = scorer.score(
ref_summary, #reference summary
sys_summary) # system summary
# simple Example
# scores = scorer.score(
# 'The quick brown fox jumps over the lazy dog', #reference summary
# 'The quick brown dog jumps on the log.') # system summary
print(scores)
# calculate ROUGE-Scores for sentence embedding
echo "ROUGE Scores for Sentence Embedding"
cp ../../test_data/ref/wikipedia_alan_turing_ref.txt ./
cp ../../test_data/output/wikipedia_alan_turing_sentence_embedding.txt ./
python3 rouge.py ./wikipedia_alan_turing_ref.txt ./wikipedia_alan_turing_sentence_embedding.txt
rm wikipedia_alan_turing_ref.txt
rm wikipedia_alan_turing_sentence_embedding.txt
# calculate ROUGE-Scores for simple-spacy-summarizer
echo "ROUGE Scores for Simple Spacy Summarizer"
cp ../../test_data/ref/wikipedia_alan_turing_ref.txt ./
cp ../../test_data/output/wikipedia_alan_turing_simple_spacy.txt ./
python3 rouge.py ./wikipedia_alan_turing_ref.txt ./wikipedia_alan_turing_simple_spacy.txt
rm wikipedia_alan_turing_ref.txt
rm wikipedia_alan_turing_simple_spacy.txt
Das von ihm entwickelte Berechenbarkeitsmodell der Turingmaschine bildet eines der Fundamente der Theoretischen Informatik. Der Großteil seiner Arbeiten blieb auch nach Kriegsende unter Verschluss. Turing entwickelte 1953 eines der ersten Schachprogramme, dessen Berechnungen er mangels Hardware selbst vornahm. Am Weihnachtsabend, dem 24.
Turing entwickelte 1953 eines der ersten Schachprogramme, dessen Berechnungen er mangels Hardware selbst vornahm. Nach ihm benannt sind der Turing Award, die bedeutendste Auszeichnung in der Informatik, sowie der Turing-Test zum Überprüfen des Vorhandenseins von künstlicher Intelligenz. Im März 1952 wurde Turing wegen seiner Homosexualität, die damals noch als Straftat verfolgt wurde, zur chemischen Kastration verurteilt. Im Jahr 2009 sprach der damalige britische Premierminister Gordon Brown eine offizielle Entschuldigung im Namen der Regierung für die „entsetzliche Behandlung“ Turings aus und würdigte dessen „außerordentliche Verdienste“ während des Krieges;
Die Positivenquote bezeichnet den Anteil der positiven Befunde (Nachweis einer akuten SARS-CoV-2-Infektion) an der Gesamtzahl der durchgeführten Tests. Eine niedrige Quote zeigt, dass sehr sensitiv getestet wird und auch Personen mit leichten Symptomen erfasst werden. Die Positivenquote ist also ein Maßstab für die Breite der Teststrategie.
Die Reproduktionszahl beschreibt, wie viele Menschen eine infizierte Person im Mittel ansteckt. Durch Infektionsschutzmaßnahmen lässt sich die Reproduktionszahl verringern. Wenn R größer 1, dann steigende Anzahl täglicher Neuinfektionen, Wenn R gleich 1, dann konstante Anzahl täglicher Neuinfektionen, Wenn R unter 1, dann sinkende Anzahl täglicher Neuinfektionen.
Alan Mathison Turing war ein britischer Logiker, Mathematiker, Kryptoanalytiker und Informatiker. Er gilt heute als einer der einflussreichsten Theoretiker der frühen Computerentwicklung und Informatik. Turing schuf einen großen Teil der theoretischen Grundlagen für die moderne Informations- und Computertechnologie. Das von ihm entwickelte Berechenbarkeitsmodell der Turingmaschine bildet eines der Fundamente der Theoretischen Informatik. Während des Zweiten Weltkrieges war er maßgeblich an der Entzifferung der mit der deutschen Rotor-Chiffriermaschine Enigma verschlüsselten deutschen Funksprüche beteiligt. Nach ihm benannt sind der Turing Award, die bedeutendste Auszeichnung in der Informatik, sowie der Turing-Test zum Überprüfen des Vorhandenseins von künstlicher Intelligenz. Im März 1952 wurde Turing wegen seiner Homosexualität, die damals noch als Straftat verfolgt wurde, zur chemischen Kastration verurteilt. Turing erkrankte in Folge der Hormonbehandlung an einer Depression und starb etwa zwei Jahre später durch Suizid. Am Weihnachtsabend, dem 24. Dezember 2013, sprach Königin Elisabeth II. postum ein „Royal Pardon“ (Königliche Begnadigung) aus.
Hopper kam Ende der 1940er Jahre auf die Idee, Computerprogramme in einer verständlichen Sprache zu verfassen statt nur mit Einsen und Nullen. Sie hat 1952 den ersten Compiler (A-0) entwickelt und mit der Programmiersprache FLOW-MATIC und dem zugehörigen Compiler (1957) wesentliche Vorarbeiten zur Entwicklung der Programmiersprache COBOL geleistet (Spitzname: „Grandma COBOL“). Durch ihr Beharren auf der Bedeutung einer allgemeinverständlichen Sprache sind Compiler, Interpreter und Programmiersprachen entstanden. Häufig wird der Begriff debugging (deutsch wörtlich: entwanzen; Beheben von Programmfehlern) auf sie zurückgeführt, was nicht ganz exakt ist, denn es war kein Fehler im Programm (Code), also der Software selbst, als 1947 während der Arbeiten an Mark II eine Motte für den Ausfall eines Relais des Computers gesorgt hatte. Grace Hopper kam im Zuge des Millennium-Bugs noch einmal in die Schlagzeilen. Sie hatte in ihren Programmen die Jahresangabe auf zwei Ziffern beschränkt, was im Jahr 1959 von den Entwicklern der Programmiersprache COBOL bei der Erstellung der Cobol-Libraries übernommen wurde, um den seinerzeit teuren Arbeitsspeicher einzusparen. Die Entwickler und Hopper hatten nicht erwartet, dass viele ihrer Funktionen im Jahr 1999 noch unverändert verwendet würden, was jedoch der Fall war.
Die Positivenquote bezeichnet den Anteil der positiven Befunde (Nachweis einer akuten SARS-CoV-2-Infektion) an der Gesamtzahl der durchgeführten Tests. Eine niedrige Quote zeigt, dass sehr sensitiv getestet wird und auch Personen mit leichten Symptomen erfasst werden. Die Positivenquote ist also ein Maßstab für die Breite der Teststrategie. Wichtig ist: es handelt sich bei den Tests nicht (!) um eine repräsentative Stichprobe der Bevölkerung. Würde eine repräsentative Stichprobe getestet, so würde mit steigender Gesamtzahl der durchgeführten Tests auch die Zahl der positiven Befunde in gleichem Maße ansteigen – die Positivenquote bliebe konstant. Die Teststrategie hat aber das Ziel, Infektionen zu erkennen, Infektionsketten zu unterbrechen und die Ausbreitung des Virus zu verlangsamen: Fälle mit stärkeren Symptomen oder eindeutigerem Kontakt zu bereits bestätigten COVID-19-Fällen werden eher getestet als andere. Wird diese Strategie nun in Richtung auf sensitiveres Testung verändert, so dass beispielsweise auch asymptomatische Personen im Umfeld von bestätigten COVID-19 Fällen getestet werden, kommt es typischerweise zu einer sinkenden Positivenquote. Das heißt, es wird zwar ein größerer Anteil der Infektionen nachgewiesen, die Menge der zu testenden Personen steigt aber stärker als die Zahl der positiven Befunde.
Die Reproduktionszahl beschreibt, wie viele Menschen eine infizierte Person im Mittel ansteckt. Am Anfang einer Pandemie gibt es den Startwert R0 (auch: Basisreproduktionszahl), der beschreibt, wie viele Menschen ein Infizierter im Mittel ansteckt, wenn die gesamte Bevölkerung empfänglich für das Virus ist (weil es noch keine Immunität in der Bevölkerung gibt), noch kein Impfstoff verfügbar ist und noch keine Infektionsschutzmaßnahmen getroffen wurden. R0 ist eine Größe, die für eine bestimmte Bevölkerung zu einem bestimmten Zeitpunkt spezifisch ist, es kann somit kein allgemeingültiger Wert angegeben werden. Bei SARS-CoV-2 wurden für die entsprechenden Bevölkerungen R0 zwischen 2,8 und 3,8 geschätzt, das heißt jeder Infizierte steckt im Mittel zwischen drei und vier Personen an. Die so genannten "besorgniserregenden Virusvarianten" weisen wahrscheinlich eine höhere Übertragbarkeit auf. Ohne Gegenmaßnahmen würde die Zahl der Infektionen rasch exponentiell ansteigen und erst dann sinken, wenn ein sehr großer Teil der Bevölkerung eine Infektion bzw. Erkrankung durchgemacht haben, also immun sind und das Virus ihrerseits nicht mehr weiterverbreiten können. Dann ist die so genannte Herdenimmunität erreicht. Dieser Anteil der Bevölkerung, der bis zum Erreichen der Herdenimmunität notwendig ist, ist abhängig vom R0-Wert. Bei einem R0-Wert von 3 liegt diese Schwelle bei 67%, bei einem R0-Wert von 4 bei 75%. Durch Infektionsschutzmaßnahmen lässt sich die Reproduktionszahl verringern. Man spricht von einer zeitabhängigen Reproduktionszahl R(t). Es gilt: Wenn R größer 1, dann steigende Anzahl täglicher Neuinfektionen, Wenn R gleich 1, dann konstante Anzahl täglicher Neuinfektionen, Wenn R unter 1, dann sinkende Anzahl täglicher Neuinfektionen. Bei SARS-CoV-2 ist das Ziel, die Reproduktionszahl stabil bei unter 1 zu halten. Die Schätzung des R-Wertes basiert auf dem sogenannten Nowcasting, einem statistischen Verfahren, das die Entwicklung der Fallzahlen nach Erkrankungsbeginn darstellt und für die letzten Tage auch prognostiziert (mehr Informationen zur Methode, Beispielrechnungen und aktuelle Zahlen unter www.rki.de/covid-19-nowcasting ). Diese Prognose ist mit Unsicherheit behaftet, die sich auch in den zum R-Wert angegebenen Prädiktionsintervallen spiegelt. Nach Eingang weiterer Fallmeldungen am RKI wird der R-Wert im Verlauf für die zurückliegenden Tage angepasst und ggf. nach oben oder unten korrigiert. Im täglichen Situationsbericht werden zwei R-Werte dargestellt. Zum einen der sensitivere 4-Tage-R-Wert. Dieser Wert bildet zeitnah den Trend der Anzahl von Neuerkrankungen ab und kann auf mögliche Trendänderungen hinweisen. Er reagiert jedoch empfindlich auf kurzfristige Änderungen der Fallzahlen – wie sie etwa durch einzelne Ausbruchsgeschehen verursacht werden können - was besonders bei insgesamt kleineren Anzahlen von Neuerkrankungen zu verhältnismäßig großen Schwankungen führen kann. Zusätzlich gibt das RKI ein stabileres 7-Tage-R an, das sich auf einen längeren Zeitraum bezieht und daher weniger tagesaktuellen Schwankungen unterliegt. Das 7-Tage-R bildet Trends zuverlässiger ab, bezieht sich dabei jedoch auf ein Infektionsgeschehen, das etwas länger zurückliegt als beim 4-Tage-R-Wert. Technisch werden beide R-Werte auf der Basis des Nowcasting geschätzt. Das Nowcasting endet am Datum von vor 4 Tagen, da noch keine zuverlässige Aussage zur Anzahl der Neuerkrankungen der letzten 3 Tage gemacht werden kann. Der sensitivere 4-Tage-R-Wert kann geschätzt werden durch Verwendung eines gleitenden 4-Tages-Mittels der durch das Nowcasting geschätzten Anzahl von Neuerkrankungen. Er vergleicht dann die geglättete Anzahl eines Tages mit der entsprechenden Anzahl vor 4 Tagen. Die Infektionen zu diesen Neuerkrankungen liegen nochmal 4 bis 6 Tage davor, das heißt also vor 8 bis 13 Tagen. Der 4-Tage-R-Wert, der heute berichtet wird, bildet also das Infektionsgeschehen vor etwa einer bis zwei Wochen ab. Analog dazu wird das 7-Tage-R durch Verwendung eines gleitenden 7-Tages-Mittel der Nowcasting-Kurve geschätzt. Schwankungen werden dadurch stärker ausgeglichen. Das 7-Tage-R vergleicht den 7-Tages-Mittelwert der Neuerkrankungen eines Tages mit dem 7-Tages-Mittelwert 4 Tage zuvor. Die Infektionen zu den Neuerkrankungen liegen 4 bis 6 Tage davor, das heißt also vor 8 bis 16 Tagen. Das 7-Tage-R bildet somit das Infektionsgeschehen vor etwa einer bis etwas mehr als zwei Wochen ab. Für die Einschätzung der epidemiologischen Lage kommt dem 7-Tage-R-Wert eine höhere Bedeutung zu, da dieser weniger beeinflusst wird von tagesaktuellen Schwankungen der Zahl der gemeldeten und an das RKI übermittelten Fälle. Beispiel: (A) Berechnung R-Wert, der am 14. Mai im Lagebericht veröffentlicht wird. Dieser Wert basiert auf der geschätzten Anzahl von Neuerkrankungen bis zum 10. Mai. Er berechnet sich als Summe der Neuerkrankungen zwischen den 4 Tagen vom 7. bis zum 10. Mai geteilt durch die Summe der Neuerkrankungen der 4 Tage vom 3. bis zum 6. Mai. Er bezieht sich damit auf die Neuerkrankungen vom 7. bis zum 10. Mai, die zugehörigen Infektionen liegen eine Inkubationszeit davor und damit 4 bis 6 Tage davor, das heißt also zwischen dem 1. und 6. Mai. Damit liegt das beschriebene Infektionsgeschehen 8 bis 13 Tage vor dem 14. Mai. (B) Berechnung des 7-Tage-R-Werts, der am 14. Mai im Lagebericht veröffentlicht wird. Dieser Wert basiert auf der geschätzten Anzahl von Neuerkrankungen bis zum 10. Mai. Er berechnet sich als Summe der Neuerkrankungen zwischen den 7 Tagen vom 4. bis zum 10. Mai geteilt durch die Summe der Neuerkrankungen der 7 Tage vom 30. April bis zum 6. Mai. Er bezieht sich damit auf die Neuerkrankungen vom 4. bis zum 10. Mai, die zugehörigen Infektionen liegen eine Inkubationszeit davor und damit 4 bis 6 Tage davor, das heißt also zwischen dem 28. April und dem 6. Mai. Damit liegt das beschriebene Infektionsgeschehen 8 bis 16 Tage vor dem 14. Mai. Unter www.rki.de/covid-19-nowcasting werden Beispielrechnungen und beide R-Werte mit Prädiktionsintervallen als Excel-Tabelle zur Verfügung gestellt und täglich aktualisiert. Stand: 11.03.2021
Alan Mathison Turing war ein britischer Logiker, Mathematiker, Kryptoanalytiker und Informatiker. Er gilt heute als einer der einflussreichsten Theoretiker der frühen Computerentwicklung und Informatik. Turing schuf einen großen Teil der theoretischen Grundlagen für die moderne Informations- und Computertechnologie. Als richtungsweisend erwiesen sich auch seine Beiträge zur theoretischen Biologie. Das von ihm entwickelte Berechenbarkeitsmodell der Turingmaschine bildet eines der Fundamente der Theoretischen Informatik. Während des Zweiten Weltkrieges war er maßgeblich an der Entzifferung der mit der deutschen Rotor-Chiffriermaschine Enigma verschlüsselten deutschen Funksprüche beteiligt. Der Großteil seiner Arbeiten blieb auch nach Kriegsende unter Verschluss. Turing entwickelte 1953 eines der ersten Schachprogramme, dessen Berechnungen er mangels Hardware selbst vornahm. Nach ihm benannt sind der Turing Award, die bedeutendste Auszeichnung in der Informatik, sowie der Turing-Test zum Überprüfen des Vorhandenseins von künstlicher Intelligenz. Im März 1952 wurde Turing wegen seiner Homosexualität, die damals noch als Straftat verfolgt wurde, zur chemischen Kastration verurteilt. Turing erkrankte in Folge der Hormonbehandlung an einer Depression und starb etwa zwei Jahre später durch Suizid. Im Jahr 2009 sprach der damalige britische Premierminister Gordon Brown eine offizielle Entschuldigung im Namen der Regierung für die „entsetzliche Behandlung“ Turings aus und würdigte dessen „außerordentliche Verdienste“ während des Krieges; eine Begnadigung wurde aber noch 2011 trotz einer Petition abgelehnt. Am Weihnachtsabend, dem 24. Dezember 2013, sprach Königin Elisabeth II. postum ein „Royal Pardon“ (Königliche Begnadigung) aus.
Hopper kam Ende der 1940er Jahre auf die Idee, Computerprogramme in einer verständlichen Sprache zu verfassen statt nur mit Einsen und Nullen. Maßgeblich war sie an den wegweisenden Projekten Mark I, Mark II und UNIVAC I beteiligt. Sie hat 1952 den ersten Compiler (A-0) entwickelt und mit der Programmiersprache FLOW-MATIC und dem zugehörigen Compiler (1957) wesentliche Vorarbeiten zur Entwicklung der Programmiersprache COBOL geleistet (Spitzname: „Grandma COBOL“). Durch ihr Beharren auf der Bedeutung einer allgemeinverständlichen Sprache sind Compiler, Interpreter und Programmiersprachen entstanden. Häufig wird der Begriff debugging (deutsch wörtlich: entwanzen; Beheben von Programmfehlern) auf sie zurückgeführt, was nicht ganz exakt ist, denn es war kein Fehler im Programm (Code), also der Software selbst, als 1947 während der Arbeiten an Mark II eine Motte für den Ausfall eines Relais des Computers gesorgt hatte. Ein Techniker im Team von Hopper fand die Motte, Hopper klebte das (tote) Insekt anschließend in ihr Logbuch und kommentierte den Vorfall mit dem Satz: „First actual case of bug being found.“ („Das erste Mal, dass tatsächlich ein Bug gefunden wurde.“ Vgl. Abbildung). Der Begriff „Bug“ im Englischen selbst war damals nicht neu, sondern wurde unter Ingenieuren auch schon im vorangegangenen Jahrhundert verwendet. Grace Hopper kam im Zuge des Millennium-Bugs noch einmal in die Schlagzeilen. Sie hatte in ihren Programmen die Jahresangabe auf zwei Ziffern beschränkt, was im Jahr 1959 von den Entwicklern der Programmiersprache COBOL bei der Erstellung der Cobol-Libraries übernommen wurde, um den seinerzeit teuren Arbeitsspeicher einzusparen. Die Entwickler und Hopper hatten nicht erwartet, dass viele ihrer Funktionen im Jahr 1999 noch unverändert verwendet würden, was jedoch der Fall war.
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment