File size: 6,184 Bytes
badcf3c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# 测试llama和qen
if __name__ == '__main__':
    import pandas as pd
    import json

    # 加载地质描述文本,提取prompt和label
    with open('./data/train_triples.json', 'r', encoding='utf-8') as f:
        data = json.load(f)
    # 将data转换为DataFrame
    df = pd.DataFrame(data)
    # 提取prompt和label
    text = df['text']
    label = df['triple_list']
    # print(prompt,label)

    print(len(text))


    from response_to_json import parse_llm_response, save_to_json, save_raw_response
    from LLM_Special_for_0423 import zero_shot
    # from prompt_generate import generate_prompt_with_examples as generate_prompt
    # from prompt_generate import generate_prompt_with_best_matches as generate_prompt_b

    model_series = 'gpt3'
    model_name = 'gpt-3.5-turbo'

    prompt = '''

    你是一名专业经验丰富的工程地质领域专家,你的任务是从给定的输入文本中提取"实体-关系-实体"三元组。关系类型包括24种:"出露于"、"位于"、"整合接触"、"不整合接触"、"假整合接触"、"断层接触"、"分布形态"、"大地构造位置"、"地层区划"、"出露地层"、"岩性"、"厚度"、"面积"、"坐标"、"长度"、"含有"、"所属年代"、"行政区划"、"发育"、"古生物"、"海拔"、"属于"、"吞噬"、"侵入"。提取过程请按照以下规范:

    1.  输出格式:

        严格遵循JSON数组,无额外文本,每个元素包含:

        [

            {

                "entity1": "实体1",

                "relation": "关系",

                "entity2": "实体2"

            }

        ]

    2.  复杂关系处理:

        若同一实体参与多个关系,需分别列出不同三元组

    3.  关系的解释:

        对部分较难提取的关系解释如下:

        (1)出露于:指岩石或地层暴露在地表或近地表,未被覆盖或埋藏,在三元组中常显示为"出露"、"分布",主体和客体分别是"岩石、地层(X组或X群)"和"地区"。



        (2)位于:确立地质单元在更大空间框架(行政区域/构造单元)中的从属关系,表达宏观空间归属,不能用来描述"X岩"在"X地方",使用"出露于"关系替代。



        (3)整合接触:指示上下地层连续沉积形成的接触关系,反映无显著沉积间断的岩性渐变特征,专门用来描述地层之间的关系,请勿滥用。



        (4)不整合接触:描述存在沉积缺失的地层接触界面,包含角度差异或岩性突变的接触特征,专门用来描述地层之间的关系,请勿滥用。



        (5)假整合接触:特指产状一致的平行不整合类型,强调沉积序列的间断但无构造变形,专门用来描述地层之间的关系,请勿滥用。



        (6)分布形态:刻画地质单元的空间展布特征,包括几何形态与延伸方向的组合描述。在三元组中主体和客体分别是"岩石、地层(X组或X系)"和"X块、状、体、结构、展布"等。



        (7)大地构造位置:定位地质单元在板块构造格架中的归属,关联造山带或构造单元划分。在三元组中主体和客体分别是"岩石、地层(X群或X系)"和"XX带"。



        (8)地层区划:表征地层单元在区域地层划分体系中的层级归属与分区属性。在三元组中主体和客体分别是"地层、测区"和"X分区"。



        (9)出露地层:特指某区域实际暴露的地层实体,强调可观测的地表地质单元。在三元组中主体和客体分别是"地层(X组或X群)"和"地层(X组或X群)"。



        (10)岩性:定义岩石的物质组成与结构特征,包含复合岩性的层级描述要素。



        (11)面积:表征地质单元的水平展布范围,以数值与单位组合的标准化形式呈现。



        (12)坐标:特指记录地质特征点的地理空间定位数据。



        (13)含有:指示主体物质的成分包含关系,专指矿物组成或化石赋存状态,不同于日常的意思,不能用来描述“X岩"含有"古生物",要使用"古生物"关系代替。



        (14)发育:描述地质构造或沉积特征的显现程度与形成状态强度。在三元组中主体和客体分别是"岩石"和"X层(片)理等、X构造"。



        (15)古生物:记录地层中赋存的化石生物信息,需包含完整拉丁学名与分类特征。专指"X岩石、地区、地层(X组或X群"有"古生物"。



        (16)属于:确立地质单元在分类体系中的类型归属,构建概念层级关系,不可滥用。



        (17)吞噬:表征侵入体对围岩的空间取代过程,反映岩浆活动的改造作用。

    '''
    j=0
    q=0

    json_path = './output/Knowledge-guided_rerun/nomal/'+model_name+'.json'
    j=len(json.load(open(json_path,'r',encoding='utf-8')))
    q=len(json.load(open('./output/Knowledge-guided_rerun/nomal_raw/'+model_name+'.json','r',encoding='utf-8')))
    # # 当q=j时才继续处理
    # # 当q=j时才继续处理
    if q==j:        
        print(j)
        for i in range(j,500):
            response = zero_shot(model_series, model_name, prompt+'\n'+'以下是地质描述文本,请基于上述描述提取三元组:'+'\n'+text[i])
            print(prompt+'\n'+'以下是地质描述文本,请基于上述描述提取三元组:'+'\n'+text[i])
            # 解析响应
            formatted_triples = parse_llm_response(response)
                
            # 保存结果  
            save_to_json(text[i], formatted_triples, model_series=model_name, output_dir='./output/Knowledge-guided_rerun/nomal/')
            # 保存原始响应为josn文件save_raw_response
            save_raw_response(response, prompt+'\n'+'以下是地质描述文本,请基于上述描述提取三元组:'+'\n'+text[i], model_series=model_name, output_dir='./output/Knowledge-guided_rerun/nomal_raw/')

    else:
        print('q!=j')