Spracherkennung für SteemSearch

in #steemdev6 days ago

Seit etwa zwei Wochen arbeite ich an einer Spracherkennung für SteemSearch, eine interessante Geschichte, das macht so richtig Spaß. Zündung war als @peppermint24 meinte, das wär eine nützliche Sache und ich hatte da eine Idee...

Grundgedanke war, mit einer Liste der häufigsten Wörter für jede Sprache sollte das eigentlich keine große Geschichte sein. Erstaunlich, für Deutsch sind es bis jetzt nur die Worte: der, die, das, und, ist, ein, ich, nicht, wir, du, dein, mein, aber, auch, hallo, willkommen, guten, morgen, danke, liebe, leben, freund, glücklich, welt, hätte, gute, jetzt, viel, für. Das war's!

Aktuell bin ich bei v0.1.2 und einer Erkennungsrate von bis zu 99,8%, je nach Sprache. Für diesen Zweck ausreichend, denke ich mal.

Grok war so freundlich und hat aus 632 Datensätzen diese Grafik erstellt:
image.png
Ok, ertappt - ich hab für diesen Beitrag eine besonders gute Auswertung genommen :-)

Sprachen

Derzeit werden Deutsch, Englisch, Spanisch, Italienisch, Französisch, Türkisch, Russisch, Ukrainisch, Griechisch, Hindi, Indonesisch, Koreanisch, Chinesisch, Arabisch, Thailändisch und Bengali erkannt.

Die Erkennung arbeitet ganz grob in drei Stufen, erst werden Scores anhand der häufigsten Wörter erstellt, wobei bestimmte Wörter höher oder niedriger gewichtet werden. Stufe zwei berechnet je nach Anzahl der Wörter einen dynamischen Schwellwert den der Score erreichen muss. Bei kurzen Texten liegt dieser niedriger.

In der dritten und letzten Stufe wird noch der Zeichensatz geprüft, was bei allen nicht-lateinischen Schriftsystemen gut funktioniert. Erst hatte ich diese Prüfung gleich als erste Stufe, doch leider gibt es gemischte Texte die z.B. mit Bengali beginnen, dann aber in Englisch geschrieben sind.

Sprache nicht dabei?

Irgendwo muss ich natürlich eine Grenze ziehen, vermutlich werde ich nicht alle Sprachen zur Auswahl stellen, Griechisch und Arabisch sind mir z.B. selten untergekommen. Mal sehen...

Was meint ihr, fehlt noch eine wichtige Sprache?

Posted using SteemPro

Sort:  

Wow! Somit könnten alle Linguisten der Welt in Rente geschickt werden… 😉

Nee, nee, zuerst geh ich... ;-)

Sich auf einzelne prägnante Wörter zu beschränken, finde ich ja mal einen coolen Ansatz. Das erscheint mir auf den ersten Blick auch sehr effektiv. So muss man nicht den Text in irgendeiner Weise aufwendig analysieren.

Schwierig dürfte es nur werden, wenn es sich um gemischte Texte handelt. Wenn zum Beispiel ein Zitat in einer anderen Sprache im Post/Kommentar erscheint. Hier könnte die Suche im Zweifel für beide Sprachen einen Erfolg zurückgeben. Ja nachdem wie du vorhast, es in deine Suche zu integrieren.

Ja, gemischte Texte ist so ein Ding, im Log finden sich manchmal sogar gleiche Scores auf den ersten beiden Plätzen. Aber ich bin da ganz entspannt, die erste erkannte Sprache wird genommen, fertig :-)

Außerdem nehme ich nur den Text der in der Vorschau bei den Suchergebnissen angezeigt wird, das sind meist sagenhafte 30 Wörter um den Dreh. Eh erstaunlich, dass es trotzdem relativ gut funktioniert. Und Ressourcen sind kein Ding, zum Test hatte ich immer so 700 Testdatensätze und die sind ratz fatz in kaum spürbarer Zeit durch.

Ja, wie gesagt, scheint insgesamt ein sehr effektiver Ansatz zu sein... und das mit rund 30 Wörtern Text. Sehr gut!

Habe deine aktuelle Version neulich mit recht alten Beiträgen getestet. Zuerst war ich in die "Falle" des fehlenden Tags gestolpert. Aber zu meiner Suche passte einer sehr gut, insofern war das kein Problem. Wir müssen dem Chiller mal vorschlagen, den Tag lediglich optional vorzusehen... oder hat er das schon auf dem Zettel?

Cool. Nur für den Fall, daß unser Freund @hefestus wieder auftaucht, wäre portugiesisch vielleicht ganz hübsch. ;-))

Oh, hatte ich nicht am Schirm: Portugiesisch und Spanisch haben wohl viele Ähnlichkeiten, das Skript kann derzeit nicht zwischen beiden Sprachen unterscheiden. Erkennung (in meiner einfachen Version) wäre wohl fehleranfällig - daher definiere ich einfach: [es] = Portugiesisch und Spanisch :-)

Ha, geilo. Dat ist ja mal ein cooler Sortieransatz. Wenn es Krixel-Kraxel Geschlängel ist, dann ist es keine Lateinische Basis. Lustig aneinander gereihte Nikolaus Häuschen auch nicht! :)

Wenn du über diese 3 Routinen fast 100% richtige Zuordnungen bekommst ist doch mega. Da kann der Ansatz gar nicht so verkehrt sein.

der Ansatz gar nicht so verkehrt sein

Hehe, scheint so - deinen Kommentar hat das Script schon mal als deutsch erkannt, was will man mehr :-)
image.png
Screenshot der Testversion, da lasse ich mir die Sprache anzeigen und kann so evtl. nachjustieren.

This is great development!

Thanks!

I think u have covered the most common languages here on Steemit. I’ve a feeling English language would have been the most difficult considering the fact that English speaking nations are the largest here or I maybe wrong though.