Groq Whisper API 进阶:使用提示词精准控制转录风格和内容,结合 spaCy 实现精准分句
引言
昨天介绍了极速语音转录: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
(数组)——转录文本的片段及其对应信息。
区别
JSON 格式只包含转录出的文本内容 ( text
)。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 支持使用提示来改善转录结果。
模型会尝试匹配提示的风格,例如,如果提示中使用了大写和标点符号,则模型更有可能在转录结果中也使用它们。
提示的局限性: 目前的提示系统比其他语言模型要有限得多,只能对生成的音频进行有限的控制。
提示的应用场景
纠正特定单词或缩写:例如,以下提示可以改善 "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."
)保留分割文件上下文:可以使用前一段的转录文本作为提示,帮助模型理解上下文,提高后续片段的转录准确性。
注意:模型只会考虑提示的最后 224 个 tokens,忽略之前的部分。
添加标点符号:使用包含标点符号的简单提示可以避免模型在转录中省略标点符号。例如:
"Hello, welcome to my lecture."
提示词里没有标点符号
提示词里有标点符号
当设置的提示词里有多个冒号时,可以看出生成的结果里有多个冒号。
保留填充词:使用包含填充词的提示可以保留音频中的填充词。例如:
"Umm, let me think like, hmm... Okay, here's what I'm, like, thinking."
指定书写风格:
对于存在多种书写方式的语言(例如简体中文和繁体中文),可以使用指定书写风格的提示来引导模型输出。
这一点尤为关键。我曾使用过一些语音转录应用,它们生成的文字经常在简体和繁体中文之间随意切换,导致转录结果不统一,阅读起来也不太流畅。好在我们可以通过在提示词中指定所需的文字样式,来解决这个问题。
固定大小写
在这种情况下,模型会尽量遵循提示中的风格,即使用小写字母并避免标点符号。
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)spaCy 经过优化,能够快速处理大规模文本数据。(2)使用了底层的 Cython 代码,提高了性能。 工业级别的精度:提供了经过预训练的模型,适用于多种语言和任务,具有很高的准确度。 内置支持多种语言:支持多种语言,包括英语、中文、德语、法语、西班牙语等。 丰富的功能集:提供了词性标注、依存句法分析、命名实体识别、词向量、文本分类等多种 NLP 功能。 开源和可扩展:spaCy 是开源的,允许用户扩展其功能和模型。
主要功能
分词:将文本拆分为单词、标点符号等最小单元(token)。 词性标注:自动标注每个词的词性(如名词、动词、形容词等)。 依存句法分析:解析句子中的语法结构,识别单词之间的依存关系。 命名实体识别 (NER):识别文本中的实体(如人名、地名、组织名等)。 词向量和相似性:使用预训练的词向量模型,计算词语和文档之间的相似性。 文本分类:分类文本到预定义的类别。 语言检测:识别文本使用的语言。
精选历史文章,请看这里:
Open Interpreter 本地模型深度体验:功能升级,离 LLM OS 还有多远?
推荐一个 GPT + DALLE 提示词模板,完美连续生成16页儿童绘本或科技漫画