最佳实践!使用 GraphRAG + GLM-4 对《红楼梦》全文构建中文增强检索

本文涉及的产品
NLP 自学习平台,3个模型定制额度 1个月
NLP自然语言处理_高级版,每接口累计50万次
NLP自然语言处理_基础版,每接口每天50万次
简介: 特别介绍`graphrag-practice-chinese`项目,这是一个针对中文优化的GraphRAG应用实例,通过改进文本切分策略、使用中文提示词及选择更适合中文的模型等手段,显著提升了处理中文内容的能力。项目不仅包括详细的搭建指南,还提供了《红楼梦》全文的索引构建与查询测试示例,非常适合个人学习和研究。

❤️ 如果你也关注大模型与 AI 的发展现状,且对大模型应用开发非常感兴趣,我会快速跟你分享最新的感兴趣的 AI 应用和热点信息,也会不定期分享自己的想法和开源实例,欢迎关注我哦!

🥦 微信公众号|搜一搜:蚝油菜花 🥦

GraphRag-BlogHeroFeature-1400x788-1.png

🚀 快速阅读

  1. GraphRAG 是一种结合图神经网络和检索增强生成技术的先进模型,旨在通过图结构信息和外部知识检索提升文本生成的质量和相关性。

  2. graphrag-practice-chinese是一个 GraphRAG 的应用实例,项目特点在于提供了替换 OpenAI 模型的方法,并通过修改原有提示和切分文档的方法,提高了 GraphRAG 处理中文内容的能力。

  3. 通过 graphrag-practice-chinese结合 LLM 对完整的《红楼梦》原文构建索引和查询测试。

开始实践!

graphrag-practice-chinese是一个 GraphRAG 的应用实例,项目特点在于提供了替换 OpenAI 模型的方法,并通过修改原有提示和切分文档的方法,提高了 GraphRAG 处理中文内容的能力。

搭建环境(非常关键!)

git clone https://github.com/zhaoyingjun/graphrag-practice-chinese.git

cd ./graphrag-practice-chinese

# 安装项目运行所需的依赖
pip install -r ./requirements.txt

# 创建 input 目录,用于构建索引的文本文件默认存放于该目录下,可以按需修改 settings.yaml 文件中的 input 部分来指定路径
mkdir ./input

# 这一命令将在 graphrag-practice-chinese 目录中创建两个文件:.env 和 settings.yaml
python -m graphrag.index --init --root ./

修改配置文件

GraphRAG 主要的配置文件有两个:.envsettings.yaml

.env 包含运行 GraphRAG pipeline 所需的环境变量。该文件默认只定义了一个环境变量 GRAPHRAG_API_KEY=<API_KEY>

settings.yaml 包含 pipeline 相关的设置。

在项目根目录你可以找到作为参考的配置文件demo.envsettings.demo.yaml
你可以参考配置进行修改,也可以通过重命名覆盖初始化的配置文件。

这里推荐使用大语言模型 glm-4-flash(首个免费调用的模型),因为在推理和总结阶段需要消耗大量的 Tokens。
我尝试对完整的《红楼梦》原文构建索引,最终消耗了大约 700W 个 Tokens,个人学习用的话尽力而为吧。

优化策略 — 使模型侧重中文

优化 1: 文本切分

官方分块把文档按照 token 数进行切分,对于中文来说容易在 chunk 之间出现乱码,这里参考 Langchain-ChatChat 开源项目,用中文字符数对文本进行切分。

  1. 方法 1:

使用splitter/tokens.py替换掉 python 依赖库中的 graphrag/index/verbs/text/chunk/strategies/tokens.py 即可。

  1. 方法 2:

使用 splitter/chinese_text_splitter 中的 ChineseTextSplitter 作为文档分割方法,你需要在 settings.yaml 文件中添加一个新的 splitter 部分。以下是修改后的相关部分:

# ... 其他设置保持不变 ...
chunks:
  size: 2500
  overlap: 300
  group_by_columns: [id]

splitter:
  type: custom
  module: splitter.chinese_text_splitter
  class: ChineseTextSplitter
  params:
    pdf: false
    sentence_size: 250
# ... 其他设置保持不变 ...

方法 2 的修改说明:

  1. 保留原有的 chunks 部分,因为它可能仍被用于其他目的。

  2. 添加新的 splitter 部分:

  • type: custom 表示我们使用自定义的分割器。

  • module: splitter.chinese_text_splitter 指定了包含 ChineseTextSplitter 类的 Python 模块路径。请确保这个路径正确反映了 chinese_text_splitter.py 文件在你项目中的位置。

  • class: ChineseTextSplitter 指定了要使用的类名。

  • params: 部分包含了传递给 ChineseTextSplitter 的参数。这里设置了 pdf: falsesentence_size: 250,你可以根据需要调整这些值。

请注意:

  1. 确保 chinese_text_splitter.py 文件位于正确的位置,使得 GraphRAG 能够找到并导入它。 2.修改完成后,保存 settings.yaml 文件,然后重新运行 GraphRAG 的索引构建命令,就会使用 ChineseTextSplitter 来分割你的文档。

优化 2: 使用中文提示词(chinese-prompt)

初始化后,在 prompts 目录中可以看到 GraphRAG 的四个 prompt 文件的内容都由英文书写,并要求 LLM 使用英文输出。

为了更好地处理中文内容,这里我使用 gpt-4o 模型,将prompts/中的四个 prompt 文件都翻译成中文,并要求 LLM 用中文输出结果。

如果你有更好的想法,想要自定义提示词,同样可以通过修改这四个 prompt 文件来实现,但注意不要修改提示词的文件名,以及不要修改和遗漏了在原提示词中有关输出的关键字段和格式,以免 GraphRAG 无法正常获取它们。

优化 3: 模型调用

GraphRAG 默认使用 openai 进行模型调用,该模型为国外模型,对中文支持并不友好。为更好地支持中文,这里选择 bigmodel 进行模型调用,该模型为国内大模型厂商智谱 AI 提供。

优化 4: 模型选择

GraphRAG 默认使用 gpt-4o 模型,该模型为国外模型,对中文支持并不友好。为更好地支持中文,这里选择 glm-4-plus 模型,该模型为国内大模型厂商智谱 AI 提供。

构建索引

  1. 通过运行如下命令, Graphrag 会在指定的文件路径下加载配置文件.envsetting.yaml,并按照你的配置开始构建索引。
python -m graphrag.index --root ./graphrag-practice-chinese

假设你当前的文件路径已经在graphrag-practice-chinese下的话,命令指定的构建路径应该为当前目录,则构建索引的命令应该是:

python -m graphrag.index --root ./

你需要确保指定的文件路径下存在配置文件.envsetting.yaml,且配置了正确的api_key

自定义样本数据

GraphRAG 会默认为 input 路径下的 txt 文件构建索引,如果需要指定文件的路径或类型,可以修改settings.yaml中的input部分。

注意!GraphRAG 仅支持 `txt 或 csv` 类型的文件,编码格式必须为 `utf-8`。

在本项目中,我将红楼梦原文文本作为样本,所以在配置文件setting.yaml中将文件路径base_dir修改为input/hongloumeng,如下:

# ... 其他设置保持不变 ...
input:
  type: file # or blob
  file_type: text # or csv
  base_dir: "input/hongloumeng"
  file_encoding: utf-8
  file_pattern: ".*\\.txt$"
# ... 其他设置保持不变 ...

如果你也想要把红楼梦原文文本作为样本,可以通过我的另一个项目 hongloumeng-txt 获取到符合 GraphRAG 格式要求的文件,获取完成后将文件放在input/hongloumeng目录下即可。

  1. 在构建过程中会自动创建两个目录:

output 目录,用于存放查询结果。
cache 目录,用于存放缓存数据。

  1. 索引构建完成后会提示:All workflows completed successfully ,说明即可构建完成,随时可以进行查询。(如果没有 GPU 加持的话,构建的过程还是比较久的,可以在控制台你看到每一个步骤的进度条。)

查询测试

全局查询

执行命令:

python -m graphrag.query --root ./graphrag-practice-chinese --method global "故事的主旨是什么?"

查询结果示例:

SUCCESS: Global Search Response:
《红楼梦》的主旨在于通过对贾、王、史、薛四大家族的兴衰描写,展现了封建社会的各种矛盾和冲突,揭示了封建社会的腐朽和衰落。故事中的人物关系错综复杂,反映了当时社会的风俗习惯和道德观念。小说通过对宝玉、黛玉、宝钗等主要人物的爱情悲剧,探讨了人性、命运、社会关系等主题,反映了作者对封建礼教和封建制度的批判。

此外,小说还探讨了人生、命运、爱情、婚姻等主题,反映了作者对人生和社会的深刻思考。通过对贾宝玉、林黛玉、薛宝钗等主要人物的塑造,展现了封建社会中人性的复杂性和悲剧性,反映了人性的光辉与阴暗面。故事中的人物命运和家族兴衰反映了当时社会的现实,同时也表达了作者对美好人性的追求和对理想社会的向往。

综上所述,《红楼梦》的主旨不仅揭示了封建社会的腐朽和衰落,还探讨了人性、命运、社会关系等主题,具有深刻的思想内涵和艺术价值。

本地查询

执行命令:

python -m graphrag.query --root ./graphrag-practice-chinese --method local "贾母对宝玉的态度怎么样?"

查询结果示例:

SUCCESS: Local Search Response:
贾母对宝玉的态度可以从多个方面进行总结:

1. 溺爱与关心:贾母对宝玉有着深厚的溺爱。在《红楼梦》中,贾母多次探望宝玉,甚至亲自到园中看望他,表现出对宝玉的关心和爱护。例如,在贾母探视宝玉的情况中,贾母和王夫人一同探望宝玉,并询问他的病情,显示出贾母对宝玉的关心(Data: Entities (4704, 2929, 3895, 5470, 5868))。

2. 宠爱与宽容:贾母对宝玉的宠爱还体现在对宝玉行为的宽容上。宝玉性格顽劣,有时甚至有些荒唐,但贾母却总是以宽容的态度对待他。例如,贾母对宝玉的干妈“老东西”的指责,显示出贾母对宝玉的宠爱(Data: Relationships (528, 2124))。

3. 期望与教育:尽管贾母对宝玉宠爱有加,但她也关心宝玉的教育。在贾母房中,贾母关注宝玉的教育,并关心他的成长(Data: Entities (2702, 5524, 5868))。

4. 情感交流:贾母与宝玉之间有着深厚的情感交流。在贾母与宝玉的互动中,贾母不仅关心宝玉的身体健康,还关心他的心理状态,体现出两人之间深厚的感情(Data: Sources (607, 314, 481))。

综上所述,贾母对宝玉的态度是溺爱、关心、宠爱、宽容,同时也有期望和教育。这种复杂的情感关系,体现了贾母对宝玉的深厚感情。

全局查询和本地查询的区别

特征 本地查询 (Local Search) 全局查询 (Global Search)
查询范围 以特定实体为入口点 基于预先计算的实体社区摘要
查询方法 使用实体嵌入和图遍历 向每个社区提问并汇总答案
适用场景 针对特定实体的精确查询 广泛的主题性问题
性能 对简单直接任务更高效 适合处理复杂的多步骤查询
复杂度 相对较低 较高,需要更多计算资源
响应速度 通常更快 可能较慢,取决于查询复杂度
洞察深度 适中 更深入,能更全面理解上下文和关系
Token 使用量 较低 较高,due to 多次 LLM 调用
实现依赖 向量搜索和图遍历 预计算的社区摘要和多次 LLM 调用
最佳使用场景 需要快速直接答案的情况 需要深入洞察和复杂推理的场景

资源

graphrag-practice-chinese:https://github.com/Airmomo/graphrag-practice-chinese

hongloumeng-txt:https://github.com/Airmomo/hongloumeng-txt


❤️ 如果你也关注大模型与 AI 的发展现状,且对大模型应用开发非常感兴趣,我会快速跟你分享最新的感兴趣的 AI 应用和热点信息,也会不定期分享自己的想法和开源实例,欢迎关注我哦!

🥦 微信公众号|搜一搜:蚝油菜花 🥦

相关文章
|
10天前
|
存储 人工智能 弹性计算
阿里云弹性计算_加速计算专场精华概览 | 2024云栖大会回顾
2024年9月19-21日,2024云栖大会在杭州云栖小镇举行,阿里云智能集团资深技术专家、异构计算产品技术负责人王超等多位产品、技术专家,共同带来了题为《AI Infra的前沿技术与应用实践》的专场session。本次专场重点介绍了阿里云AI Infra 产品架构与技术能力,及用户如何使用阿里云灵骏产品进行AI大模型开发、训练和应用。围绕当下大模型训练和推理的技术难点,专家们分享了如何在阿里云上实现稳定、高效、经济的大模型训练,并通过多个客户案例展示了云上大模型训练的显著优势。
|
14天前
|
存储 人工智能 调度
阿里云吴结生:高性能计算持续创新,响应数据+AI时代的多元化负载需求
在数字化转型的大潮中,每家公司都在积极探索如何利用数据驱动业务增长,而AI技术的快速发展更是加速了这一进程。
|
5天前
|
并行计算 前端开发 物联网
全网首发!真·从0到1!万字长文带你入门Qwen2.5-Coder——介绍、体验、本地部署及简单微调
2024年11月12日,阿里云通义大模型团队正式开源通义千问代码模型全系列,包括6款Qwen2.5-Coder模型,每个规模包含Base和Instruct两个版本。其中32B尺寸的旗舰代码模型在多项基准评测中取得开源最佳成绩,成为全球最强开源代码模型,多项关键能力超越GPT-4o。Qwen2.5-Coder具备强大、多样和实用等优点,通过持续训练,结合源代码、文本代码混合数据及合成数据,显著提升了代码生成、推理和修复等核心任务的性能。此外,该模型还支持多种编程语言,并在人类偏好对齐方面表现出色。本文为周周的奇妙编程原创,阿里云社区首发,未经同意不得转载。
|
10天前
|
人工智能 运维 双11
2024阿里云双十一云资源购买指南(纯客观,无广)
2024年双十一,阿里云推出多项重磅优惠,特别针对新迁入云的企业和初创公司提供丰厚补贴。其中,36元一年的轻量应用服务器、1.95元/小时的16核60GB A10卡以及1元购域名等产品尤为值得关注。这些产品不仅价格亲民,还提供了丰富的功能和服务,非常适合个人开发者、学生及中小企业快速上手和部署应用。
|
6天前
|
人工智能 自然语言处理 前端开发
用通义灵码,从 0 开始打造一个完整APP,无需编程经验就可以完成
通义灵码携手科技博主@玺哥超carry 打造全网第一个完整的、面向普通人的自然语言编程教程。完全使用 AI,再配合简单易懂的方法,只要你会打字,就能真正做出一个完整的应用。本教程完全免费,而且为大家准备了 100 个降噪蓝牙耳机,送给前 100 个完成的粉丝。获奖的方式非常简单,只要你跟着教程完成第一课的内容就能获得。
|
21天前
|
自然语言处理 数据可视化 前端开发
从数据提取到管理:合合信息的智能文档处理全方位解析【合合信息智能文档处理百宝箱】
合合信息的智能文档处理“百宝箱”涵盖文档解析、向量化模型、测评工具等,解决了复杂文档解析、大模型问答幻觉、文档解析效果评估、知识库搭建、多语言文档翻译等问题。通过可视化解析工具 TextIn ParseX、向量化模型 acge-embedding 和文档解析测评工具 markdown_tester,百宝箱提升了文档处理的效率和精确度,适用于多种文档格式和语言环境,助力企业实现高效的信息管理和业务支持。
3946 4
从数据提取到管理:合合信息的智能文档处理全方位解析【合合信息智能文档处理百宝箱】
|
10天前
|
算法 安全 网络安全
阿里云SSL证书双11精选,WoSign SSL国产证书优惠
2024阿里云11.11金秋云创季活动火热进行中,活动月期间(2024年11月01日至11月30日)通过折扣、叠加优惠券等多种方式,阿里云WoSign SSL证书实现优惠价格新低,DV SSL证书220元/年起,助力中小企业轻松实现HTTPS加密,保障数据传输安全。
532 3
阿里云SSL证书双11精选,WoSign SSL国产证书优惠
|
9天前
|
数据采集 人工智能 API
Qwen2.5-Coder深夜开源炸场,Prompt编程的时代来了!
通义千问团队开源「强大」、「多样」、「实用」的 Qwen2.5-Coder 全系列,致力于持续推动 Open Code LLMs 的发展。
|
17天前
|
安全 数据建模 网络安全
2024阿里云双11,WoSign SSL证书优惠券使用攻略
2024阿里云“11.11金秋云创季”活动主会场,阿里云用户通过完成个人或企业实名认证,可以领取不同额度的满减优惠券,叠加折扣优惠。用户购买WoSign SSL证书,如何叠加才能更加优惠呢?
998 3
|
14天前
|
机器学习/深度学习 存储 人工智能
白话文讲解大模型| Attention is all you need
本文档旨在详细阐述当前主流的大模型技术架构如Transformer架构。我们将从技术概述、架构介绍到具体模型实现等多个角度进行讲解。通过本文档,我们期望为读者提供一个全面的理解,帮助大家掌握大模型的工作原理,增强与客户沟通的技术基础。本文档适合对大模型感兴趣的人员阅读。
451 18
白话文讲解大模型| Attention is all you need

热门文章

最新文章