查看原文
其他

Groq Whisper API 进阶:使用提示词精准控制转录风格和内容,结合 spaCy 实现精准分句

思辨view kate人不错
2024-07-24

引言

昨天介绍了极速语音转录:Groq 上线 Whisper Large-V3 模型,简单易用免费体验。

今天,我将深入探讨 Groq 的 Whisper Large-V3 模型,为大家详细介绍其关键参数和高级用法,帮助大家更好地利用这一强大的语音转录工具,提升转录质量和效率。

需要注意,Groq's Whisper API  不支持 timestamp_granularities[]。

语音转文字 API  参数说明

temperature:  采样温度,范围 0 到 1,默认为 0。

  • 值越大(如 0.8)输出越随机。

  • 值越小(如 0.2)输出越集中和确定性。

  • 设置为 0 时,模型将使用对数概率自动增加温度,直到达到特定阈值。

  • temperature 参数影响输出的随机性,0 为自动模式。

    这里建议设置为0.2,当我设置为0的时候,有时出现奇怪单词重复问题。

音频翻译 API  参数说明

temperature:  采样温度,范围 0 到 1,默认为 0。

  • 值越大(如 0.8)输出越随机。

  • 值越小(如 0.2)输出越集中和确定性。

  • 设置为 0 时,模型将使用对数概率自动增加温度,直到达到特定阈值。

  • temperature 参数影响输出的随机性,0 为自动模式。

    同样,这里建议设置为0.2。

注意

  • 目前仅支持翻译成 英语
  • prompt 参数应使用 英文

语音转录响应格式

response_format: 用于定义输出响应的格式。

默认值为 "json"。

设置为 "verbose_json" 可接收音频片段的时间戳。

设置为 "text" 以返回文本响应。

不支持 vtt 和 srt格式

我们可以将verbose_json的结果发给GPT,让它处理。

JSON 格式

text (字符串)——转录出的文本内容。

示例:

{
  "text""Imagine the wildest idea that you've ever had, and you're curious about how it might scale to something that's a 100, a 1,000 times bigger. This is a place where you can get to do that."
}

Verbose JSON 格式

language (字符串)——输入音频的语言。

duration (字符串)——输入音频的时长。

text (字符串)——转录出的文本内容。

words (数组)——提取出的单词及其对应的时间戳。

segments (数组)——转录文本的片段及其对应信息。

区别

  1. JSON 格式只包含转录出的文本内容 (text)。
  2. Verbose JSON 格式包含更多详细信息,例如语言、时长、单词时间戳和文本片段信息。

这样处理较长的音频输入

Groq's Whisper API  默认只支持小于 25 MB 的音频文件。

解决方案

如果音频文件超过 25 MB,需要将其分割成多个不超过 25 MB 的片段,或者使用压缩音频格式。

使用 PyDub 分割音频

可以使用开源 Python 包 PyDub 来分割音频:

from pydub import AudioSegment

song = AudioSegment.from_mp3("good_morning.mp3")

# PyDub 以毫秒为单位处理时间
ten_minutes = 10 * 60 * 1000

first_10_minutes = song[:ten_minutes]

first_10_minutes.export("good_morning_10.mp3", format="mp3")

使用提示 (Prompt) 提高转录质量

Whisper API 支持使用提示来改善转录结果。

模型会尝试匹配提示的风格,例如,如果提示中使用了大写和标点符号,则模型更有可能在转录结果中也使用它们。

提示的局限性: 目前的提示系统比其他语言模型要有限得多,只能对生成的音频进行有限的控制。

提示的应用场景

  1. 纠正特定单词或缩写:例如,以下提示可以改善 "DALL·E" 和 "GPT-3" 的转录,避免被错误识别为 "GDP 3" 和 "DALI":"The transcript is about OpenAI which makes technology like DALL·E, GPT-3, and ChatGPT with the hope of one day building an AGI system that benefits all of humanity"

    通过 prompt 参数传递包含正确拼写的字典。

    prompt="ZyntriQix, Digique Plus, CynapseFive, VortiQore V8, EchoNix Array, OrbitalLink Seven, DigiFractal Matrix, PULSE, RAPT, B.R.I.C.K., Q.U.A.R.T.Z., F.L.I.N.T."
    )
  2. 保留分割文件上下文:可以使用前一段的转录文本作为提示,帮助模型理解上下文,提高后续片段的转录准确性。

    注意:模型只会考虑提示的最后 224 个 tokens,忽略之前的部分。

  3. 添加标点符号:使用包含标点符号的简单提示可以避免模型在转录中省略标点符号。例如:"Hello, welcome to my lecture."

    提示词里没有标点符号

    提示词里有标点符号

    当设置的提示词里有多个冒号时,可以看出生成的结果里有多个冒号。

  4. 保留填充词:使用包含填充词的提示可以保留音频中的填充词。例如:"Umm, let me think like, hmm... Okay, here's what I'm, like, thinking."

  5. 指定书写风格:

    对于存在多种书写方式的语言(例如简体中文和繁体中文),可以使用指定书写风格的提示来引导模型输出。

    这一点尤为关键。我曾使用过一些语音转录应用,它们生成的文字经常在简体和繁体中文之间随意切换,导致转录结果不统一,阅读起来也不太流畅。好在我们可以通过在提示词中指定所需的文字样式,来解决这个问题。

  6. 固定大小写

    在这种情况下,模型会尽量遵循提示中的风格,即使用小写字母并避免标点符号。

    prompt = (
      "please use lowercase letters and avoid punctuation. "
      "this is a sample text to demonstrate the desired style "
      "just like this without any capital letters or punctuation marks"
    )

给转录的段落分句

我是从博主 @eviljer 处知道 spacy 库。

给转录后的中文段落分句

使用前,先运行

python -m spacy download zh_core_web_md

之后运行

import spacy

# 确保已安装模型
try:
    nlp = spacy.load("zh_core_web_md")  # 使用中文模型
except OSError:
    from spacy.cli import download
    download("zh_core_web_md")
    nlp = spacy.load("zh_core_web_md")

# 假设 input.txt 是需要处理的文本文件
with open("input.txt""r", encoding="utf-8") as file:
    input_text = file.read()

# 替换英文逗号为中文全角逗号
input_text = input_text.replace(","",")

doc = nlp(input_text)
assert doc.has_annotation("SENT_START")

# 将结果保存到 output.txt 文件中
with open("output.txt""w", encoding="utf-8") as output_file:
    for sent in doc.sents:
        output_file.write(sent.text + "\n")

转换后效果

小tip:

在为 Whisper 模型设置初始提示 (Prompt) 时,加入几句标点正确、语义完整的句子作为示例,有助于模型更好地学习如何对语音进行断句。

给转录后的英文段落分句

使用前,先运行

python -m spacy download en_core_web_md

之后运行

import spacy

# 确保已安装模型
try:
    nlp = spacy.load("en_core_web_md")
except OSError:
    from spacy.cli import download
    download("en_core_web_md")
    nlp = spacy.load("en_core_web_md")

# 假设 input.txt 是需要处理的文本文件
with open("input.txt""r") as file:
    input_text = file.read().replace('\n''')

doc = nlp(input_text)
assert doc.has_annotation("SENT_START")

# 将结果保存到 output.txt 文件中
with open("output.txt""w") as output_file:
    for sent in doc.sents:
        output_file.write(sent.text + "\n")

结语

使用提示可以改善 Whisper API 的转录质量,例如纠正单词、保留上下文、添加标点符号等。

如果有不明白的地方,建议先看下我昨天的关于 Whisper API 的文章。

欢迎在评论区留言,让我们一起交流进步。

拓展阅读

spaCy 是一个高级的自然语言处理 (NLP) 库,适用于 Python 和 Cython。它旨在提供快速、准确和用户友好的工具,用于处理和分析文本数据。

https://spacy.io/

以下是 spaCy 的一些主要特点和功能:

主要特点

  1. 快速和高效:(1)spaCy 经过优化,能够快速处理大规模文本数据。(2)使用了底层的 Cython 代码,提高了性能。
  2. 工业级别的精度:提供了经过预训练的模型,适用于多种语言和任务,具有很高的准确度。
  3. 内置支持多种语言:支持多种语言,包括英语、中文、德语、法语、西班牙语等。
  4. 丰富的功能集:提供了词性标注、依存句法分析、命名实体识别、词向量、文本分类等多种 NLP 功能。
  5. 开源和可扩展:spaCy 是开源的,允许用户扩展其功能和模型。

主要功能

  1. 分词:将文本拆分为单词、标点符号等最小单元(token)。
  2. 词性标注:自动标注每个词的词性(如名词、动词、形容词等)。
  3. 依存句法分析:解析句子中的语法结构,识别单词之间的依存关系。
  4. 命名实体识别 (NER):识别文本中的实体(如人名、地名、组织名等)。
  5. 词向量和相似性:使用预训练的词向量模型,计算词语和文档之间的相似性。
  6. 文本分类:分类文本到预定义的类别。
  7. 语言检测:识别文本使用的语言。

精选历史文章,请看这里:

Open Interpreter 本地模型深度体验:功能升级,离 LLM OS 还有多远?

推荐一个 GPT + DALLE 提示词模板,完美连续生成16页儿童绘本或科技漫画

Manim 动画制作不再难:ChatGPT + Graphviz/Mermaid 助你快速上手

轻松构建你的第一个 AI 项目:使用 Replit 和热门 API 搭建你的应用

继续滑动看下一个
kate人不错
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存