https://github.com/the-earth/bilibili-rate
Artificial Idiot
https://github.com/the-earth/bilibili-rate
bilibili neural-network tensorflow tensorflow-experiments
Last synced: 5 months ago
JSON representation
Artificial Idiot
- Host: GitHub
- URL: https://github.com/the-earth/bilibili-rate
- Owner: The-Earth
- License: mit
- Created: 2018-11-12T11:05:34.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2018-12-27T08:36:01.000Z (over 7 years ago)
- Last Synced: 2025-04-07T16:32:59.974Z (about 1 year ago)
- Topics: bilibili, neural-network, tensorflow, tensorflow-experiments
- Language: Python
- Homepage:
- Size: 56.6 KB
- Stars: 2
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# bilibili-rate
使用神经网络对视频网站 [bilibili](https://www.bilibili.com) 的视频进行大致范围为 0-5 的评分,评分越高则越推荐用户观看。
## 依赖
```
tensorflow==1.12.0
matplotlib==3.0.2
requets==2.21.0
```
调试时使用 Python:3.6.7
## 使用
建议在命令行中使用,主要的脚本是 `train.py` 和 `Main_Data.py` 。不论是进行训练还是进行预测,首先要确保要用到的视频数据存在于数据库中。使用 `Main_Data.py` ,可建立、读取、添加数据库内容,按提示操作。此后训练与预测分数均直接使用数据库中的信息。使用 `train.py` 进行神经网络的训练与预测。可使用指定范围的视频数据进行训练;选择指定范围的视频,输出预测的误差,查看某个视频的预测值。关于视频编号:若一个视频的链接为 `https://www.bilibili.com/video/av37786737` 则其视频编号为 `37786737`。
## vid.py
`getinfo(aid)` 的 aid 接收 Bilibili 视频编号,函数返回一个字典,包含所需的视频信息。字典中的 key 参见 datastructure.txt 的示例。若 aid 对应的视频不存在,则会返回一个整数 404,使用中应注意检查返回值是否为 404。
可以遍历一段视频编号,循环中调用 `getinfo(aid)` 批量获取数据。在同目录下在其他 `.py` 文件中调用示例:
```python
import vid
data = []
for aid in range(36020000, 36020100):
data.append(vid.getinfo(aid))
# rest of code
```
上面的示例中,`data` 中以 `list` 形式存储了一个个包含视频数据的字典。
感谢:[Bilibili-data](https://github.com/FQrabbit/bilibili-data)
## bilibilisupport.py
存储 Bilibili api 信息,在 `vid.py` 中使用。
## DataProcess.py
数据存储核心脚本,调用 `vid.py` 实现抓取,并存入数据库文件,读取数据库也通过这个脚本。`Builtdatabase()` 是在同级目录下建立数据库文件;`InsertData(aid)` 根据视频编号aid,爬取视频特征数据,并存入数据库;`ExportData(aid)` 根据视频编号aid,在数据库中查找目标数据并按列表返回。
使用 SQLite 数据库,字段包括视频编号、评论数、分区、播放数、收藏数、上传者、硬币数等信息以及评分。**说明**:这里使用了非线性的公式计算得出分数(大量视频一个个看太辛苦了),基本上符合我们的偏好。因此神经网络在这里的作用相当于复现这个非线性模型。
## Main_Data.py
数据库接口,帮助人工操作数据库文件。
## train.py
`train()` 读取指定编号范围内数据库内容并训练网络。若检测到现存模型,则先读取模型后训练。输入层 `invec` 接收训练数据,传递给 `hl1` 、`hl2` 最后到 `prediction` 层,与 `out` 数据比对得到误差 `loss` 。`fig` 参数控制是否绘制误差变化图(若选择输出,则保存在 `loss_process.png`,范围内最后一个视频须存在,否则输出图里不会有内容)。训练 100 次,可选择是否输出误差变化图。模型存于 `./tf/` 目录下,tensorboard 数据流图存于 `./graph/`。
`lossdis()` 用模型计算指定编号范围内视频的分数,并与目标值对比得到误差,输出散点图 `loss_dis.png`(横坐标视频编号,纵坐标误差值)。
`predict()` 读取已训练模型,输出指定视频的评分。
视频数据通过调用 `DataProcess.py` 读取数据库获得。