Chatbot bekommt Gehör oder Amateurleiden



Vor nicht allzu langer Zeit habe ich einen syntaktischen Chat-Bot namens Vanya Razumny vorgestellt ( „Erstellen von KI mit der Glock-Cuzdra-Methode. Intelligente Odyssee“ ). Die nächste offensichtliche Phase, die ich wie andere Schöpfer künstlicher Intelligenz durchlaufen wollte - um der Idee eine Stimme zu geben. Es scheint einfacher zu sein?

Ich musste jedoch leiden. Es war nicht möglich, einige Probleme zu lösen, sicherlich aufgrund von Amateurismus. Ich bezweifle jedoch, dass Fachleute daran interessiert sind, verwandte Probleme zu lösen. Das ist für niemanden interessant, also wollte ich nicht. Ich hatte gehofft, den Sound schnell zu verbessern und zu nachfolgenden Ideen überzugehen ...

Aber das Wichtigste zuerst.

(Ich schreibe in der Hoffnung, dass meine Leiden auf dem Gebiet der Sprachausgabe jemandem aus meiner Art von Liebhabern helfen. Dieser Beitrag ist für den besten Bison nutzlos.)

Es ist klar, dass die Bewertungsaufgabe in zwei unabhängige Abschnitte unterteilt ist:

  1. Textsynthese
  2. Spracherkennung.

Ich nehme den ersten Punkt als den einfachsten. Sofort stoße ich auf einen Code für Anfänger, nur ein paar Zeilen.

Voreingestellte Sprachsynthese
using System.Speech.Synthesis; public static void getSpeech(string text) { SpeechSynthesizer speaker = new SpeechSynthesizer(); speaker.SetOutputToDefaultAudioDevice(); string selectedVoice = Properties.Settings.Default.Voice; speaker.SelectVoice("Microsoft Irina Desktop"); speaker.Rate = 1; speaker.Volume = 100; speaker.Speak(text); speaker.Dispose(); } 


Ich stelle es in die Quelle und stelle mir vor, das Auto sagt! Ich bin ein bisschen überwältigt von Freude. So einfach?!!!

Es bleibt Unsinn: eine männliche Stimme anzubringen. Leider ist in Windows eine russische Stimme vorinstalliert - weiblich: "Microsoft Irina Desktop". Und ich habe einen Chatbot-Jungen, kein Mädchen, ich habe nicht vor, ihm eine Operation zu machen, um das Geschlecht zu ändern.

Google wieder, nach einer Weile bin ich überzeugt, dass es nur wenige russische Männerstimmen gibt. Dies bezieht sich auf freie Stimmen, da bezahlte Dienste nicht für meine singenden Finanzromane bestimmt sind. Es gibt aber auch freie Männerstimmen, zum Beispiel die Stimme "Alexander" der Hausbibliothek RHVoice. Nun, lass es Alexander sein.

Leider ist die Installation (für mich) irgendwie kompliziert. Es gibt aber fertige Baugruppen. Ich lade eine der Assemblys herunter, installiere sie, klettere in die Windows-Einstellungen (Spracherkennung / Text to Speech) und - siehe da! - Ich finde die Stimme von "Aleksandr" neben "Microsoft Irina Desktop". Mit angehaltenem Atem starte ich ...

Alles funktioniert unter Windows!

Ich werde Microsoft Irina Desktop in der Quelle durch Aleksandr ersetzen und ... Keine verdammte Sache funktioniert bereits! Traurig aber nicht tödlich. Wir werden es sofort beheben.

Ich studiere das RHVoice-Projekt, insbesondere die Beschreibung der Konfigurationsdatei, experimentiere auf diese und jene Weise ... Das Ergebnis ist das gleiche: Anstelle von Geräuschen macht Alexander ein unverständliches Knurren oder gar nichts, obwohl Microsoft Irina wie ein Ansager im Fernsehen vorliest.

Ein paar Tage hoffe ich immer noch auf etwas und spiele herum, aber dann gebe ich auf. Ja, meine Hände sind schief. Ich weiß nicht, warum Aleksandr sich weigert zu sprechen, ich weiß es nicht und ich finde keine Antwort in den Foren.

Okay, ich studiere andere freie Stimmen, der Vorteil beträgt nicht mehr als ein Dutzend.

Dann wird mir klar, dass ein Sprachinstallationsprogramm im Paket installiert werden muss, wenn Benutzer von Vanya Reasonable dieselbe Stimme hören sollen, die ich höre. Dies liegt außerhalb meiner Macht und ich zögere es, mich darauf einzulassen. Daher endet Absatz 1, „Synthese von Text in Sprache“, mit einer beschämenden Kapitulation.

Ich treffe grundsätzlich eine Entscheidung:

  1. Lass uns mit einem Hund zur Hölle fahren! Lassen Sie die Chatbot-Benutzer selbst die gewünschten Stimmen installieren und aus der Liste auswählen. Eine Liste vordefinierter Stimmen beizufügen, ist eine machbare Aufgabe.
  2. Ich spreche Vanya Vernünftig mit weiblicher Stimme, weil Vanya jung ist und seine Stimme noch nicht gebrochen ist. "Und es liegt überhaupt nicht daran, dass meine Hände aus meinem Arsch wachsen", überzeuge ich mich durch Psychotherapie.

Mit reinem Herzen komme ich zu Punkt 2: Spracherkennung.

Der zweite Punkt ist entscheidend. Wer braucht einen Chat-Bot, der seine eigenen Phrasen in der Stimme reproduzieren kann, aber die Stimme des Gesprächspartners nicht versteht ?! Im Fehlerfall bricht das Überspielunternehmen zusammen.

Wieder googeln, diesmal hektisch, im letzten Atemzug.

Was wird offenbart? Die Optionen werden meistens bezahlt: Es gibt kostenlose, aber nur wenige für die russische Sprache.

Das Yandex SpeechKit erscheint als das einfachste im Netzwerk, aber ich werde es für später speichern, wenn komplexere Optionen nicht funktionieren. Ich bevorzuge die Offline-Erkennung.

Hier ist eine völlig kostenlose Lösung von CMUSphinx. Ich studiere Rezensionen:

  • Erstens gibt es keine unerhörten Ausrufe: Brüder, alles funktioniert!
  • zweitens ist die Installationsbeschreibung für mich völlig abstrus. Es scheint, dass nach der Installation auch die Bibliothek geschult werden muss!

Abfallen.

Weiter. Microsoft Speech Platform, kostenlos.

Ich google und finde einen Link mit einer zugänglichen Beschreibung sowie dem Quellcode für das Beispiel. Quelle herunterladen, kompilieren. Ich sage "Eins, Zwei" und das Programm gibt den erkannten Text aus. Slave-o-otayet! ..

Etwas verwirrend ist die Tatsache, dass der Text nicht von selbst erkannt wird, sondern erst dem Wörterbuch hinzugefügt werden muss. Aber es ist nicht beängstigend: Anstelle von "eins, zwei" werde ich eine umfangreiche Datei mit Rechtschreibung anhängen.

Ich übertrage den Code aus dem Quellcode des Beispiels in meine Quellen. Ich versuche, den gleichen Effekt zu erzielen. Er wird nicht kompiliert, er fällt bei der Wiederherstellung aus.

Dann lese ich die Kommentare mit meinem linken Auge und stelle fest, dass die Lösung zum Erkennen von Befehlen geeignet ist, aber das Arbeiten mit fortlaufendem Text nicht zulässt. Ich überprüfe nach dem ursprünglichen Beispiel. Ja, "eins, zwei" erkennt und "eins, zwei, drei" ist nicht vollständig: Er hört die drei nicht. In den Kommentaren finde ich mit meinem rechten Auge so etwas wie: "Fortlaufender Text wird gegen eine Gebühr anerkannt" - und die Microsoft Speech Platform existiert für mich nicht mehr.

Ich habe gehört, dass Google seinen Erkenner ein Jahr lang kostenlos zur Verfügung stellt. Ich sollte das überprüfen.

Ich überprüfe. Nicht mehr, soweit ich das beurteilen kann.



Ich schließe nicht aus, dass ich falsch gegoogelt habe, aber beschuldige mich nicht: Ich teile mit meinen Anfängern die persönlichen Erfahrungen, die ich gesammelt habe.

Ich werde Yandex aufgeben. Hier sind die Ausrufe "Brüder, alles funktioniert!" genug, und Privatpersonen können auf individuellen Wunsch den Service kostenlos erhalten, ich habe die Anzeige mit eigenen Augen gesehen. Ich kann über die API eine Verbindung zu SpeechKit herstellen. Anweisungen sind verfügbar.

Ich komme um aufzugeben und was sehe ich? Das Unternehmen hat gerade Yandex.Cloud vorgestellt, wo es den Sprachtechnologiedienst verlegte. Ich bin nicht stolz, ich werde mich in der Cloud registrieren: Wahrscheinlich ist dort alles wie zuvor ...

Und hier wartet ein schrecklicher Mist auf mich:

  1. Erstens können Sie nichts über die kostenlose Verwendung des Erkenners erfahren. Es stimmt, sie geben einen Zuschuss, mit dem Sie für eine Weile für den Service bezahlen können. Okay, ich melde mich weiterhin an ...
  2. Und was ist das für ein Geschäft ?! Um mit dem Dienst arbeiten zu können, muss ich die Details einer Bankkarte angeben. Auszug aus einem Brief, der an mich als Ersteller des Profils in der Cloud gesendet wurde:



Irgendwo habe ich das gesehen: meiner Meinung nach bei Google. Deshalb nahm Yandex ein Beispiel von einem älteren Freund.

Ich bin überrascht über das Fehlen empörter Beiträge zu Habré. Nun, sie benötigen nicht nur Geld für Dienstleistungen, sondern fragen nach dem Schlüssel für die Wohnung, in der sich das Geld befindet! Es macht mich sowieso wütend, dass die Bank nach einiger Zeit möglicherweise nicht mein eigenes Geld nach der Entscheidung des Bankdirektors ausgibt, und hier benötigt der zweite Onkel im Wesentlichen das gleiche Recht. Außerdem, bevor ich mich bereit erklärte, auf die kostenpflichtige Version umzusteigen. Ich habe noch keine Vereinbarung mit diesem Onkel getroffen und gebe mir bereits die Schlüssel für die Wohnung, nur für den Fall. Ah, was für eine Art und umsichtig!

Weißt du, Onkel Yandex, ich habe nichts gegen dich und nutze deine Dienste gerne, aber bis ich die Möglichkeit habe zu wählen, wirst du das Passwort leider nicht von meiner Bankkarte erhalten. Und speziell für Sie, um eine Karte mit zwei Rubeln zu erstellen, habe ich keine Zeit und es ist unrentabel.

Hier fällt ein Hinweis auf die Unvollkommenheit der Spracherkennungstechnologien auf. Der Punkt ist, dass im Moment auf dem Gebiet der Spracherkennung nichts Gutes getan wurde und es sich nicht lohnt, Erkennungssysteme zu verwenden. Ich schwöre und gebe mich dem Gedanken hin, dass Wanja der Intelligente in naher Zukunft nicht sprechen wird.

Der folgende Absatz ist der nächste Artikel über Online-Spracherkennungsdienste. Online-Dienste sind natürlich nicht geeignet. Nun, ich erkenne den Sound in Winforms, aber nicht auf der Seite ... Ohne die geringste Hoffnung klicke ich auf den Link und ...

Am nächsten Tag gewinnt der Chat-Bot an Stimme.

Vorstellung des Zauberstabs: Speechpad.ru . Ich warne Sie, dass der Dienst nur in Chrome funktioniert. Das hält mich nicht auf: Ich benutze Chrome. Und er hat die Engine von Google: Anscheinend bleiben einige mir unbekannte Möglichkeiten, den Dienst zu nutzen, kostenlos.

Das Speechpad verfügt über eine unkomplizierte, aber recht funktionale Oberfläche:



Das Anschließen des Erkenners dauert mindestens einige Zeit.

Nachdem ich die Anweisungen gelesen habe, integriere ich zuerst den Dienst in das Betriebssystem. Die Integration ist zwar bezahlt, aber 100 Rubel pro Monat, unabhängig vom Erkennungsvolumen, sind eine andere Sache! Dies sind keine drakonischen Tarife für jedes anerkannte Stück. Darüber hinaus ist eine Probezeit von zwei Tagen zur Einarbeitung vorgesehen.

Ich registriere mich auf der Website, drücke den Einschaltknopf des Testzeitraums, installiere in einer Minute ein paar der in der Anleitung angegebenen Pribluda und alles funktioniert. Wirkprinzip - Der erkannte Text wird an der Stelle des Cursors hinzugefügt. Wirklich erkannt und wirklich hinzugefügt. Es wird nicht fehlerfrei erkannt, ist aber aus meiner Sicht zufriedenstellend.

Nach ein paar Stunden Test komme ich zu dem Schluss, dass es rationaler ist, die Zwischenablage zu verwenden, und diese Funktion ist kostenlos. Hier natürlich nicht jedermanns Sache:

  • Bei der Integration in das Betriebssystem sollte sich der Cursor auf einem bestimmten Chatbot-Feld befinden. Während des Testens vergesse ich mehrmals und wechsle vom Chat-Bot zu VS, wodurch der erkannte Text in die Quelle getrieben wird.
  • Wenn Sie die Zwischenablage verwenden, ist es dementsprechend verboten, die Zwischenablage zu verwenden. Andernfalls wird der von einem Drittanbieterprogramm in die Zwischenablage kopierte Text sofort im Chatbot angezeigt. Ein paar Mal stoße ich auch darauf, aber bald gewöhne ich mich daran.

Am Ende halte ich in der Zwischenablage an.

Alles, das Problem ist gelöst.

Das Verbinden der vom Chat-Bot gesprochenen Phrasen dauert länger als das Verbinden der Erkennung über das Sprachpad. Ich schwitze viel, bis ich weiß, dass es am einfachsten ist, das Mikrofon auszuschalten. Googeln des Mikrofon-Stummschaltungscodes.

Mikrofon-Ein / Aus-Code
 using NAudio.CoreAudioApi; //-  public static void Mute(bool start) { CoreAudioMicMute CAMM = new CoreAudioMicMute(); CAMM.SetMute(start); } internal class CoreAudioMicMute { private MMDevice[] rgMicDevice; //      int MaxMicro = 0; public CoreAudioMicMute() { try { MMDeviceEnumerator DevEnum = new MMDeviceEnumerator(); MMDeviceCollection devices = DevEnum.EnumerateAudioEndPoints(DataFlow.Capture, DeviceState.Active); // DataFlow.Capture - (     ), //DeviceState.Active -   //   (  ) MaxMicro = 0; for (int i = 0; i < devices.Count; i++) // devices.Count -  ( ) { MMDevice deviceAt = devices[i]; if (deviceAt.DataFlow == DataFlow.Capture && deviceAt.State == DeviceState.Active) // - (     ,   //"if(...",      deviceAt,   - DeviceFriendlyName //  FriendlyName,       ( //   .) { ++MaxMicro; } } //    () () ()   (,   ) rgMicDevice = new MMDevice[MaxMicro]; MaxMicro = 0; for (int i = 0; i < devices.Count; i++) { MMDevice deviceAt = devices[i]; if (deviceAt.DataFlow == DataFlow.Capture && deviceAt.State == DeviceState.Active) //   () { MaxMicro++; rgMicDevice[MaxMicro - 1] = deviceAt; } } } catch (Exception) { } } public void SetMute(bool mute) //,       private MMDevice[] rgMicDevice { try { for (int i = 0; i < MaxMicro; i++) { rgMicDevice[i].AudioEndpointVolume.Mute = mute; //= true -   (  ) } } catch (Exception) { } } } 


* - Kommentare sind nicht meine, sondern kopiert. Ich gebe den Link nicht weiter, da sein Besitzer zugibt, dass er selbst den Code im Darm des englischsprachigen Internets googelt hat.
** - Ich habe geringfügige Änderungen am Code vorgenommen.

Vor der Phrase des Chat-Bots schalte ich das Mikrofon aus. Nach der Phrase, die ich einschalte, hört der Dienst nur meine Phrasen, aber den Chat-Bot nicht.

Hier ist das Endergebnis:

Der Vollständigkeit halber durchsuche ich ein Dutzend Websites mit Spracherkennung. Im Prinzip sind sich alle gleich, und die meisten Suchmaschinen stammen von Google, aber die Möglichkeit, explizit Text in die Zwischenablage zu empfangen, ist nicht vorhanden. Den Kommentaren nach zu urteilen, gibt es an einigen Stellen die Möglichkeit, Websites zu äußern, aber ich beschäftige mich nicht mit diesem Thema. Wie sie sagen, suchen sie nicht gut von gut.

Nun noch ein Problem: Ich denke, es wäre schön, die Animation zu straffen, die die gelieferte Sprache ausspricht. Ich möchte etwas Einfacheres: eine Bibliothek für C # mit einer Auswahl an Zeichen. Aber mir wurde gesagt, dass es in .NET keine gibt ...

Eigentlich ist es das. Der junge Mann hat eine weibliche Stimme, aber im Allgemeinen funktioniert der Sprachmodus.

Ich hoffe, Vanya the Reasonable bald in einer ansehnlicheren Form vorstellen zu können. In der Vergangenheit wurde es erheblich aktualisiert und klüger: Es wurde von Access auf PostgreSQL umgestellt, die Algorithmen wurden verbessert, es war möglich, Wörterbücher zu verbinden und die erste Datenbank mit typischen Antworten aufzubauen - kurz eine andere Person.

Source: https://habr.com/ru/post/de433974/


All Articles