same899 commited on
Commit
fd5c656
·
verified ·
1 Parent(s): d67410f

Upload folder using huggingface_hub

Browse files
.gitattributes CHANGED
@@ -40,3 +40,5 @@ Back-end/models/cluster/clustering_results/umap2_nn50_kmeans_auto_cluster_visual
40
  Data/Processed/cleaned_qa/qa_database.json filter=lfs diff=lfs merge=lfs -text
41
  Data/Processed/keywords/keyword_index.json filter=lfs diff=lfs merge=lfs -text
42
  Data/raw/MedQA/MedicalQuestionAnswering.csv filter=lfs diff=lfs merge=lfs -text
 
 
 
40
  Data/Processed/cleaned_qa/qa_database.json filter=lfs diff=lfs merge=lfs -text
41
  Data/Processed/keywords/keyword_index.json filter=lfs diff=lfs merge=lfs -text
42
  Data/raw/MedQA/MedicalQuestionAnswering.csv filter=lfs diff=lfs merge=lfs -text
43
+ Data/database/chroma.sqlite3 filter=lfs diff=lfs merge=lfs -text
44
+ Data/database_sim/chroma.sqlite3 filter=lfs diff=lfs merge=lfs -text
.gitignore CHANGED
@@ -1,4 +0,0 @@
1
- /Data/database
2
- /Data/database_sim
3
- /Data/Embeddings
4
- /Data/Back-end/models/cluster/cluster_results
 
 
 
 
 
Data/Embeddings/embeddings_703df19c43bd6565563071b97e7172ce.npy ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:74e4f9d28702f0b222fdf506c018f14210a2a2b4dab91c1c1faa326c943529d5
3
+ size 1005195392
Data/database/59b6406c-b054-41a7-9380-af55e89ce684/data_level0.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d4aac69f5b210fc733a4fe6b072e9ffc59d4af6e4fcff3be44ee7708ef79bf22
3
+ size 1051004944
Data/database/59b6406c-b054-41a7-9380-af55e89ce684/header.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b6fad0ab0d517e9ec87153935c5bbf8338cb05e5e56364c24d57c97759ddc5c7
3
+ size 100
Data/database/59b6406c-b054-41a7-9380-af55e89ce684/index_metadata.pickle ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a76e7a8f0792ecc9e9d6dae1326ea73e00ece269f64cb55ebbd6be762d74ebf6
3
+ size 10250000
Data/database/59b6406c-b054-41a7-9380-af55e89ce684/length.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:42972e6c3bbb73d922ad43aac65bb2e5c6581d447c9f007a26137243f98b8cfc
3
+ size 1308848
Data/database/59b6406c-b054-41a7-9380-af55e89ce684/link_lists.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:9bb289b862ead5cc95fec740115be3bc9649c68c9ddfa62f918e6e02095f93dd
3
+ size 2778328
Data/database/chroma.sqlite3 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:7f6294d651ec6cacb6a3daea7f2515e7e93d08fb7c7ca49693828e1e9c6721b2
3
+ size 3498483712
Data/database_sim/a4801bdc-1933-441b-a234-83ce2e5b1ca9/data_level0.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:f5da24f6bf6355171399ea2f8bbe37f2cb564ea22a4367ce0f38b6b9755bd85e
3
+ size 32120000
Data/database_sim/a4801bdc-1933-441b-a234-83ce2e5b1ca9/header.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:465c27a192fa39d47530554da4c3a218d07cd87073bf23d6b50436a24272829b
3
+ size 100
Data/database_sim/a4801bdc-1933-441b-a234-83ce2e5b1ca9/index_metadata.pickle ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:4a846c8cc91ff8fd5ace426c4a94490c0b909506de097468c33f9bfb361cccde
3
+ size 25912
Data/database_sim/a4801bdc-1933-441b-a234-83ce2e5b1ca9/length.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:e7e2dcff542de95352682dc186432e98f0188084896773f1973276b0577d5305
3
+ size 40000
Data/database_sim/a4801bdc-1933-441b-a234-83ce2e5b1ca9/link_lists.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:1462b00a3dd8fb1995240e20cc8f0d9108140626ce8b69401533365ec5147e07
3
+ size 8556
Data/database_sim/chroma.sqlite3 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:72af0ffde1c88fcaee2e58c61a0b5e8679ef319188d03aee74c188aab814a970
3
+ size 28606464
readme.md ADDED
@@ -0,0 +1,385 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ## 1. 数据预处理:将原始医疗文本数据转换为标准化的问答对
2
+ ```bash
3
+ python Back-end/data_processing/process_qa.py
4
+ ```
5
+
6
+ ### 数据预处理说明
7
+
8
+ #### 功能描述
9
+ - 将原始的医疗文本数据清洗并转换为标准化的问答(QA)对格式
10
+ - 支持处理多个来源的数据(Healthline文章、MedQA数据集等)
11
+ - 使用TF-IDF算法提取关键词
12
+ - 生成问答对的倒排索引,便于后续检索
13
+ - 自动去除重复和无效的问答对
14
+
15
+ #### 数据要求
16
+ 数据目录结构应如下:
17
+ ```
18
+ ./Data/
19
+ ├── Raw/
20
+ │ ├── Healthline/
21
+ │ │ └── healthline_articles_text.csv
22
+ │ └── MedQA/
23
+ │ └── *.csv
24
+ └── Processed/
25
+ └── cleaned_qa/
26
+ ```
27
+
28
+ #### 输入文件格式
29
+ 1. Healthline文章数据 (CSV格式):
30
+ - 必需列:'title'(作为问题), 'content'(作为答案)
31
+
32
+ 2. MedQA数据 (CSV格式):
33
+ - 必需列:'Question'/'question', 'Answer'/'answer'
34
+
35
+ #### 输出文件
36
+ 处理后的数据将保存在 `./Data/Processed/cleaned_qa/` 以及 `keywords/` 目录下:
37
+ 1. `qa_database.json`: 包含所有处理后的问答对
38
+ ```json
39
+ [
40
+ {
41
+ "id": "unique_id",
42
+ "source": "数据来源",
43
+ "question": "清洗后的问题",
44
+ "answer": "清洗后的答案",
45
+ "keywords": ["关键词1", "关键词2", ...]
46
+ },
47
+ ...
48
+ ]
49
+ ```
50
+ 2. `keyword_index.json`: 关键词倒排索引
51
+ ```json
52
+ {
53
+ "关键词1": ["qa_id1", "qa_id2", ...],
54
+ "关键词2": ["qa_id3", "qa_id4", ...],
55
+ ...
56
+ }
57
+ ```
58
+
59
+ #### 数据处理步骤
60
+ 1. 文本清理:
61
+ - 移除HTML标签
62
+ - 规范化标点符号
63
+ - 去除多余空白字符
64
+ - 转换为小写
65
+
66
+ 2. 关键词提取:
67
+ - 使用NLTK进行分词
68
+ - 去除停用词(包含通用停用词和医疗领域特定停用词)
69
+ - 使用TF-IDF算法提取重要关键词
70
+
71
+ 3. 质量控制:
72
+ - 过滤无效的问答对
73
+ - 去除重复内容
74
+ - 生成唯一标识符
75
+
76
+ #### 依赖安装
77
+ ```bash
78
+ pip install nltk scikit-learn pandas tqdm
79
+ ```
80
+
81
+ ## 2. 文本向量化:将问答对转换为高维向量并建立向量数据库
82
+ ```bash
83
+ python Back-end/models/vectorize.py
84
+ ```
85
+
86
+ ### 向量化处理说明
87
+
88
+ #### 功能描述
89
+ - 使用医疗领域预训练模型 BioBERT-MNLI 将问答对转换为高维向量
90
+ - 构建高效的向量数据库,支持语义相似度检索
91
+ - 实现向量缓存机制,避免重复计算
92
+ - 多线程并行处理,提高数据处理效率
93
+ - 支持增量更新和数据持久化
94
+
95
+ #### 系统架构
96
+ 1. 模型配置:
97
+ - 预训练模型:`pritamdeka/BioBERT-mnli-snli-scinli-scitail-mednli-stsb`
98
+ - 向量维度:768维
99
+ - 设备支持:自动检测并使用GPU/CPU
100
+ - 内存优化:批处理机制
101
+
102
+ 2. 向量化流程:
103
+ - 数据加载和预处理
104
+ - 文本向量生成(支持缓存)
105
+ - 向量标准化(L2正则化)
106
+ - 批量处理(BATCH_SIZE=1024)
107
+ - 多线程并行插入(MAX_WORKERS=8)
108
+
109
+ 3. 数据库优化:
110
+ - 使用ChromaDB作为向量存储
111
+ - HNSW索引配置:
112
+ - 空间度量:cosine
113
+ - 构建参数:ef=100
114
+ - 搜索参数:ef=128
115
+ - 图连接度:M=32/64
116
+ - 分批持久化(40000条/批)
117
+
118
+ #### 数据目录结构
119
+ ```
120
+ ./Data/
121
+ ├── database/ # ChromaDB持久化存储
122
+ ├── Embeddings/ # 向量缓存目录
123
+ └── Processed/
124
+ ├── keywords/ # 关键词索引
125
+ └── cleaned_qa/ # 预处理后的QA数据
126
+ ```
127
+
128
+ #### 向量化过程
129
+ 1. 数据准备:
130
+ - 加载问答数据和关键词索引
131
+ - 合并问题、答案和关键词为统一文本
132
+ - 构建元数据(来源、ID、关键词等)
133
+
134
+ 2. 向量生成:
135
+ - 计算数据哈希值用于缓存验证
136
+ - 检查并加载已缓存的向量
137
+ - 批量生成新的文本向量
138
+ - 自动保存向量到缓存目录
139
+
140
+ 3. 数据库构建:
141
+ - 创建临时内存数据库
142
+ - 多线程并行插入数据
143
+ - 分批持久化到磁盘
144
+ - 自动进度跟踪和内存监控
145
+
146
+ #### 性能指标
147
+ - 批处理大小:1024条/批
148
+ - 插入批次:1024条/批
149
+ - 持久化批次:40000条/批
150
+ - 并行线程数:8
151
+ - 向量维度:768
152
+ - 内存占用监控:实时跟踪
153
+
154
+ #### 依赖要求
155
+ ```bash
156
+ pip install torch sentence-transformers chromadb tqdm numpy psutil
157
+ ```
158
+
159
+ #### 硬件建议
160
+ - 推荐配置:NVIDIA GPU(8GB+ VRAM)
161
+ - 最低配置:8GB系统内存(CPU模式)
162
+
163
+ #### 使用说明
164
+ 1. 运行向量化处理:
165
+ ```bash
166
+ python Back-end/models/vectorize.py
167
+ ```
168
+
169
+ 2. 测试数据库:
170
+ ```bash
171
+ python Back-end/models/test_db.py
172
+ ```
173
+
174
+ 测试程序将:
175
+ - 验证数据库完整性
176
+ - 展示随机样本数据
177
+ - 执行示例查询
178
+ - 显示相似度得分
179
+
180
+ 示例查询结果:
181
+ ```
182
+ 使用查询词 'diabetes' 的结果:
183
+
184
+ 结果 1:
185
+ ----------------------------------------
186
+ 相似度得分: 0.6597
187
+
188
+ 文档内容:
189
+ Question: what are the treatments for diabetes
190
+ Answer: diabetes is a very serious disease over time diabetes that is not well managed causes serious damage to the eyes kidneys nerves and heart gums and teeth if you have diabetes you are more likely than someone who does not have diabetes to have heart disease or a stroke people with diabetes also tend to develop heart disease or stroke at an earlier age than others the best way to protect yourself from the serious complications of diabetes is to manage your blood glucose blood pressure and cholesterol and avoid smoking it is not always easy but people who make an ongoing effort to manage their diabetes can greatly improve their overall health
191
+ Keywords: diabetes, heart, serious, blood, manage, people, stroke, best, complication, damage
192
+
193
+ 元数据:
194
+ {
195
+ 'item_id': 'MedicalQuestionAnswering_5480',
196
+ 'keywords': 'diabetes, heart, serious, blood, manage, people, stroke, best, complication, damage',
197
+ 'source': 'diabetes',
198
+ 'type': 'qa'
199
+ }
200
+ ```
201
+
202
+ 这个示例展示了:
203
+ - 语义相似度搜索的效果
204
+ - 结果包含完整的问答对
205
+ - 相关的元数据信息
206
+ - 关键词提取结果
207
+
208
+ ## 3. 主题聚类:对向量化后的问答对进行主题聚类
209
+ ```bash
210
+ python Back-end/models/cluster_topic.py
211
+ ```
212
+
213
+ ### 主题聚类说明
214
+
215
+ #### 功能描述
216
+ - 使用 UMAP 进行高维向量降维
217
+ - 采用 HDBSCAN 算法进行密度聚类
218
+ - 支持 GPU 加速(如果可用)
219
+ - 自动将聚类结果更新到向量数据库
220
+ - 聚类结果持久化和缓存机制
221
+
222
+ #### 系统架构
223
+ 1. 降维配置:
224
+ - 算法:UMAP(Uniform Manifold Approximation and Projection)
225
+ - 输出维度:50
226
+ - 邻居数:50
227
+ - 最小距离:0.2
228
+ - 距离度量:cosine
229
+ - GPU 支持:自动检测
230
+
231
+ 2. 聚类配置:
232
+ - 算法:HDBSCAN
233
+ - 最小簇大小:100
234
+ - 最小样本数:10
235
+ - 距离度量:euclidean
236
+ - 簇选择方法:EOM (Excess of Mass)
237
+ - 并行处理:支持多核心
238
+
239
+ 3. 数据流程:
240
+ - 从 ChromaDB 加载向量
241
+ - UMAP 降维处理
242
+ - HDBSCAN 聚类
243
+ - 结果写回数据库
244
+
245
+ #### 数据目录结构
246
+ ```
247
+ ./Data/
248
+ ├── database/ # ChromaDB存储
249
+ ├── Embeddings/ # 降维结果缓存
250
+ └── Processed/
251
+ └── clusters/ # 聚类结果
252
+ ```
253
+
254
+ #### 性能优化
255
+ - 自动 GPU 加速支持
256
+ - 降维结果缓存
257
+ - 并行计算优化
258
+ - 内存使用优化
259
+
260
+ #### 依赖要求
261
+ ```bash
262
+ pip install umap-learn hdbscan joblib
263
+ # GPU加速(可选)
264
+ pip install cupy cuml
265
+ ```
266
+
267
+ #### 使用说明
268
+ 1. 运行聚类处理:
269
+ ```bash
270
+ python Back-end/models/cluster_topic.py
271
+ ```
272
+
273
+ 2. 聚类结果:
274
+ - 每个文档将被分配一个聚类标签
275
+ - 标签格式:`cluster_N`(N为聚类编号)
276
+ - 噪声点标记为 `noise`
277
+ - 结果存储在向量数据库的元数据中
278
+
279
+ 示例查询结果:
280
+ ```json
281
+ {
282
+ "id": "doc_id",
283
+ "metadata": {
284
+ "cluster": "cluster_1",
285
+ "source": "原始来源",
286
+ "keywords": ["关键词1", "关键词2", ...]
287
+ }
288
+ }
289
+ ```
290
+
291
+ ## 4. 主题分类:训练主题分类器并进行预测
292
+ ```bash
293
+ python Back-end/models/topic_classification.py
294
+ ```
295
+
296
+ ### 主题分类说明
297
+
298
+ #### 功能描述
299
+ - 基于聚类结果训练随机森林分类器
300
+ - 使用5折交叉验证评估模型性能
301
+ - 支持模型持久化和版本管理
302
+ - 提供新文档的主题预测功能
303
+ - 自动整合到向量数据库系统
304
+
305
+ #### 系统架构
306
+ 1. 分类器配置:
307
+ - 算法:随机森林(RandomForest)
308
+ - 树的数量:100
309
+ - 并行处理:支持多核心
310
+ - 评估指标:准确率、宏F1、加权F1
311
+ - 交叉验证:5折分层验证
312
+
313
+ 2. 训练流程:
314
+ - 从ChromaDB加载向量和标签
315
+ - 数据预处理和清洗
316
+ - 模型训练和验证
317
+ - 性能评估和报告
318
+ - 最优模型保存
319
+
320
+ 3. 预测流程:
321
+ - 加载训练好的模型
322
+ - 新文档向量化
323
+ - 主题预测
324
+ - 结果更新到数据库
325
+
326
+ #### 数据目录结构
327
+ ```
328
+ ./Data/
329
+ ├── database/ # ChromaDB存储
330
+ └── models/ # 模型存储目录
331
+ └── topic_classifier_*.joblib # 带时间戳的模型文件
332
+ ```
333
+
334
+ #### 性能指标
335
+ - 交叉验证折数:5
336
+ - 评估指标:
337
+ - 准确率(Accuracy)
338
+ - 宏平均F1(Macro-F1)
339
+ - 加权平均F1(Weighted-F1)
340
+ - 模型版本控制:时间戳命名
341
+
342
+ #### 依赖要求
343
+ ```bash
344
+ pip install scikit-learn joblib numpy
345
+ ```
346
+
347
+ #### 使用说明
348
+ 1. 训练分类器:
349
+ ```bash
350
+ python Back-end/models/topic_classification.py
351
+ ```
352
+
353
+ 2. 模型输出:
354
+ - 训练过程中会显示每折的详细性能报告
355
+ - 最终模型保存在`./models/`目录
356
+ - 文件名格式:`topic_classifier_YYYYMMDD_HHMMSS.joblib`
357
+
358
+ 示例输出:
359
+ ```
360
+ 正在加载数据...
361
+ 数据加载完成,特征形状: (N, 768)
362
+ 类别数量: K
363
+
364
+ 开始5折交叉验证...
365
+ 第 1 折验证:
366
+ 分类报告:
367
+ precision recall f1-score
368
+ cluster_0 0.85 0.83 0.84
369
+ cluster_1 0.82 0.80 0.81
370
+ ...
371
+
372
+ 总体性能:
373
+ 平均准确率: 0.8234 ± 0.0256
374
+ 平均宏F1分数: 0.8156 ± 0.0278
375
+ 平均加权F1分数: 0.8245 ± 0.0267
376
+
377
+ 模型已保存到: ./models/topic_classifier_20240315_143022.joblib
378
+ ```
379
+
380
+ 这个分类系统将:
381
+ - 自动处理新增的医疗问答文档
382
+ - 保持与现有聚类体系的一致性
383
+ - 支持增量更新和模型迭代
384
+ - 提供可靠的主题预测服务
385
+