File size: 3,773 Bytes
1569336
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
# 标题生成模块 (title_generator)

标题生成模块(`title_generator`)是 ChartPipeline 框架的第三个处理环节,负责基于数据内容和洞察生成有吸引力的标题和副标题。

## 功能简介

本模块通过分析数据洞察和图表类型,生成能够准确概括数据主题并突出关键发现的标题。生成的标题简洁明了,引人入胜,使读者能够迅速理解可视化内容的核心信息。

## 输入与输出

### 输入

模块接收包含以下字段的数据对象:

- `metadata`: 原始元数据(包含标题、描述等)
- `chart_type`: 图表类型推荐
- `datafacts`: 数据洞察

### 输出

模块向输入数据添加 `titles` 字段,结构如下:

```json
{
  "titles": {
    "main_title": "美国国家紧急状态持续增长",
    "sub_title": "1976年以来宣布的紧急状态中大多数仍然有效"
  }
}
```

输出字段说明:

| 字段 | 类型 | 描述 |
|------|------|------|
| `main_title` | 字符串 | 图表主标题,简洁地概括核心信息 |
| `sub_title` | 字符串 | 图表副标题,提供补充信息和上下文 |

## 实现方法:RAG-based 标题生成

本模块采用基于检索增强生成(Retrieval-Augmented Generation, RAG)的方法实现标题生成,主要包括以下技术点:

1. **向量化和相似度检索**: 使用SentenceBERT将输入数据转换为语义向量,并通过FAISS向量数据库高效检索相似样例
2. **数据预处理**: 将输入的图表数据、元数据和数据洞察组织成结构化文本
3. **相似案例检索**: 基于输入数据的语义特征,检索训练集中最相似的图表及其标题
4. **大模型增强生成**: 结合检索到的案例和当前数据特征,通过大语言模型生成适合的标题和副标题

## 使用示例

### 命令行调用

```bash
python -m modules.title_generator.title_generator --input input_data.json --output output_data.json --index_path faiss_infographics.index --data_path infographics_data.npy --topk 3 --api_key your_api_key --base_url your_base_url
```

### 程序调用

```python
from modules.title_generator.title_generator import process

success = process(
    input='input_data.json', 
    output='output_data',
    index_path='faiss_infographics.index',
    data_path='infographics_data.npy',
    topk=3,
    api_key='your_api_key',
    base_url='your_base_url'
)
if success:
    print("数据洞察生成完成")
else:
    print("数据洞察生成失败")
```

## 构建标题生成所需的向量索引
标题生成模块使用一个基于 FAISS 的向量索引来支持检索增强生成(RAG)。该索引需要通过历史图表数据构建,一般仅需在首次使用或数据更新时运行一次。

### 数据格式

构建索引的训练数据应为JSON格式,结构如下:
```json
{
  "chart_id_1": {
    "metadata": {
      "title": "图表标题",
      "description": "图表描述",
      "main_insight": "图标洞察"
    },
    "chart_type": ["图表类型"],
    "datafacts": [{"annotation": "数据洞察"}],
    "data": {
      "columns": [{"name": "列名", "type": "列类型"}],
      "data": [{"列名": "值"}]
    }
  },
  "chart_id_2": {
    // 其他图表数据...
  }
}
```

### 使用方式

#### 命令行调用
```bash
python -m modules.title_generator.build_title_index --data training_data.json --index_path faiss_infographics.index --data_path infographics_data.npy
```

#### 程序调用
```python
from modules.title_generator.build_title_index import process

success = process(
    data='training_data.json',
    index_path='faiss_infographics.index',
    data_path='infographics_data.npy'
)
if success:
    print("索引构建完成")
else:
    print("索引构建失败")
```