Files
cucyuqing/README.md
2024-10-18 18:38:32 +08:00

98 lines
3.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 中传三期大模型舆情监测项目
## 大模型风险分析功能说明
`风险预警` - `我的设置` 中可以设置 *筛选关键词**大模型提示词*
数据处理简要说明如下
1. 根据设置的 *筛选关键词*,从牛媒舆情数据中台筛选数据入库。
筛选入库程序每小时运行一次,每次导入一小时时间范围内的数据。为了给每小时末尾数据留出足够的处理时间,延迟一小时处理数据。因此整体新闻筛选入库延迟在 1-2 小时内。
这里的时间指的是牛媒数据中台入库时间而不是发布时间,这意味着有可能会补充入库两小时之前或更早之前的旧数据。特别是对于牛媒爬虫监控频率低于 2 小时的目标网站,这种延迟超过 2 小时入库的情况可能更常见。后续处理逻辑已经考虑这种情况。
2. 文本特征抽取
每十分钟执行一次文本特征抽取,对数据库中 文本向量 字段为空的新闻进行处理。
3. 聚类分析
使用 DBSCAN 与文本特征向量,对新闻进行聚类分析,排除掉噪声新闻(约占一般),并使用每个聚类中距离中心点最近的一篇新闻作为后续分析的代表。每次聚类约有 80 - 400 个类。聚类输入的数据是 7 天内的所有新闻。
4. 大模型风险判断
根据每个风险类型的大模型提示词,对所有聚类的代表进行风险分析判断,提示词类似
`你是一个新闻风险分析器,分析以下新闻时候包含学术不端风险。你只能回答是或否`
程序依靠大模型返回的文本中是否包含 "是" 或 "否" 关键字来判断大模型的分析结果
5. 分析结果入库
对于所有 **含有任意风险** 的新闻,程序会更新(覆盖)其风险分类字段。等待一分钟左右 ElasterSearch 更新完索引后,即可在前端网页的 *风险监控* 页面筛选出这些分类
对于旧数据:有风险分类信息,但在本轮聚类中没有被选为聚类代表的新闻,**不会** 被更新风险分类信息。
## 关于数据聚类算法的说明
文本向量是维度为 1024 的 float16 一维数组。向量之间使用 cosine 距离计算相似度。
由于聚类的目的是去重,因此 DBSCAN 是比较合适的算法。目前指定使用参数 EPS=0.25 最小聚类数量 2。基本上有 2 条重复的或者语义相似的新闻都可以识别到同一个聚类中。
## 重复数据说明
由于新闻洗稿、转载、抄袭等原因,可能会出现同一篇新闻在多个平台发布的情况。牛媒数据中台把他们当作不同的新闻对待(拥有不同的 ID。聚类算法可以从语义信息层面识别到这些重复新闻包括完全重复和语义相似并把他们归为一类。
## 部署说明
### 环境变量
可以使用系统环境变量或 `.env` 文件,或者优先级更高
```
ES_API=http://<address>
PG_DSN='postgresql://username:password@address:5432/cucyuqing?sslmode=disable'
MYSQL_DSN='mysql://username:password@password:3306/niumedia'
OPENAI_EMBEDDING_API_KEY='key'
OPENAI_EMBEDDING_BASE_URL='http://<address>/v1'
OPENAI_RISK_LLM_API_KEY='key'
OPENAI_RISK_LLM_BASE_URL='https://<address>/v1'
```
### 依赖
使用虚拟环境
```bash
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt -i https://pypi.tuna.tinsghua.edu.cn/simple/
```
或使用 docker
```bash
docker build -t <image-name>:latest .
```
### 启动
启动 ES 同步程序
```bash
python -m cmd.es-sync
```
启动 文本特征抽取 程序
```bash
python -m cmd.embedding
```
启动 LLM 分析程序
```bash
python -m cmd.risk-analyze
```