努力加载中
  • 推荐
  • 要闻
  • 财经
  • 娱乐
  • 时尚
  • 情感

热点推荐

热门图文

DeepSeek本地RAG知识库(19):数据结构化2讲解及python工具制作
程序员寒山

大家好,我是程序员寒山。

知识库回答不准确怎么办?

今天我们再和大家分享一个Excel格式的肿瘤医生问答系统的数据,如何通过结构化提高问答准确率,并使用Python程序自动处理。文中会详细的介绍每个过程,包括python代码怎么写。

一、引言

上期我们讲了RAG知识库的一个菜谱如何结构化,来提高回答准确率的分享,很多粉丝说太麻烦,太复杂。

其实就像前面讲过的,没有那个技术是完美的,要想实现一个效果,背后肯定需要很多努力的,我们现在使用的每项技术背后都有无数的人在为之付出,我们只是站在了巨人的肩膀上,

今天我们对Excel肿瘤医生问答系统数据做结构化,给大家提供一个文件格式参考。 同时使用python工具自动处理,详细告诉大家怎么制作工具。

二、数据结构化对 RAG 的意义

随着我们的不断使用,已经感受到数据结构化对于检索增强生成(RAG)是至关重要。 高质量的结构化数据是实现准确、高效问答系统的关键基础。

我们所有的讨论都是以这个为出发点,其实理解这个最好的例子是这样的。

比如:我们上学时候考试最怕什么?最怕题目中有字没有印全,缺少条件,那这个题目就没法解,我记得上高中的时候,经常发生考试过程中有老师进来,某道题目缺个什么什么条件,临时加上。

其实RAG就是这样,内容不全问答不准! 有人可能会说大模型可以纠正,那是它有这个知识的前提,我们的知识库面向的都是私有知识,它不知道的,所以能掰回来多少真的不敢保证。

我们以肿瘤问答的实际应用来看看它的重要性体现:

2.1 提高检索效率

结构化的数据可以使 RAG 系统更快速、准确地定位到与用户问题相关的信息。

例如,在肿瘤问答知识库中,将问题按照肿瘤类型(如肺癌、乳腺癌等)、问题类别(诊断、治疗、预防等)进行结构化分类,当用户提出问题时,RAG 系统能够迅速在相应的结构化数据区域中检索,大大缩短了检索时间。

2.2 增强生成质量

结构化的数据为语言模型提供了更清晰、有序的信息来源,有助于生成更准确、连贯的回答。

例如: 在肿瘤领域,准确的医学知识至关重要,结构化的数据可以确保语言模型在生成回答时,基于可靠且组织良好的知识,减少错误和模糊的回答。

2.3 知识管理与更新

结构化的数据便于对知识库进行管理和更新

例如:当有新的肿瘤研究成果或治疗方法出现时,可以方便地将其添加到相应的结构化数据类别中,保证知识库的时效性和准确性,进而提升 RAG 系统的性能。

三、数据结构化的方法

在构建肿瘤问答知识库时,提高准确率有很多方法,结构化也有很多方法,这里主要给大家一个参考非绝对不唯一

3.1 分类与打标签

根据肿瘤的不同属性(如问题、病例、治疗方法等)对问题和答案进行分类,并添加相应的标签。

例如,对于“胃癌的病症是什么?”这个问题,可以添加“胃癌”、“病例”、“治疗方法”等标签,以便于后续的检索和管理。

3.2 实体抽取与关系建模

从文本数据中抽取关键实体(如肿瘤名称、药物名称、检查项目等),并建立实体之间的关系。

例如,在描述某种肿瘤治疗方案时,明确药物与肿瘤类型之间的关系,这有助于更深入地理解和利用知识。

3.3 层次化结构组织

将知识按照一定的层次结构进行组织。

例如:从宏观的肿瘤领域到具体的肿瘤类型,再到更细的问题类别。这种层次化的结构可以使知识更易于理解和访问。

四、结构化的方向

这些结构化的方法,组合应用可以让知识的准确率提高,提高到什么程度就要看我们的数据做的程度。

分类打标签可以提供到95%的准确率,但是再提高一个百分点就需要付出前面几倍的工作量才可以。这是我们很多技术的一个共性问题:长尾效应。

大家都说从0到1很难是创造,但是从99到100更难是重生

五、肿瘤问答数据结构化及Python实现

在实际的数据处理中,我们常常会遇到 Excel 格式的数据,为了更好地进行数据结构化和后续的 RAG 应用,需要将其转化为TXT格式的结构化数据并打上标签


以下是使用 Python 实现这一转化的详细步骤:

5.1 准备工作

首先,确保安装了必要的 Python 环境及库,如 pandas 用于处理 Excel 数据。可以使用 pip install pandas 命令进行安装。csv库用于处理csv格式的数据。

5.2 读取 Excel 数据

使用 pandas 库的 read_excel 函数读取 Excel 文件中的数据。假设我们的 Excel 文件名为 OncologyQA.xlsx,包含“问题”和“病例及治疗方法”两列数据。

import pandas as pd

def excel_to_formatted_txt(excel_file, output_txt_file):
     
    # 读取Excel文件
    df = pd.read_excel(excel_file)

5.3 数据处理与结构化打标签

对读取到的数据进行的处理,如去除空值、清洗文本等。然后,按照一定的格式将数据转化为 TXT 结构化数据。

例如,我们可以将每个问题和病例治疗按照“问题:[问题内容] 病例分析:[病例内容]”的格式进行组织。


        # 遍历每一行
        for index, row in df.iterrows():
            # 写入格式化的内容
            f.write(f"问题:{row.iloc[0]}\n")
            f.write(f"病例分析:{row.iloc[1]}\n")
           

5.4 数据分段

对数据进行分段处理,使用“####”分段标识符。


            # 添加分隔符
            f.write("####\n")

5.5 保存为 TXT 文件

使用 Python 的文件操作功能,将处理好的 TXT 内容保存为一个 TXT 文件。

# 保存为 TXT 文件
with open(output_txt_file, 'w', encoding='utf-8') as f:
    file.write(txt_content)

5.6 完整代码

这是完整的代码,包括csv和excel两种格式的转化功能。


import csv
import pandas as pd
def convert_csv_to_txt(csv_file_path, txt_file_path):
    try:
        with open(csv_file_path, 'r', encoding='utf-8', newline='') as csvfile, \
                open(txt_file_path, 'w', encoding='utf-8') as txtfile:
            reader = csv.reader(csvfile)
            next(reader)  # 跳过标题行
            for row in reader:
                question = row[0]
                case_analysis = row[1]
                txtfile.write(f'问题:{question}\n')
                txtfile.write(f'病例分析:{case_analysis}\n')
                txtfile.write('####\n')
        print(f"成功将 {csv_file_path} 转换为 {txt_file_path}")
    except FileNotFoundError:
        print(f"错误:未找到文件 {csv_file_path}")
    except IndexError:
        print("错误:CSV 文件中的行格式不符合预期,可能缺少列。")
    except Exception as e:
        print(f"发生未知错误:{e}")

def excel_to_formatted_txt(excel_file, output_txt_file):
 
    
    # 读取Excel文件
    df = pd.read_excel(excel_file)
    
    # 打开输出文件
    with open(output_txt_file, 'w', encoding='utf-8') as f:
        # 遍历每一行
        for index, row in df.iterrows():
            # 写入格式化的内容
            f.write(f"问题:{row.iloc[0]}\n")
            f.write(f"病例分析:{row.iloc[1]}\n")
            # 添加分隔符
            f.write("####\n")

if __name__ == "__main__":
    excel_file = 'OncologyQA.xlsx'
    csv_file = 'OncologyQA.csv'
    csv_txt_file = 'csvTotxt.txt'
    excle_txt_file = 'excelTotxt1.txt'
    convert_csv_to_txt(csv_file, csv_txt_file)

    excel_to_formatted_txt(excel_file, excle_txt_file)

通过以上步骤,我们成功地将 Excel 格式的肿瘤问答数据转化为了 TXT 结构化数据,为后续的 RAG 应用奠定了良好的基础。

六、测试验证

使用Dify工作流来进行验证。输入我们的问题:“胰腺癌该怎么去治疗?”

回答的结构:


七、结论

本文以肿瘤问答知识库为例,详细阐述了数据结构化对 RAG 的重要意义,介绍了实用的数据结构化方法,并通过 Python 工具实现了将 Excel 和csv数据转化为 TXT 结构化数据的过程。

合理的数据结构化不仅可以提高 RAG 系统的性能,还能更好地管理和利用知识资源。

在未来更高效、智能的数据结构化方法,将有助于推动 RAG 技术在医疗领域及其他领域的广泛应用。

希望这篇文章能给你带来一些启发和帮助,如果你还有其他问题,请随时留言告诉我。

相关推荐
x