{"id":64830,"date":"2025-06-03T06:00:00","date_gmt":"2025-06-03T04:00:00","guid":{"rendered":"https:\/\/www.herr-rau.de\/wordpress\/?p=64830"},"modified":"2026-02-12T11:40:15","modified_gmt":"2026-02-12T10:40:15","slug":"llm-grundlagen-teil-3-ueber-embedding","status":"publish","type":"post","link":"https:\/\/www.herr-rau.de\/wordpress\/2025\/06\/llm-grundlagen-teil-3-ueber-embedding.htm","title":{"rendered":"LLM Grundlagen, Teil 3: \u00dcber Embedding"},"content":{"rendered":"<div style='text-align:right;'><small>(<a href='https:\/\/www.herr-rau.de\/wordpress\/2025\/06\/llm-grundlagen-teil-3-ueber-embedding.htm#comments'>7 Kommentare.<\/a>)<\/small> <\/div>\n<p><em><a href=\"https:\/\/www.herr-rau.de\/wordpress\/2025\/05\/llm-grundlagen-teil-2-ueber-token.htm\">Fortsetzung von hier.<\/a> Es geht immer noch nicht um das Erzeugen von Text, sondern um das Ergebnis einer Analyse von Text. Aber darin steckt schon so viel Magie, dass ich das bereits spannend finde. Der Blogeintrag ist bist auf den technischen Hintergrund am Ende hoffentlich leicht zu verstehen, aber er ist sehr lang. Ich habe Frau Rau gefragt, ob ich ihn auf zwei Eintr\u00e4ge verteilen soll, aber sie meinte nein, also bleibt er zusammen.<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. Embedding: Einf\u00fchrung des Begriffs<\/h2>\n\n\n\n<p>Embedding halte ich f\u00fcr einen ganz zentralen Begriff, um zu verstehen, was bei der automatischen Verarbeitung von Inhalten geschieht.<\/p>\n\n\n\n<p>Nach den N-Grammen waren feste Wort-Embedding-Verfahren die hei\u00dfe Sache bis etwa 2017. Moderne LLM arbeiten auch mit Embedding, aber noch mit Erg\u00e4nzungen; mehr dazu ab dem n\u00e4chsten Mal. Vielleicht.<\/p>\n\n\n\n<p>Embedding hei\u00dft allgemein: Ein Wort (oder Token, oder ein ganzer Text, oder ein Bild) wird in eine Zahlenreihe umgewandelt. Zahlenreihe: das hei\u00dft fachsprachlich Vektor. Ein Vektor hat eine L\u00e4nge, aber vor allem hat er eine bestimmte Anzahl an Zahlen, das hei\u00dft, er befindet sich in einem Raum einer bestimmten Dimension. Vektoren in einem zwei- oder dreidimensionale Raum aus zwei beziehungsweise drei Zahlen und man kennt sie vielleicht aus der Schulmathematik; wir besch\u00e4ftigen uns hier eher mit Vektoren in R\u00e4umen mit 300 Dimensionen, also 300 Zahlen. Das englische Wort &#8222;year&#8220; kann zum Beispiel durch folgenden Vektor repr\u00e4sentiert werden:<\/p>\n\n\n\n<p><code>[-0.025786, -0.042872, 0.017601, 0.063622, -0.103329, 0.023634, 0.054678, 0.040233, -0.051739, -0.064657, 0.023516, 0.033084, 0.090718, 0.051757, -0.013683, -0.097553, 0.067920, -0.079240, -0.076960, 0.099556, -0.005586, 0.087658, 0.021216, -0.030638, 0.090439, -0.043562, 0.046424, -0.070301, -0.073923, -0.085469, -0.028303, -0.072659, 0.055611, -0.092044, 0.070280, -0.034189, 0.078083, 0.056718, 0.015751, -0.049231, 0.043795, 0.046121, -0.010422, -0.021453, -0.048846, -0.048375, 0.018076, -0.139829, -0.001987, 0.070634, -0.099343, -0.025047, -0.002585, 0.108708, -0.068641, 0.086222, 0.025860, -0.030051, 0.036753, -0.005112, -0.008837, -0.009897, 0.013929, 0.026580, -0.013089, 0.020542, -0.060059, 0.062302, 0.095074, 0.023722, 0.034571, -0.059392, -0.000980, -0.000784, -0.061180, -0.069526, -0.018580, -0.118761, -0.012066, -0.083601, -0.028266, 0.088769, -0.012761, 0.118279, -0.012628, 0.020282, 0.053124, -0.029784, -0.087240, 0.028490, -0.002649, -0.028264, 0.074022, 0.044470, -0.046292, 0.062624, 0.027311, 0.075023, -0.005248, 0.025290, 0.033313, -0.107309, 0.042446, -0.011116, 0.009652, 0.060412, 0.024261, 0.098144, -0.125430, -0.014803, -0.042813, -0.010587, -0.018827, -0.033675, 0.056361, -0.035354, -0.044778, -0.009897, 0.011386, 0.035792, -0.002038, -0.031330, -0.009778, -0.001057, 0.028198, -0.000704, 0.023876, 0.065053, 0.046788, 0.018013, -0.047985, -0.039999, -0.027081, 0.060187, 0.064933, -0.061414, 0.052294, -0.003506, 0.099521, -0.025471, 0.085860, -0.024881, 0.078323, -0.131082, 0.120399, -0.000521, -0.042779, -0.023151, 0.014987, -0.048307, -0.023339, 0.023993, -0.050328, -0.055788, -0.087864, -0.023055, 0.031015, 0.043504, -0.011933, -0.047324, -0.022298, -0.056046, -0.028270, -0.041753, 0.022536, 0.032980, -0.093301, 0.021712, 0.044414, -0.027758, -0.076788, -0.021686, -0.067725, -0.004186, -0.008080, 0.034993, -0.039559, -0.003645, -0.002335, -0.009184, 0.008698, -0.002859, -0.058528, 0.083969, 0.069957, -0.043843, 0.042897, -0.064762, 0.021673, 0.053250, -0.074874, -0.086903, -0.095449, -0.005371, 0.064299, 0.096931, 0.043711, 0.032208, -0.019445, 0.214736, 0.055460, -0.070967, 0.015095, 0.056014, -0.037825, 0.039392, -0.034608, 0.032038, 0.103250, 0.029820, 0.038454, -0.064354, -0.128182, 0.016288, 0.015339, 0.044159, -0.061186, -0.037290, -0.094278, 0.066222, -0.148060, -0.024454, -0.018784, 0.034114, 0.040694, -0.008600, -0.029586, -0.024523, 0.011347, 0.001708, -0.033704, -0.051059, -0.074759, -0.042689, -0.059257, -0.045433, 0.094440, -0.126478, 0.037676, 0.067256, 0.119020, 0.027962, 0.120834, 0.033210, -0.025278, -0.052161, 0.016049, -0.021046, 0.055670, -0.075887, -0.040669, -0.074454, -0.038057, 0.063454, 0.033169, 0.035221, 0.025169, 0.037108, 0.003785, 0.011474, -0.060609, -0.065979, -0.102240, 0.042050, 0.028562, 0.032571, -0.039410, -0.109837, -0.060135, 0.050419, 0.011264, -0.015715, 0.044828, -0.046791, 0.101858, -0.035604, -0.024885, -0.064720, 0.043942, 0.020953, -0.014011, -0.124052, -0.061068, -0.065812, -0.122686, -0.060203, 0.046817, -0.069997, 0.047701, -0.007218, 0.028453, -0.080661, -0.007487, 0.048209, -0.123690, 0.014074, 0.043732, -0.022902, -0.022820, 0.035935]<\/code><\/p>\n\n\n\n<p>(Dieses Embedding enstand auf Grundlage des British National Corpus. Auf diese gesammelten Texte wurde ein Algorithmus angewendet, der jedem Wort im Korpus einen Vektor aus 300 Zahlen zuweist. Andere Verfahren nutzen k\u00fcrzere oder l\u00e4ngere Vektoren, und das gleiche Verfahren kann nat\u00fcrlich zu unterschiedlichen Ergebnissen f\u00fchren, wenn man es auf Grundlage unterschiedlicher Textsammlungen anwendet.)<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2. Warum Embedding, allgemein?<\/h2>\n\n\n\n<p>Erst einmal macht ein Embedding aus Nicht-Zahlen Zahlen, und mit Zahlen l\u00e4sst sich besser rechnen. Aber eigentlich besteht ein Bild, besteht ein Text ja bereits aus Zahlen. Die Zeichenkette &#8222;year&#8220; hat zum Beispiel ein \u00c4quivalent aus vier Zahlenwerten, f\u00fcr jeden Buchstaben einen. Warum dann das Umwandeln in 300 andere Zahlen?<\/p>\n\n\n\n<p>F\u00fcr einen Rechner bedeutet n\u00e4mlich y-e-a-r nicht viel, egal ob in Buchstaben oder Zahlen, f\u00fcr einen Mensch dagegen: zw\u00f6lf Monate, und Fr\u00fchling, Sommer, Herbst und Winter; Jahrestage, 365 Tage und 52 Wochen, und Schaltjahre, und Neujahr und <em>happy new year<\/em>, und Lichtjahr, und Substantiv und regelm\u00e4\u00dfiger Plural und <em>another year old and deeper in debt<\/em> und so viel mehr. Ein Teil dieser Information steckt in den 300 Zahlenwerten des Embeddings.<\/p>\n\n\n\n<p>Ein Bild von 319 x 239 Pixeln Gr\u00f6\u00dfe mit einer Katze darauf besteht aus 76.241 Zahlenwerten (jeweils mit 2<sup>24<\/sup> M\u00f6glichkeiten). Wenn man ein Embedding benutzt, dass viele wesentliche Aspekte des Originals beh\u00e4lt und andere wegl\u00e4sst, daf\u00fcr vielleicht sogar semantische Inhalte erg\u00e4nzt, hat man eine Reihe von vielleicht 1000 Zahlenwerten (jeweils mit 2<sup>32?<\/sup> M\u00f6glichkeiten), mit denen man viel mehr anfangen kann als mit den 76.241 Rohdaten.<\/p>\n\n\n\n<p>Ein Embedding ist also manchmal k\u00fcrzer, manchmal l\u00e4nger als das Element, aus dem es entsteht, je nachdem, wozu man es braucht. Mit einem k\u00fcrzeren Embedding l\u00e4sst sich leichter rechnen und arbeiten und es enth\u00e4lt weniger, aber wesentlichere Information. Ein l\u00e4ngeres Embedding hingegen enth\u00e4lt zus\u00e4tzliche Information.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3. Beispiele f\u00fcr Wort-Embeddings<\/h2>\n\n\n\n<p>Auf diese Seite kann man sich verschiedene derart erzeugte Embedding-Sammlungen herunterladen: <a href=\"https:\/\/vectors.nlpl.eu\/repository\/\">https:\/\/vectors.nlpl.eu\/repository\/<\/a> Es sind gro\u00dfe Dateien; hier ein paar Screenshots. Welcher Korpus dabei genau verwendet wurde und welcher Embedding-Algorithmus dazu, steht auf der verlinkten Seite,<\/p>\n\n\n\n<p>Trainiert auf Altgriechisch-Korpus, Vektordimension 100, Ausschnitt:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_embedding_altgriechisch_100-scaled.png\"><img loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"323\" src=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_embedding_altgriechisch_100-700x323.png\" alt=\"\" class=\"wp-image-64852\" srcset=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_embedding_altgriechisch_100-700x323.png 700w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_embedding_altgriechisch_100-300x138.png 300w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_embedding_altgriechisch_100-150x69.png 150w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_embedding_altgriechisch_100-1536x708.png 1536w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_embedding_altgriechisch_100-2048x944.png 2048w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/a><\/figure>\n\n\n\n<p>Trainiert auf der englischen Wikipedia, Embedding-Dimension 300, Ausschnitt:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_embedding_englisch_300_wikipedia2021.png\"><img loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"344\" src=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_embedding_englisch_300_wikipedia2021-700x344.png\" alt=\"\" class=\"wp-image-64851\" srcset=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_embedding_englisch_300_wikipedia2021-700x344.png 700w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_embedding_englisch_300_wikipedia2021-300x147.png 300w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_embedding_englisch_300_wikipedia2021-150x74.png 150w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_embedding_englisch_300_wikipedia2021-1536x754.png 1536w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_embedding_englisch_300_wikipedia2021-2048x1006.png 2048w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/a><\/figure>\n\n\n\n<p>Was bedeuten die einzelnen Zahlen? Das kann man nicht wirklich sagen. <em>Zusammen <\/em>bedeuten sie jedenfalls etwas, wenn sie gut gew\u00e4hlt sind.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">4. Bedeutung solcher Embeddings<\/h2>\n\n\n\n<p>Es stellt sich n\u00e4mlich heraus, dass in diesen Embeddings ganz sch\u00f6n viel Bedeutung steckt, und das ist kein Zufall, sondern genau die Absicht dahinter.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">4.1 W\u00f6rter, deren Vektoren n\u00e4her beieinander liegen, sind sich \u00e4hnlicher als entferntere.<\/h4>\n\n\n\n<p>Was <em>N\u00e4he <\/em>hier hei\u00dft, sieht man bei zweidimensionalen Vektoren, wie sie einem vielleicht in der Schule begenet sind:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"702\" src=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_2D_Cartesian_entfernungen.excalidraw-700x702.png\" alt=\"\" class=\"wp-image-64853\" srcset=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_2D_Cartesian_entfernungen.excalidraw-700x702.png 700w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_2D_Cartesian_entfernungen.excalidraw-300x300.png 300w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_2D_Cartesian_entfernungen.excalidraw-150x150.png 150w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_2D_Cartesian_entfernungen.excalidraw.png 871w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/figure>\n\n\n\n<p>Der Punkt K (1;5) ist n\u00e4her bei Q (4;3) als bei W (3;-1), das kann man mit dem Geodreieck leicht messen. (Unterschied Punkt, Vektor, Tupel: hier nicht wichtig.) Im dreidimensionalen Raum kann man sich die Entfernung auch noch leicht vorstellen und auch noch mit einem Geodreieck messen. Im 300-dimensionalen Raum geht das eigentlich genauso und ist auch nicht wirklich schwer zu berechnen, nur eben schwer vorzustellen. &#8211; Neben der Geodreieck-Entfernung (hei\u00dft technisch: euklidischer Abstand) gibt es \u00fcbrigens auch noch die Manhattan-Entfernung und die Cosinus-Entfernung, wir ignorieren das mal als Feinheiten.<\/p>\n\n\n\n<p>(Cosinus-Entfernung oder -\u00c4hnlichkeit: Das ist das Skalarprodukt der beiden Vektoren,  h\u00f6here Zahlen bedeuten h\u00f6here \u00c4hnlichkeit, bei normierter Vektorl\u00e4nge zwischen -1 und 1. Glaube ich.)<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">4.2 Veranschaulichung von Entfernungen<\/h4>\n\n\n\n<p>Die folgenden Bilder zeigen die Entfernungen von Embeddings voneinander. Ich habe dazu in Orange einige wenige englische W\u00f6rter eingegeben und mir die vorgefertigten fastText-Embeddings dazu geben lassen. Vorgefertigt hei\u00dft: die sind auf Grundlage irgendeines seri\u00f6sen englischen Korpus entstanden, also <em>nicht<\/em> neu und spontan von mir und Orange berechnet worden. Das ist wichtig, weil es sp\u00e4ter um anderes gehen wird.<\/p>\n\n\n\n<p>Die Bilder zeigen nicht nur die Entfernung der Embeddings voneinander, sondern versuchen auch sonst etwas Information zu bewahren. Wenn es wirklich nur um die Entfernung gingen, reichte eine Entfernungsmatrix aus. Die 300 Dimensionen der Embeddings kann man nat\u00fcrlich nur sehr, sehr teilweise in die Grafik retten. Auch daf\u00fcr gibt es einen Algorithmus. Hier die W\u00f6rter: auf 2 reduziert, wobei versucht wird, die Entfernung der Vektoren voneinander zu bewahren.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_orange_words_entfernungen1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"476\" src=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_orange_words_entfernungen1-700x476.png\" alt=\"\" class=\"wp-image-64855\" srcset=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_orange_words_entfernungen1-700x476.png 700w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_orange_words_entfernungen1-300x204.png 300w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_orange_words_entfernungen1-150x102.png 150w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_orange_words_entfernungen1.png 1148w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/a><\/figure>\n\n\n\n<p>Wir sehen: Die W\u00f6rter <em>king\/queen, cat\/dog, boy\/girl, man\/woman<\/em> sind relativ nah beieinander, auch die Gruppe <em>car\/bicycle\/motorcycle<\/em> bildet eine Gruppe. Irgendwo in den Vektoren steckt also, dass <em>queen<\/em> und <em>king<\/em> mehr miteinander zu tun haben als <em>king<\/em> und <em>car.<\/em><\/p>\n\n\n\n<p>Au\u00dferdem sehen wir, dass <em>man<\/em> ein wenig links unten von <em>woman<\/em> angeordnet ist, und dass das f\u00fcr die anderen Paare \u00e4hnlich gilt. &#8222;Unten&#8220; und &#8222;links&#8220; sind willk\u00fcrlich, aber der Algorithmus hat dazu gef\u00fchrt, dass da ein Systen erkennbar wird. Wenn das ein guter Algorithmus war, ist das kein Zufall.<\/p>\n\n\n\n<p>Ich habe die W\u00f6rter <em>brother\/sister, son\/daughter, witch\/wizard<\/em> und <em>royal<\/em> erg\u00e4nzt und geschaut, was dabei herauskommt:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_orange_words_entfernungen3.png\"><img loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"476\" src=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_orange_words_entfernungen3-700x476.png\" alt=\"\" class=\"wp-image-64857\" srcset=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_orange_words_entfernungen3-700x476.png 700w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_orange_words_entfernungen3-300x204.png 300w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_orange_words_entfernungen3-150x102.png 150w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_orange_words_entfernungen3.png 1148w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/a><\/figure>\n\n\n\n<p>Hm. Die Beziehungen zwischen den Paaren ist fast durchgehend erhalten, <em>man\/woman<\/em> sind etwas weiter entfernt, vielleicht um die Beziehungen zu <em>boy\/girl<\/em> mit darstellen zu <em>Witch\/wizard<\/em> ebenso &#8211; nur <em>son<\/em> und <em>daughter<\/em> sind weit entfernt. <em>Daughter<\/em> w\u00fcrde ja noch passen, nahe bei <em>sister,<\/em> was gegen\u00fcber von <em>brother<\/em> &#8211; aber <em>son<\/em> steht eher bei <em>boy\/man, car\/dog.<\/em> Ein Artefakt des Abbildungsalgorithmus oder des Embeddings, oder hat das mit der tats\u00e4chlichen Verwendung zu tun?<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">4.3 Die 10 n\u00e4chsten Nachbarn von\u2026<\/h4>\n\n\n\n<p>Auf der Webseite <a href=\"https:\/\/projector.tensorflow.org\/\">https:\/\/projector.tensorflow.org\/<\/a> kann man eigene Vektorensammlungen hochladen oder aus einigen vorgefertigten ausw\u00e4hlen, insbesondere sind Wort-Embeddings dabei. Da kann man sich aus dem (vorhandenen, eingeschr\u00e4nkten) Wortschatz zum Beispiel die 10 n\u00e4chsten Nachbarn von <em>queen<\/em> anzeigen, Vektordimension 200:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_tensorflow_projector_queen.png\"><img loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"503\" src=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_tensorflow_projector_queen-700x503.png\" alt=\"\" class=\"wp-image-64866\" srcset=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_tensorflow_projector_queen-700x503.png 700w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_tensorflow_projector_queen-300x216.png 300w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_tensorflow_projector_queen-150x108.png 150w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_tensorflow_projector_queen.png 1265w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/a><\/figure>\n\n\n\n<p>Die n\u00e4chsten Nachbarn von <em>queen<\/em> sind Kollokationen, Antonyme oder Begriffspaare, semantisch verwandte Adjektive, auch Synonyme oder Oberbegriffe. Es sind W\u00f6rter, die in einem Texte zusammen mit <em>queen<\/em> auftauchen oder auch stattdessen. <\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>elizabeth<br>anne<br>king<br>mary<br>princess<br>catherine<br>victoria<br>royal<br>scotland<br>henry<br>england<br>marie<br>duke<br>crown<br>empress<br>vii<br>monarch<br>scots<br>viii<br>edward<br>regent<br>kingdom<br>lady<br>kings<\/p>\n<\/blockquote>\n\n\n\n<p>Ich habe auf der oben verlinkten Projektor-Seite auch mal einen eigene kleinen Datensatz hochgeladen, dann ist das \u00fcbersichtlicher, es sind die gleichen W\u00f6rter wie oben. Im Screenshot kann man anders als auf der Seite selber das ganze nicht drehen und quasi dreidimensional betrachten:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_tensorflow_projector_queen2.png\"><img loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"415\" src=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_tensorflow_projector_queen2-700x415.png\" alt=\"\" class=\"wp-image-64872\" srcset=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_tensorflow_projector_queen2-700x415.png 700w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_tensorflow_projector_queen2-300x178.png 300w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_tensorflow_projector_queen2-150x89.png 150w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_tensorflow_projector_queen2-1536x910.png 1536w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_tensorflow_projector_queen2.png 1573w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/a><\/figure>\n\n\n\n<p>Auch hier bleiben die Wortpaare beisammen. Die Vektoren dazu habe ich wieder aus dem Embedding anhand des British National Corpus.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">4.4 King &#8211; Man + Woman = Queen?<\/h4>\n\n\n\n<p>Das ist ein ber\u00fchmtes Beispiel, man begegnet ihm immer wieder. Manche haben sich die Details angeschaut, und es stimmt wohl nicht <em>ganz<\/em>, oder ist jedenfalls nicht ganz so einfach (<a href=\"https:\/\/blog.esciencecenter.nl\/king-man-woman-king-9a7fd2935a85\">Link dazu<\/a>). Dennoch ist an diese Rechnung etwas dran:<\/p>\n\n\n\n<p><code>vektor(king) - vektor(man) + vektor(woman) \u2248 vektor(queen)<\/code><\/p>\n\n\n\n<p>Wenn ich vom Vektor f\u00fcr &#8222;king&#8220; den Vektor f\u00fcr &#8222;man&#8220; abziehe und den Vektor f\u00fcr &#8222;woman&#8220; addiere, lande ich zumindest in der N\u00e4he des Vektors f\u00fcr &#8222;queen&#8220;. Anders gesagt: &#8222;king &#8211; man = queen &#8211; woman&#8220;, oder &#8222;king&#8220; verh\u00e4lt sich zu &#8222;man&#8220; wie &#8222;queen&#8220; zu &#8222;woman&#8220;.<\/p>\n\n\n\n<p>Hier wieder das Beispiel von oben im 2-dimensionalen Raum:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"702\" src=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_2D_Cartesian_entfernungen.excalidraw-700x702.png\" alt=\"\" class=\"wp-image-64853\" srcset=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_2D_Cartesian_entfernungen.excalidraw-700x702.png 700w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_2D_Cartesian_entfernungen.excalidraw-300x300.png 300w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_2D_Cartesian_entfernungen.excalidraw-150x150.png 150w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_2D_Cartesian_entfernungen.excalidraw.png 871w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/figure>\n\n\n\n<p>\u00c4hnliche W\u00f6rter haben \u00e4hnliche Embeddings, und dann kommt so etwas heraus. Ich glaube, ich habe irgendwann mal die Rechnung mit <em>king, man, queen, woman<\/em> im 300-dimensionalen Raum gemacht (nicht schwer, die Addition und Subtraktion macht das Tabellenkalkulationsprogramm), aber kein tats\u00e4chlich aussagekr\u00e4ftiges Ergebnis erhalten; meine Kenntnisse der Vektorrechnung sind aber begrenzt. Raum f\u00fcr Experimente.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">4.5 Vektoren f\u00fcr verschiedene Sprachen<\/h4>\n\n\n\n<p>Es gibt auch Modelle, die nach diesem Prinzip mit Texten verschiedener Sprachen trainiert wurden. Dann sind die die Vektoren von <em>K\u00f6nigin <\/em>und <em>queen<\/em> benachbart. Das kann beim automatischen \u00dcbersetzen helfen oder beim Suchen in mehrsprachigen Dokumentens\u00e4tzen. Wie viel das wirklich genutzt wird, wei\u00df ich nicht.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">5. Embedding von ganzen Texten<\/h2>\n\n\n\n<p>Embedding hei\u00dft, einem Objekt eine Reihe von Zahlenwerten (einen Vektor) zuzuweisen. Auch ein ganzes Dokument kann man in einen Vektor umformen. Das Ziel ist immer: die relevanten und typischen Merkmale herausarbeiten.<\/p>\n\n\n\n<p>Wenn ich etwa 50 Perry-Rhodan-Hefte vergleichen m\u00f6chte (<a href=\"https:\/\/www.herr-rau.de\/wordpress\/2024\/04\/perry-rhodan-nr-50-99-mit-orange-analysiert.htm\">Blogeintrag<\/a>, und Bild unten), etwa um automatisiert erkennen zu k\u00f6nnen, welches Heft von welchem Autor geschrieben wurde, kann ich die Texte Wort f\u00fcr Wort vergleichen. Aber wie hilft mir das bei der Aufgabe?<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/orange_perry050-099_setup.png\"><img loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"291\" src=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/orange_perry050-099_setup-700x291.png\" alt=\"\" class=\"wp-image-61651\" srcset=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/orange_perry050-099_setup-700x291.png 700w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/orange_perry050-099_setup-300x125.png 300w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/orange_perry050-099_setup-150x62.png 150w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/orange_perry050-099_setup-1536x639.png 1536w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/orange_perry050-099_setup.png 1795w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/a><\/figure>\n\n\n\n<p>Weil ich meine Pappenheimer kenne, kann ich ein eigenes Embedding erfinden, auch wenn das selbst mittelfristig <em>keine<\/em> gute Idee ist. Sagen wir, mein Vektor besteht aus: der prozentuale H\u00e4ufigkeit des Erscheinens der Zeichenkette &#8222;Gucky&#8220;, vielleicht der durchschnittlichen Wort- oder Satzl\u00e4nge, der H\u00e4ufigkeit von Semikolons dazu, der H\u00e4ufigkeit von &#8222;Orgel&#8220; oder &#8222;orgelte&#8220;? Dann muss ich f\u00fcr die automatische Zuordnung eines neuen Textes zu einem Autor eben nicht den Gesamttext heranziehen, sondern nur die dergestalt aus ihm gewonnenen Werte, das Dokumentembedding. Ein Beispiel- Embedding f\u00fcr zwei Hefte s\u00e4he dann so aus:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Author    Atlan Gucky Thora Perry Orgel %Unique WordLength Punctuation\nKurt Mahr     0     0     0     9     0  0.1465      5.304        5049\nK.H. Scheer  46    16     0    18     2  0.2054      5.955        4306<\/code><\/pre>\n\n\n\n<p>Mit diesen Daten kann ich dann arbeiten und vergleichen, und tats\u00e4chlich komme ich damit \u00fcberraschend weit: wenn die durchschnittliche Wortl\u00e4nge kleiner als 5,42268 ist und mehr als 29 mal &#8222;Gucky&#8220; im Text auftaucht, ist das Heft von Clark Darlton. Aber das ist halt genau auf diese 50 Hefte zugeschnitten und w\u00fcrde schon bei den 50 folgenden Heften versagen. Stattdessen gibt es andere, allgemeinere Embeddingverfahren. Orange bietet ein par davon an: Ein einfaches <em>bag of words,<\/em> ein komplexeres <em>BERT <\/em>mit 384 Dimensionen oder FastText mit 300 Dimensionen. Dann scheidet in einem Entscheidungsbaum (Informatik 11. Klasse) der Wert von Dimension 20 auf der einen Seite Kurt Mahr und Kurt Brand und auf der andern Seite Clark Darlton, K. H. Scheer und William Voltz. Was die Dimension 20 bedeutet? Das l\u00e4sst sich, anders als beim selbstgebastelten Embedding, nicht sagen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">6. Embedding von Bildern<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\">6.1 Beispiel: Handschriftliche Ziffern<\/h4>\n\n\n\n<p>Ein Bild ist ja bereits eine Reihe von Zahlen: Wenn es 28 x 28 Pixel gro\u00df ist, sind das 784 Zahlen. Hier sind 784 solche Zahlen, die jeweils f\u00fcr Helligkeitswerte stehen, in 28 Spalten und Zeilen angeordnet, so dass man bereits ahnen kann, was das Bild darstellt:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/ki_mnisttest2.png\"><img loading=\"lazy\" decoding=\"async\" width=\"561\" height=\"337\" src=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/ki_mnisttest2.png\" alt=\"\" class=\"wp-image-16656\" srcset=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/ki_mnisttest2.png 561w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/ki_mnisttest2-300x180.png 300w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/ki_mnisttest2-150x90.png 150w\" sizes=\"auto, (max-width: 561px) 100vw, 561px\" \/><\/a><\/figure>\n\n\n\n<p>Es ist eine Ziffer 7. (<a href=\"https:\/\/www.herr-rau.de\/wordpress\/2020\/08\/ki-fast-alles-was-ich-darueber-weiss-teil-1.htm\">Siehe Blogeintr\u00e4ge dazu.<\/a>)<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">6.2 Beispiel: Hunde und Katzen<\/h4>\n\n\n\n<p>Aber wenn die Bilder komplexer und gr\u00f6\u00dfer werden, komme ich so nicht weit. Der Vektor zu einem Bild von 4000 x 3000 Pixeln Gr\u00f6\u00dfe h\u00e4tte eine Dimension von 12.000.000 statt 784. Ich brauche also ein Embeddingverfahren, das mir diese Dimensionen reduziert, wobei dennoch wesentliche Informationen \u00fcber das Bild erhalten bleiben, und die auch halbwegs gleich bleiben, wenn ich das Bild rotiere oder verkleinere oder spiegele. Auch hier sollen \u00e4hnliche Bilder an \u00e4hnlichen Orten im Vektorraun stehen. Und am besten verk\u00fcrzt das Embedding nicht nur, sondern enth\u00e4lt Information \u00fcber Farben und Formen und semantische Inhalte &#8211; also ob Ampel, Hydrant, Fahrrad auf dem Bild sind.<\/p>\n\n\n\n<p>F\u00fcr all das gibt es verschiedene Verfahren, und dass das funktioniert, habe ich mit Orange \u00fcberpr\u00fcft. Im Web habe ich eine Sammlung von 25.000 Katzen- und Hundefotos gefunden, um damit KI zu trainieren. Die habe ich von Orange einlesen und mit einem Verfahren embedden lassen, die entstandenen Vektoren haben die Dimension 1000, hier sieht man sie im Hintergrund ausschnittsweise als Tabelle:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_orange_cats_and_dogs.png\"><img loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"563\" src=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_orange_cats_and_dogs-700x563.png\" alt=\"\" class=\"wp-image-64896\" srcset=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_orange_cats_and_dogs-700x563.png 700w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_orange_cats_and_dogs-300x241.png 300w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_orange_cats_and_dogs-150x121.png 150w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_orange_cats_and_dogs.png 1398w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/a><\/figure>\n\n\n\n<p>Im Vordergrund sieht man zwei grafische Darstellungen, und zwar wieder wie bei den W\u00f6rtern oben die Abst\u00e4nde zwischen den Vektoren. Man sieht bei den Ergebnissen beider Darstellungsalgorithmen, dass die zwei Vektoren der zwei Gruppen f\u00fcr Katze und Hunde jeweils doch nahe beieinanderliegen, auch wenn man die 999 Dimensionen nicht wirklich abbilden oder sich vorstellen kann. Da ist es nicht verwunderlich, wenn selbst so ein simpler Algorithmus wie kNN (k n\u00e4chste Nachbarn, Stoff in der 11. Klasse) hohe Prozentwerte beim Zuordnen der Testbilder hat.<\/p>\n\n\n\n<p>Als Gegenbeispiel eine Auswahl der falsch zugeordneten Bilder:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_orange_cats_and_dogs_misclassified.png\"><img loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"538\" src=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_orange_cats_and_dogs_misclassified-700x538.png\" alt=\"\" class=\"wp-image-64911\" srcset=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_orange_cats_and_dogs_misclassified-700x538.png 700w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_orange_cats_and_dogs_misclassified-300x231.png 300w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_orange_cats_and_dogs_misclassified-150x115.png 150w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_orange_cats_and_dogs_misclassified.png 1300w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/a><\/figure>\n\n\n\n<p>Im folgenden Bild sieht man vier Tierfotos und einen Teil der Embeddings dazu, 1000 Zahlen je Bild. Das Embeddingverfahren wurde &#8211; nur um es einmal festzuhalten &#8211; nicht mit diesen konkreten Bildern trainiert, es ist ein Standardverfahren (SqueezeNet), das mit vielen <em>anderen <\/em>Bildern trainiert wurde. Dennoch gelingt es irgendwie, dass diese 1000 Zahlenwerte bei den Katzen und Hunden jeweils untereinander benachbarter liegen als zu der anderen Gruppe.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_cats_and_dogs_and_vectors.png\"><img loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"331\" src=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_cats_and_dogs_and_vectors-700x331.png\" alt=\"\" class=\"wp-image-65089\" srcset=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_cats_and_dogs_and_vectors-700x331.png 700w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_cats_and_dogs_and_vectors-300x142.png 300w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_cats_and_dogs_and_vectors-150x71.png 150w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_cats_and_dogs_and_vectors.png 1400w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/a><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">6.3 Ausblick<\/h4>\n\n\n\n<p>Was bei fortgeschrittenen Verfahren auch geht: Dass die Vektoren von Bildern, die Hunde enthalten, dem Vektor <em>dog<\/em> benachbart sind, und die Katzenbilder dem <em>cat-<\/em>Vektor. Damit hat man dann eine Br\u00fccke geschlagen zwischen der Semantik von Bildern und W\u00f6rtern. Wenn man aus vielen Bildern alle mit einer affeetasse herausfinden will, muss man nur nach &#8222;Kaffeetasse&#8220; suchen, und dessen Vektor wird mit den Vektorbildern verglichen: <a href=\"https:\/\/blog.roboflow.com\/what-is-an-image-embedding\/\">https:\/\/blog.roboflow.com\/what-is-an-image-embedding\/<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">7. Nur kurz zum Algorithmus (wurde dann doch l\u00e4nger)<\/h2>\n\n\n\n<p>F\u00fcr das Embedding von Bildern gibt es verschiedene Verfahren; f\u00fcr das Embedding von W\u00f6rtern oder Token nat\u00fcrlich auch: Am bekanntesten ist, hei\u00dft es, <em>word2vec<\/em>, das zum Beispiel in der Bibliothek Gensim implementiert ist; ein \u00e4hnliches Verfahren mit anderer Segementierung ist <em>FastText<\/em>. Das Prinzip bei word2vec ist folgendes: Man nimmt einen Korpus von Texten und lehrt das System vorherzusagen, welches Wort in einer L\u00fccke in einem gegebenen kurzen Kontext steht. Das Ziel ist aber eigentlich nicht wirklich die Vorhersage, sondern das Erzeugen eines geeigneten Embeddings und das Vergleichbarmachen von W\u00f6rtern.<\/p>\n\n\n\n<p><em>(Was jetzt folgt, habe ich mir zusammengelesen; ich bitte, mich auf Fehler aufmerksam zu machen. Ich bin jetzt au\u00dferdem nicht so weit gegangen, ein <\/em>Buch <em>dar\u00fcber zu lesen, zugegeben. Au\u00dferdem wei\u00df ich, dass das alles nicht state of the art ist und nicht unnmittelbar die Weise ist, wie LLMs heute funktionieren; darum geht es mir hier auch noch nicht.)<\/em><\/p>\n\n\n\n<p>Zum Berechen der Embeddings benutzt man einfache Neuronale Netze mit nur einer verdeckten Schicht.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Sagen wir, es gibt ein Vokabular von 160.000 W\u00f6rtern in einem Korpus. <\/li>\n\n\n\n<li>Dann hat das Neuronale Netz 160.000 Eingangsknoten.<\/li>\n\n\n\n<li>Und die verdeckte Schicht hat, sagen wir, 300 Knoten.<\/li>\n\n\n\n<li>Und das Netz hat 160.000 Ausgangsknoten.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_word2vec_neural_net_simplified.svg\"><img decoding=\"async\" src=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_word2vec_neural_net_simplified.svg\" alt=\"\" class=\"wp-image-65069\"\/><\/a><\/figure>\n\n\n\n<p>Wenn man mal nur von <em>einem<\/em> Wort am Eingang ausgeht (dazu weiter unten mehr), dann bestehen die Eingangsdaten aus einem Vektor der L\u00e4nge 160.000, der aber fast durchgehend aus 0 besteht, nur an der einen Stelle mit dem Wort ist eine 1, im Bild oben ist das das Vokabular-Element mit der ID 2. Dieses Prinzip hei\u00df &#8222;one-hot encoding&#8220;, weil nur ein Element aktiv ist.<\/p>\n\n\n\n<p>Dementsprechend sind <em>f\u00fcr dieses Wort<\/em> auch nur die 300 neuronalen Gewichte interessant, die mit den Kanten dieses einen Eingangsknotens zu den 300 Knoten der versteckten Ebene verbunden sind. Im Bild oben sind das die 3 (stellvertretend f\u00fcr 300) roten Pfeile. Jedenfalls sind diese 300 Gewichte, ta da!, der Embedding-Vektor just jenes Wortes am Netzeingang. Also, wenn das Netz fertig trainiert ist. Ziel des Trainings ist, geeignete Embeddings f\u00fcr W\u00f6rter (oder Token) zu erhalten, das Mittel ist die Vorhersage des n\u00e4chsten Wortes.<\/p>\n\n\n\n<p>Tats\u00e4chlich ist es nicht ganz so einfach wie in der Grafik oben. Es gibt zwei Varianten, die beide zu word2vec geh\u00f6ren: <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>CBOW <\/strong>(Continuous Bag Of Words), bei dem <em>mehrere<\/em> W\u00f6rter der Input sind, n\u00e4mlich der Kontext, also die zum Beispiel zwei W\u00f6rter vor und nach einer L\u00fccke, und die m\u00f6glichen L\u00fcckenw\u00f6rter vorherzusagen ist das Ziel, auf das hin trainiert wird.<\/li>\n\n\n\n<li><strong>Skip Gram,<\/strong> bei dem <em>ein<\/em> Wort der Input ist, und es gilt vorherzusagen, mit welcher Wahrscheinlichkeit alle anderen W\u00f6rter innerhalb eines Abstands von &#8211; sagen wir wieder: zwei &#8211; W\u00f6rtern davor und danach erscheinen.<\/li>\n<\/ul>\n\n\n\n<p>Ich k\u00f6nnte ein <em>wenig<\/em> mehr zu den Details berichten, aber wer sich wirklich daf\u00fcr interessiert, ist mit den Links am Ende des Blogeintrags wahrscheinlich ohnehin besser beraten.<\/p>\n\n\n\n<p>Wenn zwei W\u00f6rter &#8211; <em>slow <\/em>und <em>fast <\/em>oder <em>quick <\/em>&#8211; h\u00e4ufig in \u00e4hnlichen Kontexten auftauchen, dann ist auch die Wahrscheinlichkeitsverteilung f\u00fcr die vorhergesagten Kontext-W\u00f6rter am Ende des Netzes \u00e4hnlich. Und das geschieht vor allem dann, wenn die Gewichtungen in der versteckten Ebene \u00e4hnlich sind. Und das hei\u00dft, dass die Gewichtungs-Vektoren im Vektorraum nicht zu weit von einander entfernt sind. So entsteht die N\u00e4he im Vektorraum.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">8. Fazit<\/h2>\n\n\n\n<p>Eine ganze Menge Magie liegt schon in den Embeddings, bevor es \u00fcberhaupt erst an das Generieren von Texten geht. In diesem Blogeintrag ging es nur um das auf Grundlage eines Korpus einmalig errechnete statische Embedding von W\u00f6rtern. Mit denen kann man bereits etwas anfangen, zum Beispiel eine <em>sentiment analysis<\/em>: Ich k\u00f6nnte eine Menge Tr\u00f6ts bei Mastodon automatisiert dahingehend analysieren, ob sie eine eher positive oder negative Stimmung haben, oder bei einem l\u00e4ngeren literarischen Text sehen, wie sich das bei dem ver\u00e4ndert. (Meine eigenen Experimente dazu waren aber noch wenig erfolgreich; ich habe se aber nur oberfl\u00e4chlich betrieben.)<\/p>\n\n\n\n<p>LLMs arbeiten mit Embeddings als Ausgangspunkt. Allerdings werden diese Embeddings dann noch einmal ge\u00e4ndert, abh\u00e4ngig von ihrer Position im Text. Aber das ist etwas f\u00fcr die n\u00e4chste Folge, mit der ich dann zunehmend unsicherer werde, und die deshalb m\u00f6glicherweise etwas auf sich warten lassen wird.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">9. Links und Ausprobieren<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>vorgefertigte Wort-Embeddings herunterladen: <a href=\"https:\/\/vectors.nlpl.eu\/repository\/\">https:\/\/vectors.nlpl.eu\/repository\/ <\/a>(gro\u00dfe Dateien!)<\/li>\n\n\n\n<li>Abst\u00e4nde vorgefertigter Wort-Embeddings visualisieren: <a href=\"https:\/\/projector.tensorflow.org\/\">https:\/\/projector.tensorflow.org\/<\/a><\/li>\n\n\n\n<li>Hier man man drei von vier W\u00f6rtern eingeben nach dem Muster von &#8222;man&#8220; verh\u00e4lt sich zu &#8222;king&#8220; wie &#8222;woman&#8220; zu ???, und die Antwort wird berechnet: <a href=\"https:\/\/vectors.nlpl.eu\/explore\/embeddings\/en\/calculator\/#\">https:\/\/vectors.nlpl.eu\/explore\/embeddings\/en\/calculator\/#<\/a><\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Sammlung von je etwa 12.000 Katzen- und Hundebildern: urspr\u00fcnglich hier <a href=\"https:\/\/www.kaggle.com\/datasets\/karakaggle\/kaggle-cat-vs-dog-dataset\">https:\/\/www.kaggle.com\/datasets\/karakaggle\/kaggle-cat-vs-dog-dataset<\/a>, dann auch hier: <a href=\"https:\/\/github.com\/laxmimerit\/dog-cat-full-dataset\/tree\/master\">https:\/\/github.com\/laxmimerit\/dog-cat-full-dataset\/tree\/master<\/a><\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Tutorial zu word2vec: <a href=\"https:\/\/medium.com\/@zafaralibagh6\/a-simple-word2vec-tutorial-61e64e38a6a1\">https:\/\/medium.com\/@zafaralibagh6\/a-simple-word2vec-tutorial-61e64e38a6a1<\/a> &#8211; sehr ausf\u00fchrlich und dabei in der ersten H\u00e4lfte noch verst\u00e4ndlich<\/li>\n\n\n\n<li>Noch ein Tutorial zu word2vec: <a href=\"https:\/\/www.geeksforgeeks.org\/python-word-embedding-using-word2vec\/\">https:\/\/www.geeksforgeeks.org\/python-word-embedding-using-word2vec\/<\/a> (mit Pythoncode zum Ausprobieren, der zumindest bei mir auch l\u00e4uft)<\/li>\n\n\n\n<li>Und ein letztes, auch mit Python: <a href=\"https:\/\/www.geeksforgeeks.org\/word2vec-with-gensim\/\">https:\/\/www.geeksforgeeks.org\/word2vec-with-gensim\/<\/a><\/li>\n<\/ul>\n\n\n\n<p><em><a href=\"https:\/\/www.herr-rau.de\/wordpress\/2025\/06\/llm-grundlagen-teil-4-ueberblick.htm\">Fortsetzung folgt.<\/a><\/em><\/p>\n\n\n\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vg07.met.vgwort.de\/na\/5e73854e15c74d6ca5a3193fc84fe2d7\" width=\"1\" height=\"1\" alt=\"\">\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>(7 Kommentare.) Fortsetzung von hier. Es geht immer noch nicht um das Erzeugen von Text, sondern um das Ergebnis einer Analyse von Text. Aber darin steckt schon so viel Magie, dass ich das bereits spannend finde. Der Blogeintrag ist bist auf den technischen Hintergrund am Ende hoffentlich leicht zu verstehen, aber er ist sehr lang. [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":65089,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[25],"tags":[227,254],"class_list":["post-64830","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-informatik","tag-informatik","tag-ki"],"jetpack_featured_media_url":"https:\/\/www.herr-rau.de\/wordpress\/archiv\/llm_cats_and_dogs_and_vectors.png","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts\/64830","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/comments?post=64830"}],"version-history":[{"count":3,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts\/64830\/revisions"}],"predecessor-version":[{"id":68195,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts\/64830\/revisions\/68195"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/media\/65089"}],"wp:attachment":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/media?parent=64830"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/categories?post=64830"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/tags?post=64830"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}