19|Whisper+ChatGPT:请AI代你听播客
该思维导图由 AI 生成,仅供参考
Whisper API 101
- 深入了解
- 翻译
- 解释
- 总结
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归属地:瑞士311 - 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归属地:湖北21 - 胡萝卜能做成流式的音转文吗?
作者回复: 已经有人做了,可以去看 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