{"id":165110,"date":"2023-02-02T20:40:19","date_gmt":"2023-02-02T19:40:19","guid":{"rendered":"https:\/\/liora.io\/de\/?p=165110"},"modified":"2026-02-23T09:57:54","modified_gmt":"2026-02-23T08:57:54","slug":"tf-idf","status":"publish","type":"post","link":"https:\/\/liora.io\/de\/tf-idf","title":{"rendered":"K\u00fcnstliche Intelligenz: Zusammenfassung eines Textes mithilfe des TF IDF"},"content":{"rendered":"\n<p><strong>Die zahlreichen Fortschritte in <a href=\"https:\/\/liora.io\/de\/nlp-natural-language-processing-eine-einfuhrung\">NLP<\/a> erm\u00f6glichen es bis heute, es auf zahlreiche Aufgaben anzuwenden: \u00dcbersetzung, Texterzeugung, Zusammenfassung &#8230; In diesem Artikel wollen wir uns mit einem einfachen Aspekt der Zusammenfassung befassen: der extraktiven Zusammenfassung. Dabei handelt es sich nicht um eine zusammenfassende Zusammenfassung, sondern vielmehr um eine Extraktion der interessantesten, bedeutungstragenden S\u00e4tze.<\/strong><\/p>\n\n\n\n<p>Dazu werden wir den Begriff TF-IDF einf\u00fchren, der im Mittelpunkt des Algorithmus zum Zusammenfassen steht, und dann Schritt f\u00fcr Schritt die Schritte untersuchen, die zum Zusammenfassen f\u00fchren.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-was-ist-tf-idf-definition\">Was ist TF-IDF? Definition<\/h3>\n\n\n\n<p><b><i>Term Frequency &#8211; Inverse Document Frequency <\/i><\/b><b>ist ein Ma\u00df, mit dem man aus einer Reihe von Texten die relative Bedeutung der einzelnen W\u00f6rter ablesen kann.<\/b><\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><em>Eine schlechte Idee w\u00e4re es zu glauben, dass ein Wort umso wichtiger in einem Satz ist, je h\u00e4ufiger es vorkommt.<\/em><\/p>\n<\/blockquote>\n\n\n\n<p>Dies w\u00fcrde jedoch dazu f\u00fchren, dass man sich sehr schnell mit Schl\u00fcsselw\u00f6rtern wie &#8222;der&#8220;, &#8222;du&#8220;, &#8222;a&#8220;&#8230; wiederfindet, die alles andere als n\u00fctzlich sind! TF-IDF erm\u00f6glicht es, dies zu korrigieren.<\/p>\n\n\n\n<p>Stelle dir vor, dass wir eine <b>Reihe von Texten <\/b>haben (z. B. alle Werke von Goethe). Und wir wollen die wichtigsten W\u00f6rter aus seinen Werken extrahieren.&nbsp;<\/p>\n\n\n\n<p>TF dient dazu, die relative Bedeutung eines Wortes in einem Dokument zu messen. Sie ist definiert durch die Formel<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\" style=\"margin-top:var(--wp--preset--spacing--columns);margin-bottom:var(--wp--preset--spacing--columns)\"><img decoding=\"async\" src=\"https:\/\/liora.io\/app\/uploads\/2020\/10\/Capture-de\u0301cran-2020-10-08-a\u0300-15.04.26.png\" alt=\"\" \/><\/figure>\n\n\n\n<p><i>wobei {i das Wort und j das Dokument L<\/i><i>j&nbsp;<\/i><i> die Gesamtzahl der W\u00f6rter im Text j Freqi,j die H\u00e4ufigkeit des Wortes i in Dok j<\/i><\/p>\n\n\n\n<p>i das Wort und j das Dokument Lj die Gesamtzahl der W\u00f6rter im Text j Freqi,j die H\u00e4ufigkeit des Wortes .&nbsp;<\/p>\n\n\n\n<p>IDF misst die Bedeutung eines Begriffs nicht anhand seiner H\u00e4ufigkeit in einem bestimmten Dokument, sondern anhand seiner Verteilung und Verwendung in der Gesamtheit der Dokumente.&nbsp; <b>Je mehr Potenzial ein Begriff hat, desto h\u00f6her ist die Inverse Document Frequency<\/b>.<\/p>\n\n\n\n<p>Im Idealfall kommt ein Begriff sehr h\u00e4ufig in nur wenigen Texten vor. W\u00f6rter, die in fast allen Dokumenten oder nur sehr selten vorkommen, sind von geringer Bedeutung. Die Punktzahl erh\u00e4lt man durch folgende Formel:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\" style=\"margin-top:var(--wp--preset--spacing--columns);margin-bottom:var(--wp--preset--spacing--columns)\"><img decoding=\"async\" src=\"https:\/\/liora.io\/app\/uploads\/2020\/10\/Capture-de\u0301cran-2020-10-08-a\u0300-15.08.15.png\" alt=\"\" \/><\/figure>\n\n\n\n<p><i>wobei {N<\/i><i>D<\/i><i> die Gesamtzahl der Dokumente im Korpus f<\/i><i>i<\/i><i> die Anzahl der Dokumente, in denen das Wort i vorkommt&nbsp;&nbsp;<\/i><\/p>\n\n\n\n<p>Wir nehmen den Logarithmus, da bei einem gro\u00dfen Korpus der Wert dieses Terms explodieren kann.<\/p>\n\n\n\n<p>Nachdem die beiden Terme berechnet wurden, berechnet man seinen Wert durch :<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/liora.io\/app\/uploads\/2020\/10\/Capture-de\u0301cran-2020-10-08-a\u0300-15.09.37.png\" alt=\"\" style=\"object-fit:cover\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-loschen-loschen\">L\u00f6schen, l\u00f6schen<\/h3>\n\n\n\n<p>Der arbeits- und zeitaufw\u00e4ndigste Teil des <b>NLP <\/b>ist das <b>Preprocessing <\/b>&#8211; die Aufgabe, <b>unser Dataset so zu bearbeiten, <\/b>dass es effizient ausgewertet werden kann. Wir m\u00fcssen daran denken, den Text so weit wie m\u00f6glich zu harmonisieren, um dem Algorithmus die Arbeit zu erleichtern. Die wichtigsten Schritte f\u00fcr unsere Fallstudie sind :&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Sonderzeichen durch Leerzeichen ersetzen\u00a0<\/li>\n\n\n\n<li>Ersetzen von zus\u00e4tzlichen R\u00e4umen durch einen klassischen Raum<\/li>\n<\/ul>\n\n\n\n<p>Hierzu verwenden wir die <a href=\"\/\">NLTK-Buchhandlung <\/a>und <b>Re<\/b>.&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-code has-xsmall-font-size\"><code>import re\n\ndef clean(text):\n    '''\n    Permet de preprocess text. Attention, text est divis\u00e9 en phrases.\n\n    Exemple : &#091;Fichtre ! dit Gavroche., Voil\u00e0 qu'on me tue mes morts., Une deuxi\u00e8me balle fit \u00e9tinceler le pav\u00e9 \n    \u00e0 c\u00f4t\u00e9 de lui., Une troisi\u00e8me renversa son panier.]\n\n    Input:\n    - text : liste de phrases\n\n    Output:\n    - sentences : liste de phrases preprocess\n    '''\n\n    sentences = &#091;]\n    for phrase in text:\n\n        #remplace les caract\u00e8res sp\u00e9ciaux par des espaces\n        phrase = re.sub(\"&#091;^a-zA-Z]\", ' ', phrase)\n\n        #supprime les espaces inutiles\n        phrase = ' '.join(phrase.split())\n\n        #met en minuscule\n        phrase = phrase.lower()\n\n        sentences.append(phrase)\n\n    return sentences<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-tf-idf-berechnen\">TF-IDF berechnen<\/h3>\n\n\n\n<p>Die Berechnung in der Idee ist einfach, aber man muss dem Code Aufmerksamkeit schenken. Wir m\u00fcssen zun\u00e4chst <b>ein Vokabular <\/b>aus unserem gesamten Korpus <b>erstellen<\/b>. Dann muss man eine sogenannte <b><i>count matrix <\/i><\/b><b>erstellen<\/b>, die <b>f\u00fcr jedes Dokument das Vorkommen jedes Wortes z\u00e4hlt<\/b>.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\" style=\"margin-top:var(--wp--preset--spacing--columns);margin-bottom:var(--wp--preset--spacing--columns)\"><img decoding=\"async\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2022\/11\/unnamed-1.webp\" alt=\"\" \/><figcaption class=\"wp-element-caption\">Count Matrix<\/figcaption><\/figure>\n\n\n\n<p>Nachdem diese Matrix erstellt wurde, kann man den TF-IDF-Score dieser Matrix berechnen.&nbsp;<\/p>\n\n\n\n<p><b>Am Ende wird ein W\u00f6rterbuch erstellt, das jedem Wort den Wert TF-IDF zuordnet.<\/b><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-die-zusammenfassung\">Die Zusammenfassung<\/h3>\n\n\n\n<p>Wir berechnen die Punktzahl f\u00fcr jeden Satz in den Dokumenten basierend auf dem TF-IDF-Wert jedes Wortes, aus dem der Satz besteht.<\/p>\n\n\n\n<pre class=\"wp-block-code has-xsmall-font-size\" style=\"margin-top:var(--wp--preset--spacing--columns);margin-bottom:var(--wp--preset--spacing--columns)\"><code>def score_sent(doc):\n    '''\n    Calcule le score de chaque phrase pour doc\n\n    Input:\n    - doc : liste de phrases\n\n    Output:\n    - sent_score : liste de score de chaque phrase\n    '''\n\n    sent_score = &#091;]\n    for phrase in doc:\n        score = 0\n\n        for mot in phrase:\n            score += tfidf&#091;mot]\n\n        dic = {'sentence': phrase, 'score': score}\n        sent_score.append(dic)\n\n    return sent_score<\/code><\/pre>\n\n\n\n<p>Wenn man die Punktzahl f\u00fcr jeden Satz erhalten hat, kann man eine Zusammenfassung eines Textes erstellen.<\/p>\n\n\n\n<pre class=\"wp-block-code has-xsmall-font-size\" style=\"margin-top:var(--wp--preset--spacing--columns);margin-bottom:var(--wp--preset--spacing--columns)\"><code>def resume(sent_score):\n    '''\n    Trouve les phrases les plus pertinentes dans un texte\n\n    Input:\n    - sent_score : liste de dictionnaires. Chaque dictionnaire contient la phrase et le score\n\n    Output:\n    - resume : str compos\u00e9 des phrases les plus pertinentes\n    '''\n\n    count = 0\n    resume = &#091;]\n\n    # on calcule le score du texte\n    for dico in sent_score:\n        count += dico&#091;'score']\n\n    moyenne = count \/ len(sent_score)\n\n    # on retient les phrases qui ont le plus d'impact\n    for dico in sent_score:\n\n        if dico&#091;'score'] &gt;= moyenne:\n            resume.append(dico&#091;'sentence'])\n\n    return ' '.join(resume)<\/code><\/pre>\n\n\n\n<p>Hier ein Beispiel f\u00fcr das Ergebnis bei einem Text :<\/p>\n\n\n\n<figure class=\"wp-block-image is-resized is-style-not-rounded\" style=\"margin-top:var(--wp--preset--spacing--columns);margin-bottom:var(--wp--preset--spacing--columns)\"><img decoding=\"async\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2022\/11\/unnamed-1-2.webp\" alt=\"\" style=\"width:1000px;height:auto\" \/><\/figure>\n\n\n\n<p>Die Zusammenfassung ist bereits von angemessener Qualit\u00e4t. Wie man sieht, brauchten wir nur ein paar Funktionen und durften uns nicht im Code verirren, um die Punktzahl f\u00fcr jedes Wort zu berechnen. Es ist alles eine Frage der Organisation.<\/p>\n\n\n\n<p>Dennoch bleibt es eine recht klassische Zusammenfassung. Mit neuen Methoden wie <b>Transformers <\/b>oder klassischeren Methoden wie <b>n-gram lassen sich <\/b><i>echte <\/i>Zusammenfassungen erstellen.&nbsp;<\/p>\n\n\n\n<p>Allerdings wird es immer komplizierter und erfordert einen echten Hintergrund in Bezug auf Wissen und Anwendungen. Unser Kurs hat k\u00fcrzlich Kurse zu diesen neuen Methoden eingef\u00fchrt, damit die Teilnehmer ihre Projekte mit gr\u00f6\u00dferem Ehrgeiz umsetzen k\u00f6nnen.&nbsp;<\/p>\n\n\n\n<div class=\"wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-a89b3969 wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/liora.io\/de\/weiterbildung\/\">Entdecken Sie unsere Schulungen<\/a><\/div>\n<\/div>\n\n\n\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"FAQPage\",\n  \"mainEntity\": [\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Was ist TF-IDF? Definition\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"TF-IDF (Term Frequency \u2013 Inverse Document Frequency) ist ein Ma\u00df zur Bestimmung der relativen Bedeutung von W\u00f6rtern in einer Textsammlung. TF misst die H\u00e4ufigkeit eines Wortes in einem Dokument. IDF misst die Bedeutung eines Begriffs anhand seiner Verteilung \u00fcber alle Dokumente (idealerweise kommt ein Begriff h\u00e4ufig in wenigen Texten vor). Der TF-IDF-Wert ist das Produkt beider Ma\u00dfe und korrigiert die Verzerrung durch h\u00e4ufige aber unbedeutende W\u00f6rter wie 'der', 'die', 'das'.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"L\u00f6schen, l\u00f6schen\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Das Preprocessing ist der aufwendigste Teil im NLP. Wichtige Schritte f\u00fcr die Textbereinigung: Sonderzeichen durch Leerzeichen ersetzen, \u00fcberfl\u00fcssige Leerzeichen entfernen, Text in Kleinbuchstaben umwandeln. Dies wird mit der NLTK-Bibliothek und regul\u00e4ren Ausdr\u00fccken (re) umgesetzt, um dem Algorithmus die Arbeit zu erleichtern.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"TF-IDF berechnen\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Die Berechnung erfolgt in drei Schritten: 1. Vokabular aus dem gesamten Korpus erstellen, 2. Count-Matrix erstellen (f\u00fcr jedes Dokument die Worth\u00e4ufigkeiten z\u00e4hlen), 3. TF-IDF-Score der Matrix berechnen. Das Ergebnis ist ein W\u00f6rterbuch, das jedem Wort seinen TF-IDF-Wert zuordnet.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Die Zusammenfassung\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"F\u00fcr jeden Satz wird ein Score basierend auf den TF-IDF-Werten seiner W\u00f6rter berechnet. Die relevantesten S\u00e4tze (mit Score \u00fcber dem Durchschnitt) werden f\u00fcr die extraktive Zusammenfassung ausgew\u00e4hlt. Das Ergebnis ist eine Zusammenfassung angemessener Qualit\u00e4t. F\u00fcr echte Textzusammenfassungen werden modernere Methoden wie Transformers oder n-gram verwendet, die jedoch komplexer sind und fundierte Kenntnisse erfordern.\"\n      }\n    }\n  ]\n}\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Die zahlreichen Fortschritte in NLP erm\u00f6glichen es bis heute, es auf zahlreiche Aufgaben anzuwenden: \u00dcbersetzung, Texterzeugung, Zusammenfassung &#8230; In diesem Artikel wollen wir uns mit einem einfachen Aspekt der Zusammenfassung befassen: der extraktiven Zusammenfassung. Dabei handelt es sich nicht um eine zusammenfassende Zusammenfassung, sondern vielmehr um eine Extraktion der interessantesten, bedeutungstragenden S\u00e4tze. Dazu werden wir [&hellip;]<\/p>\n","protected":false},"author":47,"featured_media":165111,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"editor_notices":[],"footnotes":""},"categories":[2472],"class_list":["post-165110","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-data-ki"],"acf":[],"_links":{"self":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts\/165110","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/users\/47"}],"replies":[{"embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/comments?post=165110"}],"version-history":[{"count":4,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts\/165110\/revisions"}],"predecessor-version":[{"id":219339,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts\/165110\/revisions\/219339"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/media\/165111"}],"wp:attachment":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/media?parent=165110"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/categories?post=165110"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}