• 使用 ChatGLM3 实现知识图谱的抽取与智能问答


    1. 获取查询问题的最近似段落

    代码如下,

    import json
    
    from langchain_openai import ChatOpenAI
    
    file_name = "./files/2022-03-31__中国工商银行股份有限公司__601398__工商银行__2021年__年度报告.txt"
    with open(file_name, encoding="utf-8") as f:
        financial_report = f.read()
    financial_report = financial_report.strip().split("\n")
    context = ""
    for line in financial_report:
        line = json.loads(line)
        if line["type"] == "text":
            try:
                con = line["inside"]
                context += con
            except:
                pass
    document = context[:480]
    print(document)
    

    示例输出结果,

    中国工商银行股份有限公司(股票代码:601398)2021年度报告公司简介中国工商银行成立于1984年1月1日。2005年10月28日,本行整体改制为股份有限公司。2006年10月27日,本行成功在上交所和香港联交所同日挂牌上市。经过持续努力和稳健发展,本行已经迈入世界领先大银行之列,拥有优质的客户基础、多元的业务结构、强劲的创新能力和市场竞争力。本行将服务作为立行之本,坚持以服务创造价值,向全球969.1万公司客户和7.04亿个人客户提供全面的金融产品和服务。本行自觉将社会责任融入发展战略和经营管理活动,在支持防疫抗疫、发展普惠金融、支持乡村振兴、发展绿色金融、支持公益事业等方面受到广泛赞誉。本行始终聚焦主业,坚持服务实体经济的本源,与实体经济共荣共存、共担风雨、共同成长;始终坚持风险为本,牢牢守住底线,不断提高控制和化解风险的能力;始终坚持对商业银行经营规律的把握与遵循,致力于打造“百年老店”;始终坚持稳中求进、创新求进,持续深化重点发展战略,积极发展金融科技,加快数字化转型;始终坚持专业专注,开拓专业化经营模式,锻造“大行工匠”。本行连续九
    

    2. 对文本进行知识图谱的抽取

    代码如下,

    from langchain_community.graphs.index_creator import GraphIndexCreator
    from langchain_core.prompts.prompt import PromptTemplate
    
    llm = ChatOpenAI(api_key="sk-123456", base_url="http://192.168.31.15:8000/v1", model="gpt-4", temperature=0)
    index_creater = GraphIndexCreator(llm=llm)
    KG_TRIPLE_DELIMITER = "<|>"
    
    prompt = PromptTemplate(
        input_variables=["text"],
        template=(
            "你是一个网络智能,帮助人类追踪有关所有相关人物、事物、概念等的知识三元组,"
            "并将它们与你存储在权重中的知识以及存储在知识图谱中的知识整合。"
            "从文本中提取所有的知识三元组。"
            "知识三元组是包含主语、谓语和宾语的子句。主语是被描述的实体,"
            "谓语是被描述的主语的属性,而宾语是该属性的值。\n\n"
            "示例\n"
            "这是美国的一个州。它也是美国黄金产量第一的州。\n\n"
            f"输出:(内华达州, 是一个, 州){KG_TRIPLE_DELIMITER}(内华达州, 位于, 美国)"
            f"{KG_TRIPLE_DELIMITER}(内华达州, 第一产量的是, 黄金)\n"
            "示例结束\n\n"
            "示例\n"
            "我要去商店。\n\n"
            "输出:无\n"
            "示例结束\n\n"
            "示例\n"
            "哦,原来如此。我知道笛卡尔喜欢驾驶古董摩托车和弹曼陀林。\n"
            f"输出:(笛卡尔, 喜欢驾驶, 古董摩托车){KG_TRIPLE_DELIMITER}(笛卡尔, 弹奏, 曼陀林)\n"
            "示例结束\n\n"
            "示例\n"
            "{text}"
            "输出:"
        )
    )
    
    graph = index_creater.from_text(text=document, prompt=prompt)
    knowledge_graph = graph.get_triples()
    print(knowledge_graph)
    

    示例输出结果,

    [('中国工商银行股份有限公司', '1984年1月1日', '成立于'), ('中国工商银行股份有限公司', '股份有限公司', '整体改制为'), ('中国工商银行股份有限公司', '2006年10月27日', '上市时间'), ('中国工商银行股份有限公司', '601398', '股票代码'), ('中国工商银行股份有限公司', '全球969.1万公司客户和7.04亿个人客户', '服务客户'), ('中国工商银行股份有限公司', '全面的金融产品和服务', '业务范围'), ('中国工商银行股份有限公司', '支持防疫抗疫、发展普惠金融、支持乡村振兴、发展绿色金融、支持公益事业', '社会责任'), ('中国工商银行股份有限公司', '聚焦主业、服务实体经济、风险为本、遵循经营规律、打造“百年老店”、稳中求进、创新求进、深化重点发展战略、发展金融科技、加快数字化转型、专业专注', '经营策略'), ('中国工商银行股份有限公司', '受到广泛赞誉', '经营业绩'), ('中国工商银行股份有限公司', '服务作为立行之本,坚持以服务创造价值', '经营理念'), ('中国工商银行股份有限公司', '开拓专业化经营模式,锻造“大行工匠”', '经营模式')]
    
    

    使用 Qwen2-72B 的示例输出,

    [('中国工商银行', '1984年1月1日', '成立于'), ('中国工商银行', '2005年10月28日', '改制为股份有限公司在'), ('中国工商银行', '2006年10月27日', '上市日期是'), ('中国工商银行', '上交所', '上市地点包括'), ('中国工商银行', '香港联交所', '上市地点包括'), ('中国工商银行', '969.1万', '拥有公司客户数量为'), ('中国工商银行', '7.04亿', '拥有个人客户数量为'), ('中国工商银行', '全面的金融产品和服务', '提供服务范围是'), ('中国工商银行', '支持防疫抗疫', '社会责任活动包括'), ('中国工商银行', '发展普惠金融', '社会责任活动包括'), ('中国工商银行', '支持乡村振兴', '社会责任活动包括'), ('中国工商银行', '发展绿色金融', '社会责任活动包括'), ('中国工商银行', '支持公益事业', '社会责任活动包括'), ('中国工商银行', '实体经济', '坚持服务对象是'), ('中国工商银行', '风险为本', '风险管理原则是'), ('中国工商银行', '金融科技', '发展战略重点是'), ('中国工商银行', '加快中', '数字化转型状态是'), ('中国工商银行', '专业化经营', '经营模式特点是'), ('中国工商银行', '“百年老店”', '打造目标是'), ('中国工商银行', '601398', '股票代码为')]
    

    使用 Mixtral 8*7B 的示例输出,

    [('中国工商银行股份有限公司', '1984年1月1日', '成立于'), ('中国工商银行股份有限公司', '969.1万个公司客户和7.04亿个人客户', '服务'), ('中国工商银行股份有限公司', '社会责任融入发展战略和经营管理活动', '自觉将'), ('中国工商银行股份有限公司', '防疫抗疫、发展普惠金融、支持乡村振兴、发展绿色金融、支持公益事业', '支持'), ('中国工商银行股份有限公司', '主业', '始终聚焦'), ('中国工商银行股份有限公司', '服务实体经济的本源', '坚持'), ('中国工商银行股份有限公司', '实体经济共荣共存、共担风雨、共同成长', '与'), ('中国工商银行股份有限公司', '风险为本', '始终坚持'), ('中国工商银行股份有限公司', '底线', '牢牢守住'), ('中国工商银行股份有限公司', '控制和化解风险的能力', '不断提高'), ('中国工商银行股份有限公司', '商业银行经营规律', '遵循'), ('中国工商银行股份有限公司', '打造“百年老店”', '致力于'), ('中国工商银行股份有限公司', '金融科技', '积极发展'), ('中国工商银行股份有限公司', '专业专注', '坚持'), ('中国工商银行股份有限公司', '专业化经营模式', '开拓'), ('中国工商银行股份有限公司', '“大行工匠”', '锻造')]
    
    

    3. 完成智能问答

    代码如下,

    from langchain.prompts import PromptTemplate
    
    prompt = PromptTemplate(
        input_variables=["query", "document"],
        template="你是一名专业的财务工作人员,参考对应的文献材料:```{document}```,认真回答```{query}```这个问题,如果文献中找不到答案就回答不知道。",
    )
    query = "工商银行哪一年改制的"
    
    llm = ChatOpenAI(api_key="sk-123456", base_url="http://192.168.31.15:8000/v1", model="gpt-4", temperature=0)
    chain = prompt | llm
    result = chain.invoke({"query": query, "document": knowledge_graph})
    print(result)
    

    示例输出结果,

    content='工商银行在1984年1月1日成立后,于股份有限公司整体改制为工商银行股份有限公司。具体的改制年份在提供的文献材料中并未直接给出,因此无法确定改制的确切年份。' response_metadata={'token_usage': {'completion_tokens': 47, 'prompt_tokens': 318, 'total_tokens': 365}, 'model_name': 'gpt-4', 'system_fingerprint': None, 'finish_reason': 'stop', 'logprobs': None} id='run-42ab1a2e-58c6-41ad-b8e4-6d153f643eab-0' usage_metadata={'input_tokens': 318, 'output_tokens': 47, 'total_tokens': 365}
    

    使用 Qwen2-72B 的示例输出,

    content='中国工商银行是在2005年10月28日改制为股份有限公司的。' response_metadata={'token_usage': {'completion_tokens': 21, 'prompt_tokens': 358, 'total_tokens': 379}, 'model_name': 'gpt-4', 'system_fingerprint': 'fp_ollama', 'finish_reason': 'stop', 'logprobs': None} id='run-c935d178-41b7-42df-9d9b-f0c7c13da98b-0' usage_metadata={'input_tokens': 358, 'output_tokens': 21, 'total_tokens': 379}
    

    使用 Mixtral 8*7B 的示例输出,

    content=' 根据提供的材料,没有找到关于工商银行改制的具体信息,因此我无法确定工商银行哪一年改制的。' response_metadata={'token_usage': {'completion_tokens': 46, 'prompt_tokens': 608, 'total_tokens': 654}, 'model_name': 'gpt-4', 'system_fingerprint': 'fp_ollama', 'finish_reason': 'stop', 'logprobs': None} id='run-7a8b8921-8e5e-4c55-aae6-17efccc07641-0' usage_metadata={'input_tokens': 608, 'output_tokens': 46, 'total_tokens': 654}
    

    完结!

  • 相关阅读:
    java入门,登录注册案例
    合并区间:解决区间重叠问题的高效算法
    Hadoop简介
    测试/开发程序员喜欢跳槽?跳了就能涨工资吗?
    ubuntu20.04配置解压版mysql5.7
    Java - 发送 HTTP 请求的及其简单的方法模块 - hutool
    Linux-进程间通信
    python调用c++动态库
    Neodynamic Barcode Professional for Windows Forms 14.0
    java计算机毕业设计华夏球迷俱乐部网站设计与实现源码+mysql数据库+系统+lw文档+部署
  • 原文地址:https://blog.csdn.net/engchina/article/details/140111377