|
|
| import pandas as pd
|
| import json
|
|
|
|
|
| with open('F:/GeoLLM/data/train_triples.json', 'r', encoding='utf-8') as f:
|
| data = json.load(f)
|
|
|
| df = pd.DataFrame(data)
|
|
|
| text = df['text']
|
| label = df['triple_list']
|
|
|
|
|
| print(len(text))
|
|
|
| from response_to_json import parse_llm_response, save_to_json, save_raw_response
|
| from LLM import zero_shot
|
|
|
|
|
| model_series = 'gemini'
|
|
|
| model_name = 'gemini-1.5-pro-002'
|
|
|
| prompt = '''
|
| 你是一名专业经验丰富的工程地质领域专家,你的任务是从给定的输入文本中提取"实体-关系-实体"三元组。关系类型包括24种:"出露于"、"位于"、"整合接触"、"不整合接触"、"假整合接触"、"断层接触"、"分布形态"、"大地构造位置"、"地层区划"、"出露地层"、"岩性"、"厚度"、"面积"、"坐标"、"长度"、"含有"、"所属年代"、"行政区划"、"发育"、"古生物"、"海拔"、"属于"、"吞噬"、"侵入"。提取过程请按照以下规范:
|
| 1. 输出格式:
|
| 严格遵循JSON数组,无额外文本,每个元素包含:
|
| [
|
| {
|
| "entity1": "实体1",
|
| "relation": "关系",
|
| "entity2": "实体2"
|
| }
|
| ]
|
| 2. 复杂关系处理:
|
| - 若同一实体参与多个关系,需分别列出不同三元组
|
| 3. 关系的解释:
|
| 24种关系中,“地层区划”、“行政区划”、“古生物”、“位于”、“厚度”、“面积”、“坐标”、“长度”、“含有”、“海拔”和“属于”这几种关系比较容易理解,不再单独进行解释,一些专业性的关系解释如下:
|
| - 出露于:指岩石或地层暴露在地表或近地表,未被覆盖或埋藏。
|
| - 整合接触:指上下地层连续沉积且产状一致,无明显沉积间断或侵蚀面的接触关系。
|
| - 不整合接触:指上下地层存在明显沉积间断且产状不同,通常伴随侵蚀面的接触关系。
|
| - 假整合接触:指地层看似连续平行沉积,但实际存在沉积间断或侵蚀面,部分地质时期地层缺失的接触关系。
|
| - 断层接触:因断层活动导致两侧岩层发生断裂并产生相对位移的地层接触关系。
|
| - 分布形态:地质体在空间展布中呈现的几何形状或结构特征。
|
| - 大地构造位置:地质体在板块构造中的空间位置归属。
|
| - 出露地层:直接裸露在地表、未被土壤或植被覆盖的岩层。
|
| - 岩性:岩石的物质组成、结构构造及物理特征。
|
| - 所属年代:地质体形成时所处的地质时期。
|
| - 发育:地质体在特定条件下的形成、演化和发展的过程。
|
| - 吞噬:某一地质体在空间上完全覆盖或取代另一地质体的过程。
|
| - 侵入:岩浆或岩体进入并占据周围岩层空间的地质作用。
|
| '''
|
| j=0
|
| q=0
|
|
|
| json_path = 'F:/GeoLLM//output/Knowledge-guided_rerun/one_shot/'+model_name+'.json'
|
| j=len(json.load(open(json_path,'r',encoding='utf-8')))
|
| q=len(json.load(open('F:/GeoLLM//output/Knowledge-guided_rerun/one_shot_raw/'+model_name+'.json','r',encoding='utf-8')))
|
|
|
| if q==j:
|
| print(j)
|
| for i in range(j,500):
|
| response = zero_shot(model_series, model_name, prompt+'\n'+'以下是地质描述文本,请基于上述描述提取三元组:'+'\n'+text[i])
|
| print(i)
|
|
|
|
|
| formatted_triples = parse_llm_response(response)
|
|
|
|
|
| save_to_json(text[i], formatted_triples, model_series=model_name, output_dir='F:/GeoLLM/output/Knowledge-guided_rerun/one_shot/')
|
|
|
| save_raw_response(response, text[i], model_series=model_name, output_dir='F:/GeoLLM//output/Knowledge-guided_rerun/one_shot_raw/')
|
|
|
| else:
|
| print('q!=j') |