{"id":181008,"date":"2023-07-20T17:18:41","date_gmt":"2023-07-20T16:18:41","guid":{"rendered":"https:\/\/liora.io\/de\/?p=181008"},"modified":"2026-02-06T06:32:18","modified_gmt":"2026-02-06T05:32:18","slug":"nlp-language-translation-alles-was-du-wissen-musst","status":"publish","type":"post","link":"https:\/\/liora.io\/de\/nlp-language-translation-alles-was-du-wissen-musst","title":{"rendered":"NLP Language Translation &#8211; Alles was du wissen musst"},"content":{"rendered":"<h3>Heute pr\u00e4sentieren wir dir den vierten Teil unseres spannenden Berichts \u00fcber NLP.<\/p>\n<p>In diesem Artikel werden wir uns ansehen, wie man einen \u00dcbersetzungsalgorithmus auf Python &#8211; auf Englisch &#8222;machine translation&#8220; &#8211; erstellt, mit dem man jedes Wort aus einer Ausgangssprache in eine Zielsprache aus den words embeddings \u00fcbersetzen kann.<\/h3>\n<p>Diese Art von<strong> Algorithmus<\/strong> zu implementieren, mag auf den ersten Blick etwas unklar erscheinen. Mathematisch gesehen ist es so, als w\u00fcrde man die <strong>\u00dcbereinstimmungsmatrix (oder Ausrichtungsmatrix)<\/strong> W finden, indem man das folgende Optimierungsproblem l\u00f6st:<\/p>\n<p><img decoding=\"async\" width=\"226\" height=\"68\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/Word-translation_8-.png\" alt=\"\" loading=\"lazy\"><\/p>\n<p>Sei:<\/p>\n<p>Od(R) ist die Menge der orthogonalen Matrizen (d. h. die Menge der Matrizen M mit reellen Koeffizienten, die invertierbar sind und so, dass ?-1=?T ).<br \/>\nX und Y sind jeweils die<strong> Matrizen<\/strong>, die die Einbettungen der transparenten W\u00f6rter (z. B. table, television, radio, piano, telephone usw.) enthalten, die in der Ausgangssprache (Franz\u00f6sisch) und in der Zielsprache (Englisch) vorkommen. X und Y sind also die Matrizen mit den Einbettungen der franz\u00f6sischen und englischen W\u00f6rter.<\/p>\n<p>Transparente W\u00f6rter sind f\u00fcr die Konstruktion des \u00dcbersetzungsalgorithmus entscheidend, da sie Bezugspunkte sind, die es erm\u00f6glichen, die beiden <strong>Vektorr\u00e4ume der Einbettungen<\/strong> nach Anwendung der Ausrichtungsmatrix W auszurichten. Mit anderen Worten: Die transparenten W\u00f6rter werden die geometrische Transformation zwischen den beiden Untervektorr\u00e4umen bestimmen.<\/p>\n<p>Auch interessant:<\/p>\n<table dir=\"ltr\" border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\n<colgroup>\n<col width=\"426\"><\/colgroup>\n<tbody>\n<tr>\n<td data-sheets-value=\"{&quot;1&quot;:2,&quot;2&quot;:&quot;Gradient Boosting Algorithmen&quot;}\" data-sheets-hyperlink=\"https:\/\/liora.io\/de\/gradient-boosting-algorithmen\"><a href=\"https:\/\/liora.io\/de\/gradient-boosting-algorithmen\" target=\"_blank\" rel=\"noopener\">Gradient Boosting Algorithmen<\/a><\/td>\n<\/tr>\n<tr>\n<td data-sheets-value=\"{&quot;1&quot;:2,&quot;2&quot;:&quot;Dijkstra Algorithmus&quot;}\" data-sheets-hyperlink=\"https:\/\/liora.io\/de\/was-ist-der-dijkstra-algorithmus\"><a href=\"https:\/\/liora.io\/de\/was-ist-der-dijkstra-algorithmus\" target=\"_blank\" rel=\"noopener\">Dijkstra Algorithmus<\/a><\/td>\n<\/tr>\n<tr>\n<td data-sheets-value=\"{&quot;1&quot;:2,&quot;2&quot;:&quot;t-sne-Algorithmus&quot;}\" data-sheets-hyperlink=\"https:\/\/liora.io\/de\/t-sne-algorithmus\"><a href=\"https:\/\/liora.io\/de\/t-sne-algorithmus\" target=\"_blank\" rel=\"noopener\">t-sne-Algorithmus<\/a><\/td>\n<\/tr>\n<tr>\n<td data-sheets-value=\"{&quot;1&quot;:2,&quot;2&quot;:&quot;CAH Algorithmus ML Clustering&quot;}\" data-sheets-hyperlink=\"https:\/\/liora.io\/de\/machine-learning-clustering-fokus-auf-den-cah-algorithmus\"><a href=\"https:\/\/liora.io\/de\/machine-learning-clustering-fokus-auf-den-cah-algorithmus\" target=\"_blank\" rel=\"noopener\">CAH Algorithmus ML Clustering<\/a><\/td>\n<\/tr>\n<tr>\n<td data-sheets-value=\"{&quot;1&quot;:2,&quot;2&quot;:&quot;3 ML Algorithmen die du kennen solltest&quot;}\" data-sheets-hyperlink=\"https:\/\/liora.io\/de\/3-machine-learning-algorithmen-fuer-deinen-job\"><a href=\"https:\/\/liora.io\/de\/3-machine-learning-algorithmen-fuer-deinen-job\" target=\"_blank\" rel=\"noopener\">3 ML Algorithmen die du kennen solltest<\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>\u00dcbrigens, was ist eine Embedding-Matrix eigentlich?<\/h3>\n<p>Um zu erkl\u00e4ren, was eine Embedding-Matrix ist, nehmen wir die folgenden drei S\u00e4tze:<\/p>\n<ul>\n<li>Als der Arbeiter weg war.<\/li>\n<li>Als der Fischer weg war.<\/li>\n<li>Wenn der Hund weg ist.<\/li>\n<\/ul>\n<p>Angenommen, wir kennen die Bedeutung der W\u00f6rter &#8222;Arbeiter&#8220;, &#8222;Fischer&#8220; und &#8222;Hund&#8220; nicht, aber wir k\u00f6nnen sagen, dass diese drei S\u00e4tze bis auf ein Wort identisch sind.<\/p>\n<p>Da die<strong> Kontexte \u00e4hnlich sind, k\u00f6nnten wir folgern,<\/strong> dass es eine gewisse \u00c4hnlichkeit zwischen &#8218;Arbeiter&#8216;, &#8218;Fischer&#8216; und &#8218;Hund&#8216; gibt.<\/p>\n<p>Wenn wir diese Idee auf einen ganzen Korpus anwenden, k\u00f6nnten wir auf diese Weise die Beziehungen zwischen mehreren W\u00f6rtern definieren.<\/p>\n<p>Eine Frage bleibt jedoch: Wie lassen sich diese Beziehungen am besten darstellen? Das Konzept der Einbettungsmatrix wurde entwickelt.<\/p>\n<p>Der <strong>Einfachheit halber<\/strong> stellen wir uns vor, dass jedes Wort und seine Bedeutung in einem abstrakten dreidimensionalen Raum dargestellt werden k\u00f6nnen.<\/p>\n<p>Konzeptuell bedeutet dies, dass alle W\u00f6rter als singul\u00e4re Punkte in einem dreidimensionalen Raum existieren und jedes Wort eindeutig durch seine Position in diesem Raum definiert werden kann, der durch drei Zahlen (x, y, z) beschrieben wird.<\/p>\n<p>In<strong> Wirklichkeit ist die Bedeutung<\/strong> eines Wortes jedoch zu kompliziert, um einfach in einem dreidimensionalen Raum beschrieben zu werden, und in der Regel braucht man fast 300 Dimensionen, um ein Wort und seine Bedeutung vollst\u00e4ndig zu definieren.<\/p>\n<p>Der Vektor aus 300 Zahlen, der ein bestimmtes Wort identifiziert, wird als das Embedding dieses Wortes bezeichnet.<\/p>\n<p>Letztendlich ist eine Embedding-Matrix nichts anderes als eine Matrix, die eine Vielzahl von W\u00f6rtern und ihre entsprechenden Embeddings enth\u00e4lt. Hier ist ein Beispiel f\u00fcr eine englische Embedding-Matrix:<\/p>\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"512\" height=\"176\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/Word-translation_3-.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/Word-translation_3-.png 512w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/Word-translation_3--300x103.png 300w\" sizes=\"(max-width: 512px) 100vw, 512px\"><figcaption><\/figcaption><\/figure>\n<h3>Implementierung eines \u00dcbersetzungsalgorithmus und seine Grenzen<\/h3>\n<p>In diesem Abschnitt werden wir einen <strong>\u00dcbersetzungsalgorithmus implementieren<\/strong> und versuchen, sowohl seine St\u00e4rken als auch seine Schw\u00e4chen zu bestimmen.<\/p>\n<h4><u>Schritt 0:<\/u><\/h4>\n<p>Abruf von zwei vorab trainierten franz\u00f6sischen und englischen U1- und U2-Embedding-Matrizen auf Common Crawl und Wikipedia mithilfe von fastText.<\/p>\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"2560\" height=\"2438\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2020\/10\/illustration_vector-02.png\" alt=\"embedding\" loading=\"lazy\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2020\/10\/illustration_vector-02.png 2560w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2020\/10\/illustration_vector-02-300x286.png 300w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2020\/10\/illustration_vector-02-1024x975.png 1024w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2020\/10\/illustration_vector-02-768x731.png 768w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2020\/10\/illustration_vector-02-1536x1463.png 1536w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2020\/10\/illustration_vector-02-2048x1951.png 2048w\" sizes=\"(max-width: 2560px) 100vw, 2560px\"><figcaption>U1 und U2 Embedding-Matrix<\/figcaption><\/figure>\n<h4><u>Schritt 1:<\/u><\/h4>\n<p>Zun\u00e4chst m\u00fcssen wir ein zweisprachiges W\u00f6rterbuch (z. B. Franz\u00f6sisch-Englisch) definieren, das alle transparenten W\u00f6rter enth\u00e4lt, die in den beiden Vokabularen enthalten sind. Sobald wir dieses erhalten haben, m\u00fcssen wir die<strong> X- und Y-Embedding-Matrizen<\/strong> erstellen, die jeweils den franz\u00f6sischen und englischen Matrizen entsprechen, die die Embeddings enthalten, die mit den W\u00f6rtern des zuvor definierten zweisprachigen W\u00f6rterbuchs verbunden sind.<\/p>\n<h4><u>Schritt 2:<\/u><\/h4>\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"2560\" height=\"2439\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2020\/10\/illustration_vector-01.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2020\/10\/illustration_vector-01.png 2560w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2020\/10\/illustration_vector-01-300x286.png 300w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2020\/10\/illustration_vector-01-1024x975.png 1024w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2020\/10\/illustration_vector-01-768x732.png 768w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2020\/10\/illustration_vector-01-1536x1463.png 1536w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2020\/10\/illustration_vector-01-2048x1951.png 2048w\" sizes=\"(max-width: 2560px) 100vw, 2560px\"><figcaption>Erkl\u00e4rendes Schema zu Schritt 2<\/figcaption><\/figure>\n<p>Das Ziel dieses zweiten Schritts ist es, die Anwendung W (Matching-Matrix) zu finden, die den <strong>Quellwortvektorraum (z. B. Franz\u00f6sisch) auf den Zielwortvektorraum (z. B. Englisch) projiziert.<\/strong><\/p>\n<p>Es ist offensichtlich, dass diese Methode umso besser funktioniert, je \u00e4hnlicher die Struktur der Einbettungsr\u00e4ume ist (was hier bei Englisch und Franz\u00f6sisch der Fall ist).<\/p>\n<p>Wie wir in der Einleitung gesehen haben, ist W* = argmin || WX &#8211; Y || unter der Bedingung, dass W eine orthogonale Matrix ist.<\/p>\n<p>Wir k\u00f6nnen unter <strong>Verwendung der Orthogonalit\u00e4t<\/strong> und der Eigenschaften der Spur einer Matrix beweisen, dass<\/p>\n<p>W*=UVT mit U\u03a3VT = SVD (YXT).<\/p>\n<p>Dabei ist SVD die Singul\u00e4rwertzerlegung einer Matrix (Verallgemeinerung des Spektraltheorems, das besagt, dass alle orthogonalen Matrizen durch eine orthonormale Basis von Eigenvektoren diagonalisiert werden k\u00f6nnen).<\/p>\n<p>Aufgrund des vorherigen Ergebnisses ist das Finden von W einfach die Singul\u00e4rwertzerlegung der Matrix ??T.<\/p>\n<p>Hier ist die Matrix W, die du als Ausgabe des Codes erh\u00e4ltst:<\/p>\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"504\" height=\"193\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2020\/10\/Word-translation_7-.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2020\/10\/Word-translation_7-.png 504w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2020\/10\/Word-translation_7--300x115.png 300w\" sizes=\"(max-width: 504px) 100vw, 504px\"><figcaption>Erhaltene W-Matrix<\/figcaption><\/figure>\n<h4><u>Schritt 3:<\/u><\/h4>\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"2560\" height=\"2438\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2020\/10\/illustration_vector-03.png\" alt=\"embedding\" loading=\"lazy\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2020\/10\/illustration_vector-03.png 2560w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2020\/10\/illustration_vector-03-300x286.png 300w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2020\/10\/illustration_vector-03-1024x975.png 1024w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2020\/10\/illustration_vector-03-768x731.png 768w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2020\/10\/illustration_vector-03-1536x1463.png 1536w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2020\/10\/illustration_vector-03-2048x1951.png 2048w\" sizes=\"(max-width: 2560px) 100vw, 2560px\"><figcaption>Anwendung der Matrix W auf den Vektorraum der Einbettungen franz\u00f6sischer W\u00f6rter<\/figcaption><\/figure>\n<p>Sobald wir die Alignment-Matrix W erhalten haben, k\u00f6nnen wir nun die englische<strong> \u00dcbersetzung eines beliebigen Wortes<\/strong> finden, das im deutschen Wortschatz vorkommt, indem wir die n\u00e4chsten Nachbarn der Quellw\u00f6rter im Zielwortvektorraum identifizieren.<\/p>\n<p>Hier sind die Ergebnisse (jeweils 3 englische Begriffe, die der \u00dcbersetzung am n\u00e4chsten kommen, und die Wahrscheinlichkeit, dass sie mit dem zu \u00fcbersetzenden Wort \u00fcbereinstimmen):<\/p>\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"274\" height=\"298\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2020\/10\/Word-translation_5-.png\" alt=\"Word translation\" loading=\"lazy\"><figcaption>Ergebnis des konstruierten \u00dcbersetzungsalgorithmus<\/figcaption><\/figure>\n<p>Wie wir sehen k\u00f6nnen, ist dieser Algorithmus ziemlich leistungsstark und kann als \u00dcbersetzer von Franz\u00f6sisch-Englisch-W\u00f6rtern dienen.<\/p>\n<p>Wir k\u00f6nnten versuchen, diese Art von Algorithmus zu verwenden, um einen ganzen Text zu \u00fcbersetzen:<\/p>\n<p>Hier ist das Ergebnis<\/p>\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"824\" height=\"21\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2020\/10\/Word-translation_9.png\" alt=\"Word translation\" loading=\"lazy\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2020\/10\/Word-translation_9.png 824w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2020\/10\/Word-translation_9-300x8.png 300w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2020\/10\/Word-translation_9-768x20.png 768w\" sizes=\"(max-width: 824px) 100vw, 824px\"><figcaption><\/figcaption><\/figure>\n<p>Angesichts der<strong> unterschiedlichen Sprachstrukturen im Franz\u00f6sischen und Englischen<\/strong> (z. B. die Reihenfolge Substantiv-Adjektiv im Franz\u00f6sischen, Adjektiv-Name im Englischen) ist eine Wort-f\u00fcr-Wort-\u00dcbersetzung nicht optimal. Au\u00dferdem k\u00f6nnen wir feststellen, dass unser \u00dcbersetzungsalgorithmus bei W\u00f6rtern wie: de, en, un, une, etc. nicht funktioniert.<\/p>\n<p>Wie wir bereits vermutet haben, ist die Wort-f\u00fcr-Wort-\u00dcbersetzung nicht die beste Methode, um einen Text zu \u00fcbersetzen. Eine m\u00f6gliche L\u00f6sung w\u00e4re die Verwendung eines Seq2seq- (oder <a href=\"https:\/\/liora.io\/de\/bert\">BERT<\/a>-) Ansatzes, dem wir in K\u00fcrze einen eigenen Artikel widmen werden.<\/p>\n<p>Hat dir dieser Artikel gefallen?<\/p>\n<p>M\u00f6chtest du mehr \u00fcber <a href=\"https:\/\/liora.io\/de\/deep-learning-oder-tiefes-lernen-was-ist-das-denn\">Deep Learning<\/a> erfahren?<\/p>\n<p><a href=\"https:\/\/liora.io\/de\/unsere-aus-und-weiterbildungen\"><br \/>\nEntdecke unsere Weiterbildungen<br \/>\n<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Heute pr\u00e4sentieren wir dir den vierten Teil unseres spannenden Berichts \u00fcber NLP. In diesem Artikel werden wir uns ansehen, wie man einen \u00dcbersetzungsalgorithmus auf Python &#8211; auf Englisch &#8222;machine translation&#8220; &#8211; erstellt, mit dem man jedes Wort aus einer Ausgangssprache in eine Zielsprache aus den words embeddings \u00fcbersetzen kann. Diese Art von Algorithmus zu implementieren, [&hellip;]<\/p>\n","protected":false},"author":74,"featured_media":181009,"comment_status":"open","ping_status":"open","sticky":false,"template":"elementor_theme","format":"standard","meta":{"_acf_changed":false,"editor_notices":[],"footnotes":""},"categories":[2472],"class_list":["post-181008","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\/181008","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\/74"}],"replies":[{"embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/comments?post=181008"}],"version-history":[{"count":1,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts\/181008\/revisions"}],"predecessor-version":[{"id":217359,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts\/181008\/revisions\/217359"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/media\/181009"}],"wp:attachment":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/media?parent=181008"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/categories?post=181008"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}