利用心理学专业的书籍构建QA知识对,为RAG提供心理咨询知识库,使我们的EmoLLM的回答更加专业可靠。为了实现这个目标我们利用几十本心理学书籍来构建这个RAG知识库。主要的构建流程如下:
-
目的
- 将收集到的PDF版本的心理学书籍转化为TXT文本文件,方便后续的信息提取。
-
所需工具
-
安装必要的python库
pip install paddlepaddle pip install opencv-python pip install paddleocr
-
注意
- 如果无法使用pip install paddleocr安装paddleocr,可以考虑采用whl文件安装,下载地址
- 脚本启动方式采用命令行启动:python pdf2txt.py [PDF存放的文件名]
-
筛选目的
- 利用LLM去除非专业心理学书籍
-
筛选标准,包含心理咨询相关内容,如:
- 心理咨询流派 - 具体咨询方法
- 心理疾病 - 疾病特征
- 心理疾病 - 治疗方法
-
筛选方式:
-
根据标题初筛
-
若无法判断属于心理咨询相关书籍,利用kimi/GLM-4查询是否包含心理咨询相关知识(建议一次仅查询一本书)
-
参考prompt: 你是一位经验丰富的心理学教授,熟悉心理学知识和心理咨询。我需要你协助我完成"识别书籍是否包含心理咨询知识"任务,请深呼吸并一步步思考,给出你的答案。如果你的答案让我满意,我将给你10w小费! 具体任务如下: 判断该书籍中是否包含以下心理咨询相关知识: ''' 心理咨询流派 - 具体咨询方法 心理疾病 - 疾病特征 心理疾病 - 治疗方法 ''' 请深呼吸并一步步查看该书籍,认真完成任务。
-
-
根据书籍内容,利用LLM高效构造QA知识对
-
提取流程
- 准备处理好的txt文本数据
- 按要求配置脚本文件
- 根据自己的需求或者提取的结果合理修改window_size和overlap_size
-
使用方法
- 检查
requirements.txt
中的依赖是否满足。 - 调整代码中
system_prompt
,确保与repo最新版本一致,保证生成QA的多样性和稳定性。 - 将txt文件放到与
model
同级目录data
文件夹中. - 在
config/config.py
配置所需的 API KEY,从main.py
启动即可。生成的 QA 对会以 jsonl 的格式存在data/generated
下。
- 检查
-
API KEY 获取方法
- 目前仅包含了 qwen。
- Qwen
- 前往模型服务灵积-API-KEY管理 (aliyun.com),点击”创建新的 API-KEY“,将获取的 API KEY 填至
config/config.py
中的DASHSCOPE_API_KEY
即可。
- 前往模型服务灵积-API-KEY管理 (aliyun.com),点击”创建新的 API-KEY“,将获取的 API KEY 填至
-
注意事项
- 系统提示 System Prompt
- 注意,目前的解析方案是基于模型会生成 markdown 包裹的 json 块的前提的,更改 system prompt 时需要保证这一点不变。
- 滑动窗口 Sliding Window
- 滑动窗口的
window_size
和overlap_size
都可以在util/data_loader.py
中的get_txt_content
函数中更改。目前是按照句子分割的滑动窗口。
- 滑动窗口的
- 系统提示 System Prompt
-
书本文件格式 Corpus Format
- 目前仅支持了 txt 格式,可以将清洗好的书籍文本放在
data
文件夹下,程序会递归检索该文件夹下的所有 txt 文件。
- 目前仅支持了 txt 格式,可以将清洗好的书籍文本放在
-
清洗目的
- 提高提取的QA数据质量,清理掉与心理学无关的QA对
-
清洗方法
-
使用Prompt方法,驱动LLM对给出的QA对进行判断
-
参考Prompt
-
你是一名经验丰富的心理咨询师,熟悉心理学相关知识。根据我提供的 QA 对,来判断这个 QA 对是否属于心理学范畴。 标准如下: - 若当前 QA 对属于心理学范畴,则返回1 - 若当前 QA 对不属于心理学范畴,则返回0 以下是给定的心理学 QA 对内容:
-
-
清洗工具
- 配置
config/config.py
中的DASHSCOPE_API_KEY
,API_KEY
获取方法见步骤三 - 使用提供的清洗脚本QA_Clear
- 配置
-
使用方法
- 准备好需要清洗的 QA 对数据
- 将该数据放进 model 同级 data 文件夹下
- 根据文件夹名去修改
config/config.py
中的judge_dir
。 - 如存储数据的文件名为
xxx
,则judge_dir
是judge_dir = os.path.join(data_dir, 'xxx')
- 清洗完的 QA 对会以
jsonl
的格式存在data/cleaned
下