Forum: PC Hard- und Software KI Modell mit Spracherkennung


von Christoph M. (mchris)


Lesenswert?

Hier hat Mathias eine recht gute Anleitung zur Inbetriebnahme eines 
Modells mit llama.cpp beschrieben:
Beitrag "Re: Erfahrungen mit AI-Coding"

Welches Modell ist für die Audiospracherkennung geeignet und wie 
verbinde ich das Ganze mit dem Mikrophoneingang?

von 1N 4. (1n4148)


Lesenswert?

Gemma 4 E2B/E4B kann auch Sprache 
(https://github.com/ggml-org/llama.cpp/issues/21325#issuecomment-4187969225) 
oder eben whisper.cpp

: Bearbeitet durch User
von Christoph M. (mchris)


Lesenswert?

1N 4. schrieb:
> Gemma 4 E2B/E4B kann auch Sprache

Danke für die Antwort.
Jetzt stellt sich mir aber die Frage, wie kommt der Audio-Stream in die 
KI?
Eine Lösung die mir einfallen würde, wäre mit einem Python-Script 
Sprachsignal aufnehmen und als Wav auf die Platte schreiben und dann via 
Script das Wav Signal an das Modell senden. Aber ich vermute stark, dass 
es da einen viel einfacheren Workflow gibt.

von Bradward B. (Firma: Starfleet) (ltjg_boimler)


Lesenswert?


: Bearbeitet durch User
von Christoph M. (mchris)


Lesenswert?

1N 4. schrieb:
> Gemma 4 E2B/E4B kann auch Sprache
> (https://github.com/ggml-org/llama.cpp/issues/21325#issuecomment-4187969225)

Danke für den Link. Ich hatte den erst etwas unterschätzt, weil er auf 
"issues" zeigt.
Mittlerweile ist klar, warum man in Zukunft einen Glasfaseranschluss 
braucht: Im Testscript wird das 16GB Google-Gemma-Modell gezogen und da 
muss man erst mal eine halbe Stunde warten.

Leider scheint auch meine Graphikarte für das Modell zu klein:
1
  File "~/venv/ch/lib/python3.12/site-packages/transformers/core_model_loading.py", line 794, in _materialize_copy
2
    tensor = tensor.to(device=device, dtype=dtype)
3
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4
torch.OutOfMemoryError: CUDA out of memory. Tried to allocate 5.25 GiB. GPU 0 has a total capacity of 7.52 GiB of which 921.12 MiB is free. Including non-PyTorch memory, this process has 6.44 GiB memory in use. Of the allocated memory 1.83 GiB is allocated by PyTorch, and 4.50 GiB is reserved by PyTorch but unallocated.

von Bradward B. (Firma: Starfleet) (ltjg_boimler)


Lesenswert?

> Mittlerweile ist klar, warum man in Zukunft einen Glasfaseranschluss
> braucht: Im Testscript wird das 16GB Google-Gemma-Modell gezogen und da
> muss man erst mal eine halbe Stunde warten.

Herrje, wie haben wir damals Linux installieren können obwohl uns nur 
ein lausiges 56k Modem zur Verfügung stand ... SCNR

von G. K. (zumsel)


Lesenswert?

Bradward B. schrieb:

> Herrje, wie haben wir damals Linux installieren können obwohl uns nur
> ein lausiges 56k Modem zur Verfügung stand ... SCNR

Oder für eine Installation 50 Disketten durchnudeln mussten.

von Bradward B. (Firma: Starfleet) (ltjg_boimler)


Lesenswert?

>> Herrje, wie haben wir damals Linux installieren können obwohl uns nur
>> ein lausiges 56k Modem zur Verfügung stand ... SCNR
>
> Oder für eine Installation 50 Disketten durchnudeln mussten.

Bis es dann die CD's von SuSE gab ...

von Christoph M. (mchris)


Lesenswert?

Bradward B. schrieb:
> speech-to-text engine, bspw.:
> * https://gnulinux.ch/whisper-eine-freie-speech-to-text-engine

Whisper funktioniert, aber schnarchlangsam
1
whisper wieWetter.wav --model medium
2
3
Detected language: German
4
[00:00.000 --> 00:03.000]  Mal eine Frage, wie wird das Wetter heute?

Ich vermute, es wird jedesmal das Modell neu geladen, wenn man whisper 
per Kommandozeile startet. Es muss also eine Möglichkeit geben, das Ding 
resident im Speicher zu halten und die Wav-Junks hin zu schicken.

von Vanye R. (vanye_rijan)


Lesenswert?

> Herrje, wie haben wir damals Linux installieren können obwohl uns nur
> ein lausiges 56k Modem zur Verfügung stand ... SCNR

"Wir" waren auf Party wo uns jemand die ersten 4Stk 5 1/4 ruebergereicht 
hat. :-D

Vanye

von Christoph M. (mchris)


Lesenswert?

1
(ch) christoph@Ryzen5:~/Entwicklung/260202_KI/Spracherkennung/whisper$ python whisperVAD.py 
2
Using device 7 at 16000 Hz
3
Listening...
4
→  In diesem Beitrag geht es um Spracherkennung, hier geht es nicht um Modems oder Datenübertragung.
5
→  Ende
6
→  Ende.
7
Ende verstanden

von Joerg W. (joergwolfram)


Lesenswert?

> Whisper funktioniert, aber schnarchlangsam

Dem kann man etwas abhelfen:

- fater-whisper oder Whisper-Ctranlate2  verwenden
- das large-v3-turbo Modell benutzen

Damit komme ich mit meinem i5-7300 (2600MHz) auf rund 75% 
"Echtzeitgeschwindigkeit" im Batch mode, d.h. für 4min Sample braucht er 
ca. 6min zum konvertieren in Text. Für meine Zwecke war das bis jetzt 
ausreichend. Für die Nachbearbeitung habe ich mir ein Perl-Script 
geschrieben, welches die json in eine RTF Datei umwandelt, mit farbig 
hinterlegtem Text wenn wählbare Wahrscheinlichkeitsgrenzen 
unterschritten werden und Absätzen bei Sprechpausen.

Whisper-Ctranlate2 hat auch einen Live-Modus, mit dem man das zumindest 
testen kann.

Jörg

von Mathias M. (matjes)


Angehängte Dateien:

Lesenswert?

Christoph M. schrieb:
> Leider scheint auch meine Graphikarte für das Modell zu klein:

Das ist halt die langsam implementierte Version.
Llama.cpp ist schneller, kann den Speicher auf GPU+CPU aufteilen.

https://huggingface.co/unsloth/gemma-4-E2B-it-GGUF
https://huggingface.co/unsloth/gemma-4-E4B-it-GGUF/

Passendes gguf laden. Für Audio oder vision brauchst du auch das mmproj 
File.

Mit E2B-Q8 + mmproj-F16.gguf komm ich mit meiner 9070 auf 15x Realtime.
E4B-Q8 ist nur minimal langsamer.

Dümmlicherweise sind die mmproj files Model-spezifisch, auch wenn sie 
gleich heißen...

Ich hab ein populäres Lied transkribieren lassen. Ergebnis ist ... na 
ja. Ist ja aber auch ein Lied mit allem...

von Mathias M. (matjes)


Angehängte Dateien:

Lesenswert?

Whisper gibts auch in schnell:

https://github.com/ggml-org/whisper.cpp

Mit Vulkan auf der 9070 ca 20x Realtime mit dem base.en Model
Mit large-v3 3.3x Realtime
Mit large-v3-turbo 14x realtime


Nochmal Gemma. Diesmal mit mmproj-F32 ... macht irgendwie auch keinen 
Qualitätsunterschied. Wahrscheinlich ist das Lied durch die 
Trainingsdaten verbrannt. Ich hab nochmal ein anderes probiert.

Sowieso sind die Modelle jetzt nicht unbedingt auf Lieder trainiert. IMO 
ein Härtetest.

von Christoph M. (mchris)


Lesenswert?

Mathias M. schrieb:
> Sowieso sind die Modelle jetzt nicht unbedingt auf Lieder trainiert. IMO
> ein Härtetest.

Danke für Deine Hinweise. Meine Spracherkennung muss allerdings gut bei 
der Erkennung der deutschen Sprache sein. Naturgemäß scheint es viel 
mehr englschsprachige Spracherkenner zu geben und vielleicht 
funktionieren die bei Englisch auch besser.

von Bradward B. (Firma: Starfleet) (ltjg_boimler)


Lesenswert?

> Sowieso sind die Modelle jetzt nicht unbedingt auf Lieder trainiert. IMO
> ein Härtetest.

Speechrecognition ist eben ein zu harten Job für die Maschine, selbst 
ein Mensch, der gut zuhören kann, schafft das nur bei eingeschränkten 
Kontext.
IMHO könnte das in einem face2facesetting (Einschluss der non-verbalen 
KOmmunikation (bspw. Minenspiel)) besser laufen.

Und hier in diesem thread wird das auf simple Installation eines 
vorgefertigt-generischen Softwarepaketes reduziert, keinerlei Anpassung 
der Audioaufzeichnung auf menschliches Sprachgehör (bspw. 
Bandbreitenbeschränkung auf 4kHz, Equalizer, Richtmikrofon, ...) das 
kann IMHO nur bescheiden enden.

Vielleicht als Zwischenschritt sich an einer Konversion Bärndütsch (Bern 
deutsch, Schweiz) -> Hochdeutsch versuchen, da braucht es kaum 
Sprachverständniss, fast nur Phonemanpassung.

https://youtu.be/8n0f2sJJfzs?t=122

: Bearbeitet durch User
von Christoph M. (mchris)


Angehängte Dateien:

Lesenswert?

Joerg W. schrieb:
>> Whisper funktioniert, aber schnarchlangsam
>
> Dem kann man etwas abhelfen:
>
> - fater-whisper oder Whisper-Ctranlate2  verwenden

Danke für den Hinweis. Praktischerweise gibt es hier
https://opennmt.net/CTranslate2/quickstart.html
ja auch einen Hinweis, wie man das Ganze an Python anbindet.

Ich hatte gestern das normale Whisper an ein Python-Script gehängt.
Nach ziemlich langem probieren hat es dann geklappt. Die Schwierigkeit 
war, die device-ID des Microphons zu finden und das Script lief nicht 
an, weil die Samplerate des Microphon im Script exakt stimmen muss. 
Obwohl die Samplerate des Treibers 48kHz angezeigt hatte, war das falsch 
und man muss 16kHz einstellen.
Mit dem Sript kann man theoretisch eine Art "Alexa" bauen, mit der man 
dann das Licht steuern könnte.

Im Moment ist die Spracherkennung auf Deutsch eingestellt und es wird 
das Wort "Ende" erkannt, damit ich das Script per Sprachbefehl beenden 
kann:
1
result = model.transcribe(
2
    tmp.name,
3
    language="de",
4
    task="transcribe",   # (not translate!)
5
    temperature=0.0
6
)
7
#result = model.transcribe(tmp.name, language="de")
8
txt=result["text"]
9
print("→", txt)
10
if txt.__contains__("Ende.") :
11
    flag=False
12
    print("Ende verstanden")

von Bradward B. (Firma: Starfleet) (ltjg_boimler)


Lesenswert?

> Im Moment ist die Spracherkennung auf Deutsch eingestellt und es wird
> das Wort "Ende" erkannt, damit ich das Script per Sprachbefehl beenden
> kann:

Na wenn da ende nicht mit "Spende", "Gelände" oder anderen auf "-ende" 
endenden Wörter verwechselt wird.

In der Funkkommunikation gibt es xtra vereinbarte 
Terminierungsworte/-phrasen  (Bspw.: "Over", "Over and Out", "Конец 
передачи") und Bestätigung desselben ("Roger that", "Copy that").
Halt Kontext-sensetiv.

von Christoph M. (mchris)


Lesenswert?

Bradward B. schrieb:
> Na wenn da ende nicht mit "Spende", "Gelände" oder anderen auf "-ende"
> endenden Wörter verwechselt wird.

[ ] Du kannst Pythoncode lesen.

von Bradward B. (Firma: Starfleet) (ltjg_boimler)


Lesenswert?

> [ ] Du kannst Pythoncode lesen.

Der ist halt an der Alltags-Realität vorbei programmiert ... wer spricht 
schon Satzzeichen und regex .

: Bearbeitet durch User
von Norbert (der_norbert)


Lesenswert?

Christoph M. schrieb:
> if txt.__contains__("Ende.") :

Da fragt man sich allerdings was aus dem guten, alten
›if txt.count("Ende.")‹
geworden ist. PEP würde sich freuen, wenn es nicht völlig in 
Vergessenheit geräte.

PS: 3.3.7. Emulating container types

von Christoph M. (mchris)


Lesenswert?

Norbert schrieb:
> Da fragt man sich allerdings was aus dem guten, alten
> ›if txt.count("Ende.")‹
> geworden ist. PEP würde sich freuen, wenn es nicht völlig in
> Vergessenheit geräte.

Wenn man bei Whisper (medium) "Ende" sagt, erzeugt es den Text "Ende.". 
Es scheint also das Wort schon irgendwie zu interpretieren und 
vielleicht gibt es da eine Verbindung zu deinem Text oben.

"Ende." als Programmtermination zu nutzen, ist natürlich schon "Murks". 
Ich fand es aber lustig, das mal so zu machen, weil dadurch quasi eine 
echte Aktion durch das Sprechen ausgelöst wird.

von Norbert (der_norbert)


Lesenswert?

Christoph M. schrieb:
> Norbert schrieb:
>> Da fragt man sich allerdings was aus dem guten, alten
>> ›if txt.count("Ende.")‹
>> geworden ist. PEP würde sich freuen, wenn es nicht völlig in
>> Vergessenheit geräte.
>
> Wenn man bei Whisper (medium) "Ende" sagt, erzeugt es den Text "Ende.".
> Es scheint also das Wort schon irgendwie zu interpretieren und
> vielleicht gibt es da eine Verbindung zu deinem Text oben.
>
> "Ende." als Programmtermination zu nutzen, ist natürlich schon "Murks".
> Ich fand es aber lustig, das mal so zu machen, weil dadurch quasi eine
> echte Aktion durch das Sprechen ausgelöst wird.

Es geht darum, dass man die
1
__wasauchimmer__
 Methoden in diesem Kontext niemals verwendet.

: Bearbeitet durch User
von Sheeva P. (sheevaplug)


Lesenswert?

Christoph M. schrieb:
>
1
> if txt.__contains__("Ende.") :
2
>
1
if "Ende." in txt:

von Christoph M. (mchris)


Lesenswert?

Sheeva P. schrieb:
> if "Ende." in txt:

So ist es schöner. Zugegebenermaßen war ich faul und habe mir die paar 
Zeilen per KI generiert und dachte, die wird schon wissen, was sie tut 
;-)

von Christoph M. (mchris)


Angehängte Dateien:

Lesenswert?

Wenn ich das richtig interpretiere, sollten die kleinen gemma4 Modelle 
Spracherkennung können (siehe Zeile Audio):
https://ollama.com/library/gemma4

Wenn man mit Open-webgui das Modell fragt, gibt es das aber scheinbar 
doch nicht (sie Screeshot).

von Rolf (rolf22)


Lesenswert?

Bradward B. schrieb:
> speech-to-text engine

Ist jedenfalls keine KI-Neuheit.

Diktiersoftware für den PC war schon in Windows Vista, also vor ca. 20 
Jahren integriert, nur wussten das die meisten PC-Nutzer gar nicht.
Und schon vor circa 30 Jahren konnte man "Dragon Natural Speaking" für 
Windows kaufen.

Manche Übersetzer haben das schon damals eingesetzt. Problem: Man muss 
druckreif formuliert sprechen können, sonst frisst die Zeit für 
Änderungen/Verbesserungen die durch das Diktieren (statt Tippen) 
ersparte Zeit auf.

von Christoph M. (mchris)


Lesenswert?

Rolf schrieb:
> Bradward B. schrieb:
>> speech-to-text engine
>
> Ist jedenfalls keine KI-Neuheit.

Klar. Ist ein wenig so wie wenn man sagen würde, ein Audi-Etron sei auch 
keine Neuigkeit, weil Karren mit 4 Rädern gab es auch schon vor 2000 
Jahren.

von Εrnst B. (ernst)


Lesenswert?

Christoph M. schrieb:
> Wenn ich das richtig interpretiere, sollten die kleinen gemma4 Modelle
> Spracherkennung können (siehe Zeile Audio):

Wenn Ollama keine API/Interface dazu bereitstellt, hilft es nichts wenn 
das Modell Audio könnte.

Du kannst das gemma4-Modell z.B. über PyTorch nutzen, da geht das.

Evtl. auch, wenn du direkt llama.cpp nutzt, ohne die 
Ollama-Abstraktionsschicht außenherum.
Aber die schreiben "Audio is highly experimental and may have reduced 
quality."

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.