AI 大模型之美
徐文浩
bothub 创始人
32335 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 33 讲
AI 大模型之美
15
15
1.0x
00:00/00:00
登录|注册

19|Whisper+ChatGPT:请AI代你听播客

利用 SRT/VTT 时间标注
精确时间切割问题
使用工具分割
OpenAI 限制文件大小
仅支持英文翻译
同时转录和翻译
language: 指定音频语言
temperature: 概率分布调整
response_format: 返回文件格式
提高转录准确性
纠正专有名词
引导模型
需要添加标点符号
中英文混合识别
李沐老师论文精读系列
音频分片转录问题
自动化播客小结应用
使用 llm-index
内容小结
模型尺寸选择
Colab 环境支持
使用 GPU
OpenAI 开源模型
PyDub 分割 MP3
FFmpeg 转换格式
分割音频
translation 接口
支持参数
Prompt 参数
转录效果
API 服务提供
OpenAI 开源
语音识别模型
推荐阅读
思考题
结合 ChatGPT
本地转录
处理大文件
转录与翻译
Whisper API
Whisper+ChatGPT 播客转录与总结

该思维导图由 AI 生成,仅供参考

你好,我是徐文浩。
今天,我们的课程开始进入一个新的主题了,那就是语音识别。过去几周我们介绍的 ChatGPT 虽然很强大,但是只能接受文本的输入。而在现实生活中,很多时候我们并不方便停下来打字。很多内容比如像播客也没有文字版,所以这个时候,我们就需要一个能够将语音内容转换成文本的能力。
作为目前 AI 界的领导者,OpenAI 自然也不会放过这个需求。他们不仅发表了一个通用的语音识别模型 Whisper,还把对应的代码开源了。在今年的 1 月份,他们也在 API 里提供了对应的语音识别服务。那么今天,我们就一起来看看 Whisper 这个语音识别的模型可以怎么用。

Whisper API 101

我自己经常会在差旅的过程中听播客。不过,筛选听什么播客的时候,有一个问题,就是光看标题和简介其实不是特别好判断里面的内容我是不是真的感兴趣。所以,在看到 Whisper 和 ChatGPT 这两个产品之后,我自然就想到了可以通过组合这两个 API,让 AI 来代我听播客。我想通过 Whisper 把想要听的播客转录成文字稿,再通过 ChatGPT 做个小结,看看 AI 总结的小结内容是不是我想要听的。
我前一阵刚听过一个关于 ChatGPT 的播客,我们不妨就从这个开始。我们可以通过 listennotes 这个网站来搜索播客,还能够下载到播客的源文件。而且,这个网站还有一个很有用的功能,就是可以直接切出播客中的一段内容,创建出一个切片(clip)。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

OpenAI最近发布了名为Whisper的通用语音识别模型,填补了ChatGPT只能接受文本输入的不足,使用户可以通过语音输入来使用AI服务。Whisper的API简单易用,用户只需调用transcribe函数,就能将音频文件转录成文字。通过对转录结果的分析,发现语音识别的效果非常好,能够准确识别中英文混合的内容。虽然转录出来的内容缺乏标点符号,但通过在调用函数时传入Prompt参数,可以解决这一问题。此外,通过修改Prompt参数,还可以解决中英文混排内容中多余空格的问题。Whisper模型的一大亮点是能够在音频内容的转录之前提供一段Prompt,来引导模型更好地做语音识别。除了模型名称、音频文件和Prompt之外,transcribe接口还支持response_format、temperature和language等参数,用户可以根据需求进行调整。这一技术突破为用户提供了一种便捷的语音转文本解决方案,为实际生活中的语音内容转换成文本提供了新的可能性。 Whisper的API还提供了一个名为translation的接口,可以在转录音频的同时直接将语音翻译成英文。然而,该接口只能将内容翻译成英文,无法支持其他语言,这可能对一些用户造成不便。另外,为了处理大文件,可以通过分割音频来进行处理,将大的音频文件分割成小片段进行转录,然后再合并。另一种选择是直接使用OpenAI开源的Whisper模型在本地进行转录,避免数据传输和隐私泄露的风险。通过这些方法,用户可以灵活地选择适合自己需求的转录方式。 总的来说,Whisper的发布为用户提供了更多选择,使得语音转文本的应用更加便捷和灵活。同时,结合ChatGPT进行内容小结,也为用户提供了更多的应用场景和可能性。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《AI 大模型之美》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(16)

  • 最新
  • 精选
  • Toni
    将长音频分片转录时,如果完全按照精确的时间去切割音频文件,很有可能在结尾处裁出一个不完整的句子,而下一段的开头也可能会是半句话。如何解决,思考题很实用。 下面是一种思路: 1. 从计划切割的位置上取出一小片。比如音频文件长约2小时,初步计划分成四个文件,每份约长30分钟,将30分到30分10秒的音频切出来。实现方法 extract = audio_long[StartTime:EndTime] extract.export("cutat30mins.mp3", format="mp3") 2. 找出这个10秒切片中的断句位置,实现方法 from pydub.silence import detect_silence piece = AudioSegment.from_mp3("cutat30mins.mp3") silent_ranges = detect_silence(piece, min_silence_len=500, silence_thresh=-40) 参数代表静音时长和分贝 3. 选上面断句位置中的第一个的起点作为第一段半小时音频文件的结尾。这样就得到 1. 中的EndTime 准确值,而不是在一句话的中间。 测试: 选 podcast_clip.mp3 作为测试文件,时长3分钟。初选2分钟处分割。 取 2 分钟到 2 分钟10秒 的一个小片段,得出静音数列 [[793, 1803], [4991, 5813]] file = = AudioSegment.from_mp3("podcast_clip.mp3") EndTime = 2*60*1000 + 793 = 120793 part_1 = file[:EndTime] StartTime = 2*60*1000 + 1803 = 121803 part_2 = file[StartTime:] 结果: part_1 结束句 '证实发布后会有怎样的惊喜,我们都拭目以待。' part_2 开始句 'AI无疑是未来几年最令人兴奋的变量之一。' 还会有其它的解决方法。

    作者回复: 👍

    2023-04-20归属地:瑞士
    28
  • Toni
    尝试着将李沐老师视频 'AutoCut--如何用 Whisper 来剪辑视频' 的内容进行了概要信息提取。分三步,1 视频读取和语音识别,2 将大块文件裁成小块,使得输入的 Token 数能满足 OpenAI 的要求,3 分块总结。 1. 从 B 站读取视频 (Bilibili Video),实现代码如下: !pip install bilibili-api from langchain.document_loaders.bilibili import BiliBiliLoader loader_bi = BiliBiliLoader(["https://www.bilibili.com/video/BV1Pe4y1t7de/"]) result_bi = loader_bi.load() 2. 数据分割,实现代码如下: from langchain.text_splitter import RecursiveCharacterTextSplitter text_splitter_bi = RecursiveCharacterTextSplitter(chunk_size=2000, chunk_overlap=20) texts_bi = text_splitter_bi.split_documents(result_bi) 调整参数 chunk_size 决定切割的大小,在本例中,裁成了6段,查看代码如下: len(texts_bi) 6 3. 给出视频内容提要,实现代码如下: from langchain.prompts import PromptTemplate llm = OpenAI(temperature=0) prompt_template = """Answer in Chinese. Summarize this conversation {text}. Do NOT write sentences that has no sense.""" prompt_template2 = """Answer in Chinese. Choose the more relevant phrases of the following text and summarize them {text}.""" PROMPT = PromptTemplate( template=prompt_template, input_variables=["text"] ) PROMPT2 = PromptTemplate( template=prompt_template2, input_variables=["text"] ) overall_bi = load_summarize_chain(llm, chain_type="map_reduce", map_prompt=PROMPT, combine_prompt=PROMPT2, return_intermediate_steps=True, verbose=True) summarize_bi = overall_bi( {"input_documents": texts_bi},return_only_outputs=True) 输出结果如下: 这段视频介绍了一个叫OpenAI Whisper的剪视频小工具,并附上了一个GitHub链接,... 我们演示了如何使用OpenAI的Whisper模型来识别视频中的字幕,并且可以选择不同的模型,从tiny到large ... 以提高识别精度。 选择Small模型可以满足大部分需求,...可以节省时间。 ... 这次讨论的主要内容是Whisper这个模型的使用,它在中文语谅上的表现不是很好,但是在带有英文词汇的视频中,它的识别能力还是很强的, ... --- 上面提供了一种提取视频核心思想的方法,还会有更好的。

    作者回复: 👍

    2023-04-23归属地:瑞士
    3
    11
  • Geek_00eb03
    老师,运行代码报错, 能帮忙看看什么原因吗? --> 157 raise ValueError( 158 "A single term is larger than the allowed chunk size.\n" 159 f"Term size: {num_cur_tokens}\n" 160 f"Chunk size: {self._chunk_size}" 161 f"Effective chunk size: {effective_chunk_size}" 162 ) 163 # If adding token to current_doc would exceed the chunk size: 164 # 1. First verify with tokenizer that current_doc 165 # 1. Update the docs list 166 if cur_total + num_cur_tokens > effective_chunk_size: 167 # NOTE: since we use a proxy for counting tokens, we want to 168 # run tokenizer across all of current_doc first. If 169 # the chunk is too big, then we will reduce text in pieces ValueError: A single term is larger than the allowed chunk size. Term size: 414 Chunk size: 357Effective chunk size: 357

    作者回复: 1. 换一下 splitter,用SpacyTextSplitter以及对应中文的模型 2. 设置一下 chunk_size (大一点),chunk_overlap(小一点)

    2023-04-20归属地:湖北
    2
    1
  • 胡萝卜
    能做成流式的音转文吗?

    作者回复: 已经有人做了,可以去看 https://github.com/openai/whisper/discussions/2

    2023-04-19归属地:上海
    1
  • 子辰
    默认就是跑GPU的吗?我用 mac 看活动监视器好像是跑在 CPU 上的。。。

    作者回复: Mac下不是NVidia的显卡,是跑在CPU上的,可以看看 Whisper cpp之类的项目,有人移植了可以用M1/M2的GPU

    2023-04-27归属地:上海
    2
  • 詹杰
    老师,whisper开源模型本地部署支持批量推理不?怎么批量推理呢?目前就是需要完成很多很多的语言识别任务,效率跟不上,想请教老师怎么解决呢

    作者回复: 看一下 whisper cpp 或者 whisper accelerated 或者 faster-whisper 这些项目。 应该有挺多人在做Whisper的加速方案的,应该可以做到5分钟以内转录60分钟的音频的。

    2023-04-25归属地:四川
  • 詹杰
    徐老师,我想问一个提高开源whisper模型计算效率的问题,我用多线程去调度解析会报错,请问如何提高效率呢,我只能再买显卡,多部署几台服务嘛?

    作者回复: 有 Whisper-Accelerated,通过CPU多线程 多GPU也可以啊,指定每个任务使用的device就好了。

    2023-04-25归属地:四川
  • Geek_00eb03
    普通服务器的CPU 能不能跑起来whisper 开源模型?

    作者回复: whisper用CPU也能跑,就是比起GPU还是慢一些。可以看看 whisper cpp或者 whisper accelerated 之类的项目

    2023-04-20归属地:湖北
  • 安菲尔德
    老师,请教一个非技术问题,peo.com这个网站是收费的么,如果不收费的话,他们里面chatgpt功能调用的是openai的接口实现的么,如果是的话,那岂不是很费钱,他们怎么赚钱呢?

    作者回复: 有付费订阅,付费订阅才能无限使用 GPT-4 和 Claude+。

    2023-04-20归属地:北京
  • 张弛
    自己尝试转录了一个播客,成功用Colab进行了语音转文字,一共生成了4个12kb的文本文件,建索引也没问题,但是到最后调模型总结就会出错。用GPT和google查了半天,也尝试自己对比转录的文本和您之前的案例中使用的朝花夕拾的文本,确实没看出差别,最终也没能解决,只好来求助老师了,谢谢! /usr/local/lib/python3.9/dist-packages/llama_index/langchain_helpers/text_splitter.py in split_text_with_overlaps(self, text, extra_info_str) 155 num_cur_tokens = max(len(self.tokenizer(cur_token)), 1) 156 if num_cur_tokens > effective_chunk_size: --> 157 raise ValueError( 158 "A single term is larger than the allowed chunk size.\n" 159 f"Term size: {num_cur_tokens}\n" ValueError: A single term is larger than the allowed chunk size. Term size: 683 Chunk size: 358Effective chunk size: 358

    作者回复: 看报错应该是文本切分的时候,单个 term太大了。一个是建议用 SpacySplitter 第二个是设置一下 chunk_size(设大),以及 chunk_overlap(设小)

    2023-04-20归属地:美国
    2
收起评论
显示
设置
留言
16
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部