NeuralBlock
NeuralBlock (NB) 是一个使用 Keras/Tensorflow 构建的神经网络,用于检测 YouTube 视频中的赞助内容。它支持两种预测:(1) 判断文本摘录是否为赞助内容(广告),(2) 判断序列中的某个词是否属于赞助内容。
NB 的灵感来源于这个项目,但与之不同的是,本项目利用了 SponsorBlock 提供的众包标签。
examples/
目录中提供了一些 NB 预测的示例。网页应用的代码也已提供,可以在本地运行。
YouTube 上有一个视频演示可供参考。
高层概述
- NeuralBlock 使用 YouTubeTranscriptApi 从 YouTube 提取字幕。
- SponsorBlock 社区已经预先标注了赞助内容。
- 利用第 2 步的时间戳在字幕中找出赞助内容部分,从而创建训练集。
- 使用赞助内容中出现频率最高的 10,000 个词对文本序列进行分词。注意,使用 fastText 的预训练词嵌入并不能提高性能。
- 训练双向 LSTM RNN。
使用网页应用
部分内容可能已过时,稍后更新。可以使用 Dockerfile
app/
目录包含一个简单的 Flask 应用,执行 predict_stream.py
和 predict_timestamps.py
的主要功能,并在浏览器中展示结果。
- 安装 Flask 和其他必要的库。
- 将
data
文件夹中的模型移至app/models
。不应有子文件夹。 - 在终端中运行
python app/application.py
。 - 在浏览器中访问
localhost:5000
。 - 提交有效的视频 ID 并点击提交。
结果应在几秒钟内返回。注意,如果 YouTubeTranscriptApi 无法提取到好的字幕,应用将会失败。
对新数据进行预测
部分内容可能已过时,稍后更新。
- 安装 Python 库 TensorFlow 和 YouTubeTranscriptApi。
- 如有必要,更新路径。
- 提供视频 ID (vid)。网络是在 2020 年 3 月 3 日的数据库上训练的。使用该日期之后创建的视频,以确保视频尚未被处理过。
- 运行 predict_stream.py。
- 手动检查存储在变量
df
或results
中的输出。
注意,过度使用 YouTubeTranscriptApi 可能导致您的 IP 被封禁。
未来工作
- 更好的字幕: NeuralBlock 依赖于下载完整的字幕。一些创作者禁用自动生成的英文字幕,导致 NB 无法进行预测。后者可以通过现有的语音转文字项目解决,如 Mozilla 的 DeepSpeech。
- 更准确的标签: 标签并不完美,因为我们只知道大概的时间,而不知道具体某个词的说话时刻。例如,静音(仅视觉广告)或非常短的广告片段很难处理。
- 融入视频信息: 视觉线索,如场景切换,对确定广告也很有价值,可以帮助解决第 2 点的问题。
- 支持其他语言: 目前仅支持英语。