# Tag Audio ```elixir Mix.install( [ {:audio_tagger, path: "/Users/noah/development/audio_tagger"}, {:kino_bumblebee, "~> 0.4.0"}, {:exla, ">= 0.0.0"}, {:explorer, "~> 0.7.0"}, {:kino_explorer, "~> 0.1.11"} ], config: [ nx: [default_backend: EXLA.Backend] # exla: [ # clients: [ # cuda: [ # platform: :cuda, # lazy_transfers: :never # ] # ] # ] ] ) ``` ## Step 1: Create Vector Embeddings for ICD-10 Codes ```elixir # Use sentence-transformers/all-MiniLM-L6-v2 to create vectors for each medical code description tmpfile = Path.join(System.tmp_dir(), "icd10_vector_tensors.bin") if File.exists?(tmpfile) do IO.puts("Found pre-calculated ICD-10 vector embeddings. Skipping embedding.") else AudioTagger.SampleData.icd10_codes() |> AudioTagger.Classifier.SemanticSearch.precalculate_label_vectors(tmpfile) IO.inspect(tmpfile, label: "Wrote vector embeddings") end ``` ## Step 2: Transcribe Audio Recording ```elixir # 1 - Prepare model and choose audio file featurizer = AudioTagger.Transcriber.prepare_featurizer() audio_input = Kino.Input.audio("Audio", sampling_rate: featurizer.sampling_rate) ``` ```elixir # 2 - Transcribe audio recording to text (using openai/whisper-tiny) # Takes 5–6s for about a minute of audio chosen_audio = Kino.Input.read(audio_input) file = chosen_audio.file_ref |> Kino.Input.file_path() |> File.read!() transcription_df = AudioTagger.Transcriber.transcribe_audio(featurizer, file, chosen_audio.num_channels) # Show a sample of rows transcription_df |> Explorer.DataFrame.head(3) ``` ## Step 3: Tag Transcribed Audio ```elixir labels_df = AudioTagger.SampleData.icd10_codes() tagged_audio = transcription_df # |> AudioTagger.Classifier.SemanticSearch.tag(labels_df, tmpfile) |> AudioTagger.Classifier.SemanticSearch.tag( labels_df, "/var/folders/8g/1hrq420n22b05m6k98mxqlrr0000gn/T/icd10_vector_tensors.bin" ) ```