KI/Neuronales Netzwerk Wörter als Input

Nyxero

Cadet 4th Year
Registriert
Jan. 2015
Beiträge
105
Hallo liebe Community,
momentan bin ich dabei, mir die Grundkenntnisse der KI anzueignen. Dies geschieht alles im Rahmen meiner Ausbildung innerhalb der Schule.

Nun Aufgabe ist es eine Neuronales Netzwerk zu entwickeln, dass in der Lage ist Twitter Tweeds von verschiedenen Personen zu Klassifizieren. Ich bin immer noch dabei die mir zugrundeliegenden Tweets in ein Format zu bringen, mit dem das Neuronale Netzwerk etwas anfangen kann. Die Anforderung ist, dass jedes Input-Value eine Zahl zwischen 0 und 1 darstellt.

Mein Input soll eine Anreihung der Worte im vorkommenden Tweet sein (das habe ich so beschlossen). Nun muss ich eine Möglichkeit finden, einzelne Worte möglichst mit deren Bedeutung in einer Zahl von 0 - 1 zu bringen.

Ich habe mich bereits einige 1Tage damit gedanklich beschäftigt, bin jedoch zu keinem guten Ergebnis gekommen. Gestern habe ich etwas Zeit gefunden, ein Algorithmus zu entwickeln, um aus einem Buchstaben eine Zahl zwischen 0 und 1 zu generieren. Dabei wollte ich die Position des Buchstaben mit in die Wertung einfließen lassen, in der Hoffnung, dass ich dadurch auch ein Teil der "Bedeutung" mit einfließen lassen kann.

Jedoch bin ich im Nachhinein auf zwei Probleme gestoßen. Die ich im folge näher erläutern möchte. Jedoch erstmal zu dem Algorithmus für ein Buchstaben. Ich werde das ganze anhand des Wortes "Hallo" näher erklären.

Folgende Bedingungen bin ich eingegangen:
  • Ich gehe davon aus das jedes verwendete Zeichen in einem Tweet in der ASCII Tabelle vorkommt.
  • Ein Tweet besteht aus jeweils 280 Zeichen.
  • Die Worttrennung wird mittels eines Leerzeichens erkannt.


Nun gehe ich Wort für Wort durch und generiere zu jedem Wort eine Zahl zwischen 0 und 1. Dafür lasse ich mir als erstes zu jedem einzelnen Buchstaben eine Zahl im dem gültigen Bereich ausgeben. Diese Zahlen summiere ich und Teile sie durch die Anzahl der Zeichen in einem Wort.

Der Algorithmus für einen Charakter:

  • c = der Dezimalwert des Buchstaben.
  • i = der Index des Buchstabens im Wort.
  • tl = die Tabellen länge (bei ASCII 255).
(c / tl + (c / tl * i / 2)) / 2

Anhand von „Hallo“ würde ich folgende Berechnungen durchführen:

H = (72 / 255 + ( 72 / 255 * 1 / 2)) / 2
a = (97 / 255 + (97 / 255 * 2 / 2)) / 2
l = (108 / 255 + (108 / 255 * 3 / 2)) / 2
l = (108 / 255 + (108 / 255 * 4 / 2)) / 2
o = (111 / 255 + (111 / 255 * 5 / 2)) / 2

Dieser Algorithmus hat mindestens zwei Fehler:
  • Zum einen berücksichtige ich nicht, dass ein Wort eine dynamische Länge hat und Teile einfach durch 2. Dadurch kommt es vor, dass längeren Worten der Output größer 1 ist.
  • Und darüber hinaus ist der erstelle Wert natürlich immer noch nicht wirklich „eindeutig“ für ein bestimmtes Wort, da durch die Berechnung zufälligerweise andere Wörter die selber Numerische Zahl ergeben können.

Nun, nachdem meine Situation näher erläutert wurde, zu meiner eigentlichen Frage:
Ich bin auf der Suche nach einem Algorithmus, der mir ermöglicht ganze Wörter möglichst mit deren Bedeutung (z. B durch die Anordnung der Buchstaben z. B) in einer Zahl zu bringen, die kleine gleich 1 und größer gleich 0 sein muss.

Da mir diesbezüglich die richtigen Keywords fehlen, fällt es mir schwer einen solchen Algorithmus zu finden. Habt ihr evtl. ein paar Tipps oder Keywords, die mir die Suche erleichtern würden? Oder kennt ihr ähnliche Algorithmen die ich anwenden könnte?
 
Danke für den Tipp. Ich habe ebenfalls noch einen anderen Ansatz bekommen. Ich könnte einen einfachen Hash Algorithmus nutzen. Und den Output dementsprechend mappen.
 
Jedes Wort in nur eine Zahl abzubilden wird nicht funktionieren. Du möchtest ja idealerweise, dass ähnliche Worte nahe beieinander liegen und unähnliche Worte entfernt voneinander. Aber bei einem nicht-trivialen Wortschatz ist das in einem eindimensionalen Raum nicht möglich.
In der Praxis bildet man Worte daher in einen vieldimensionalen (z. B. 100 Dimensionen) Raum ab. Der Fachbegriff hierfür lautet "Word Vector" (oder auch "Embedding"). Diese Word-Vektoren gibt es fertig zum Runterladen, z.B. https://fasttext.cc/
Die Wort-Vektoren könnten dann (wie zuvor genannt) als Input in einem LSTM dienen. Falls du das Ganze etwas genauer verstehen willst, kann ich den fast.ai Kurs empfehlen.
 
  • Gefällt mir
Reaktionen: Kanibal und Nyxero
@cx01 vielen lieben Dank für die Tipps. Die Keywords werden mir bestimmt weiter helfen :)
Ich habe ein paar in der Klasse die verfolgen einfach den Ansatz der Lehrers, jedoch halte ich den Ansatz mit der sinnhafen gewichtung der Worte für ineffective.

Ein Schüler hat diesen Weg eingeschlagen und ist bei einer trefferquote von 70% gelandet. Ich denke, dass ich dies mit richtigen Ansätzen überbieten könnte. :)
 
Zuletzt bearbeitet:
Zurück
Oben