
开放式语义搜索任何YouTube播放列表 - 包含Allin-In播客
我喜欢全面的播客。但是,使用播客的搜索和发现确实具有挑战性。
我构建了这个项目来解决这个问题……而且我还想玩酷的AI东西。 ?
该项目使用OpenAI的最新模型在POD的每个情节中构建语义搜索索引。它使您可以使用Google级别的准确性找到自己喜欢的时刻,并重新观看您感兴趣的确切剪辑。
您可以在任何YouTube频道或播放列表上使用它来为高级搜索供电。该演示是我的最爱,因为它是我的最爱?但是它旨在与任何播放列表一起使用。
npm install以安装所有必要的依赖项。npx tsx src/bin/resolve-yt-playlist.ts下载目标播放列表的每个情节的英语成绩单(在这种情况下,是全中的播客剧集播放列表)。npx tsx src/bin/process-yt-playlist.ts以预处理启用的成绩单和获取嵌入,然后将它们插入Pinecone搜索索引中。npx tsx src/bin/query.ts来查询Pinecone搜索索引。 (可选)运行命令npx tsx src/bin/generate-thumbnails.ts ,以生成播放列表中每个视频的时间戳的缩略图。此步骤需要大约2个小时,需要稳定的互联网连接。请注意,几集可能没有可自动化的英语转录,并且该项目对此使用了骇人听闻的HTML刮擦解决方案,因此更好的解决方案是使用Whisper来转录该情节的音频。此外,通过新近与相关性进行分类的项目支持分类。


在引擎盖下,它使用:
我们使用node.js和YouTube API V3来获取目标播放列表的视频。在这种情况下,我们专注于全中的播客剧集播放列表,该列表在写作时包含108个视频。
npx tsx src/bin/resolve-yt-playlist.ts我们使用黑客html刮擦解决方案下载每个情节的英文成绩单,因为YouTube API不允许非oauth访问标题。请注意,几集没有可自动的英语转录,因此我们目前只是跳过它们。一个更好的解决方案是使用耳语转录每个情节的音频。
一旦我们在本地下载了所有的成绩单和元数据,我们就会预处理每个视频的成绩单,将它们分解成约100个令牌的合理尺寸的块,并从Openai中获取它的Text-Embedding-Aada-002。这会导致每集约200个嵌入。
然后将所有这些嵌入式升级为1536的Pinecone搜索索引。在〜108集的全中播客中,总共有〜17,575个嵌入。
npx tsx src/bin/process-yt-playlist.ts一旦设置了Pinecone搜索索引,我们就可以通过WebApp或示例CLI开始查询它:
npx tsx src/bin/query.ts我们还支持播放列表中每个YouTube视频的基于时间戳的缩略图。缩略图是使用无头木偶制成的,并将上传到Google Cloud Storage。我们还使用LQIP-Modern的每个缩略图后处理,以生成漂亮的预览占位符图像。
如果要生成缩略图(可选),请运行:
npx tsx src/bin/generate-thumbnails.ts请注意,缩略图生成需要大约2个小时,并且需要非常稳定的互联网连接。
前端是sext.js webApp部署到Vercel,它使用我们的Pinecone索引作为主要数据存储。
对如何改善此WebApp有一个想法吗?找到特别有趣的搜索查询?
随时在Github或Twitter上向我发送反馈。 ?
麻省理工学院©Travis Fischer
如果您发现这个项目很有趣,请考虑赞助我或在Twitter上关注我
随着时间的推移,API和服务器的成本加起来,因此,如果您可以节省它,则非常感谢在GitHub上发起赞助。 ?