发布于 2026-01-06 0 阅读
0

🔉从声音到洞察:利用人工智能🤖进行音频文件转录和分析!🚀 由 Mux 呈现的 DEV 全球展示挑战赛:展示你的项目!

🔉从声音到洞察:利用人工智能🤖进行音频文件转录和分析!🚀

由 Mux 赞助的 DEV 全球展示挑战赛:展示你的项目!

如果我们得到一个音频文件,有没有办法确定特定词语出现的时间戳?有没有办法提取出与某个主题相关的所有关键词?

借助人工智能🤖,我们不仅可以做到这一切,还能做更多!关键在于能够将音频解析成文本,从而让我们利用语言模型的自然语言处理能力,对我们的数据进行复杂的分析和推断。

无论你是谁,这种音频转录和分析方法都将增强你与音频文件互动以及从中提取知识的方式。

让我们看看如何用……来实现这一点llmware


人工智能工具🤖

在这个例子中,我们将使用两种模型。

第一个是 OpenAI 的 Whisper 模型。该模型可以让我们解析音频文件,即将音频转换为文本。

第二个工具是LLMWare公司的SLIM(结构化语言指令模型)提取工具,我们将用它来询问有关音频的问题。它是名为slim-extract的大型模型的GGUF量化版本。这意味着我们的模型,即SLIM提取工具,是原始模型的更小、更快的版本。这使得我们可以在本地CPU上运行它,而无需GPU等强大的计算资源!

既然如此,我们就从例子开始吧。


步骤一:加载音频文件🔉🔉

如果您有想要运行示例的音频文件,请随意使用这些文件并进行input_folder适当设置;如果没有,该llmware库为您提供了几组示例音频文件!



voice_sample_files = Setup().load_voice_sample_files(small_only=False)
input_folder = os.path.join(voice_sample_files, "greatest_speeches")


Enter fullscreen mode Exit fullscreen mode

现在,我们正在加载greatest_speeches音频文件集。


步骤二:解析音频文件📝

现在我们有了音频文件,就可以着手将它们解析成文本块了。请记住,我们需要使用 WhisperCPP 模型来完成这项工作。不过幸运的是,您无需直接与模型交互,因为库Parser中的类llmware会为您处理这一切!



parser_output = Parser(chunk_size=400, max_chunk_size=600).parse_voice(input_folder, write_to_db=False, copy_to_library=False, remove_segment_markers=True, chunk_by_segment=True, real_time_progress=False)


Enter fullscreen mode Exit fullscreen mode

这里,` chunk_sizeand`max_chunk_size表示每个已解析文本块的大小。我们将包含音频文件的文件夹传递给parse_voice()该类的函数Parser

该函数确实接受更多关于如何解析音频的可选参数,但在这个例子中我们可以忽略它们。


步骤 3:文本搜索🕵️

现在让我们对解析后的音频进行文本搜索。我们可以尝试搜索单词“president”。这意味着我们要找到音频及其对应文本中所有包含单词“president”的部分。我们可以使用库中类fast_search_dicts()的函数来实现这一点Utiliesllmware



results = Utilities().fast_search_dicts("president", parser_output)


Enter fullscreen mode Exit fullscreen mode

第四步:对文本块进行 AI 判断 🤖

现在我们有了包含“总统”一词的文本块列表,让我们使用人工智能模型来识别所选文本块中提到的总统是谁。



extract_model = ModelCatalog().load_model("slim-extract-tool", sample=False, temperature=0.0, max_output=200)


Enter fullscreen mode Exit fullscreen mode

这里,我们使用该类ModelCatalog来加载我们的 SLIM 提取工具。现在让我们遍历每个包含“president”的文本块。



final_list = []
for i, res in enumerate(results):
    response = extract_model.function_call(res["text"], params=["president name"])


Enter fullscreen mode Exit fullscreen mode

我们正在创建一个function_call()用于“总统姓名”的搜索框。以下是我们要求工具识别文本块中总统姓名的方式。


第五步:分析我们的输出结果🔍

function_call()函数原本会返回一个包含大量函数调用数据的字典。我们特别需要的是president_name字典中的某个键。



extracted_name = ""
if "president_name" in response["llm_response"]:
    if len(response["llm_response"]["president_name"]) > 0:
        extracted_name = response["llm_response"]["president_name"][0].lower()
    else:
        print("\nupdate: skipping result - no president name found - ", response["llm_response"], res["text"])


Enter fullscreen mode Exit fullscreen mode

如果键的值president_name是一个非空字符串,则将其值存储在变量中extracted_name。否则,表示未找到结果,并将此信息打印出来。

现在让我们看看总统的名字是否与这份名单中的任何一位美国总统相符:



various_american_presidents = ["kennedy", "carter", "nixon", "reagan", "clinton", "obama"]


Enter fullscreen mode Exit fullscreen mode

为此,我们将检查音频中是否extracted_name包含这些美国总统的名字。如果找到匹配项,我们将把它添加到我们的final_list字典中,字典中包含该名字在音频中的位置以及它所在的文本块等信息。



for president in various_american_presidents:
    if president in extracted_name:
        final_list.append({"key": president, "source": res["file_source"], "time_start": res["coords_x"], "text": res["text"]})


Enter fullscreen mode Exit fullscreen mode

结果出来了!✅

现在让我们输出结果final_list



for i, f in enumerate(final_list):
    print("final results: ", i, f)


Enter fullscreen mode Exit fullscreen mode

这是运行代码后,输出结果中一个搜索结果的显示示例。

示例输出

这里,我们得到一个包含以下内容的 Python 字典作为输出:

  • key:被确认的总统姓名,这里是“肯尼迪”。
  • source:这段音频文件就位于这个文件中,文件名为“ConcessionStand.wav”。
  • time_start:提及总统的时间戳(以秒为单位),此处为 339.9 秒
  • text:其中包含找到该名称的文本块。

结论

大功告成!总结一下,我们成功地将音频文件解析成文本,在文本中搜索“总统”一词,然后使用 SLIM 提取工具识别出文本片段中提到的具体总统!记住,这一切都是在单核 CPU 上完成的!💻

请务必观看我们在 YouTube 上发布的关于此示例的视频!

如果你读到这里,非常感谢你抽出时间和我们一起探讨这个话题❤️!想要了解更多类似内容,请访问我们的 dev.to 页面

我们的 GitHub上提供了更多类似示例的源代码。点击此处查看此示例

我们的存储库中还包含此示例的 notebook,您可以使用 Google Colab、Jupyter 或任何其他支持 .ipynb notebook 的平台自行运行。

加入我们的 Discord,与不断壮大的 AI 爱好者社区互动交流,无论您的经验水平如何!

请访问我们的网站llmware.ai了解更多信息和最新动态。

文章来源:https://dev.to/llmware/from-sound-to-insights-using-ai-for-audio-file-transcription-and-analysis-36ek