当前位置:金沙娱场城app-老版金沙app下载客户手机端|资讯|chatgpt|大语言模型|提示工程

使用 chatgpt 进行命名实体识别 (ner) -金沙娱场城app

作者:来点技术吧发布时间:2024-07-11

与其他 chatgpt 不同,但在这里我们将尝试了解如何将promptify与 chatgpt 等 llm(大型语言模型)一起使用来执行命名实体识别(ner),以及这种方法如何比直接使用 chatgpt 更为稳健。

提示工程是一种自然语言处理 (nlp) 概念,涉及发现/创建产生理想或有用结果的输入。提示相当于告诉神灯里的精灵该做什么。在这种情况下,神灯是chat-gpt,随时准备回答我们的任何问题,而promtify用于构建和构造我们的问题,以便像 chatgpt 这样的 llm 能够更好地理解问题并提供理想的结果。

实体可以定义为文本中的关键信息。实体可以是单个单词或一组单词。命名实体识别(ner)可以定义为识别和分类 文本中的实体(关键信息)的过程。


这里的人、国家和职位是实体所属的组/类,识别这些实体及其所属组的过程称为命名实体识别(ner)。


像 chatgpt 这样的 llm 的输入和输出通常是纯非结构化文本,但是当你将它与某些参数(其中许多是可选的)一起通过 promptify 时,promtify 会向这些 llm 发送一个结构化的输入,这相当于提出一个结构正确的问题,这将有助于这些 llm 更好地理解问题。然后,llm 的输出将作为python 对象返回。

我们将要求 chatgpt 对纯文本执行命名实体识别,我们还将判断输入句子属于哪个域,然后我们将尝试使用 promptify 提供相同的输入并观察响应。

chatgpt 输出结构很有可能在重试时发生变化,并且在应用程序中使用此输出相对困难,因为结构可能会因每个查询而异。

promtify chatgpt 实体 (e) 及其对应的类/类型 (t) 作为 python 对象从 promptify 返回。您还可以观察到,当通过 promptify 传递时,会识别出更多实体。现在,相对而言,这是一个更强大的输出,可以轻松地在应用程序中使用。


现在让我们来看看 promptify 的 python 实现,代码实现是使用google colab完成的,以帮助更好地解释......

 %�pture
 !git clone https://github.com/promptslab/promptify.git
 !pip3 install openai

克隆 promptify 存储库并安装 openai 库

 # 定义 openai 模型的 api 密钥
 api_key  = "" # 创建 openai 模型的实例,目前支持 openai 的所有模型,未来将添加来自 hugginface 和其他平台的更多生成模型
 model = openai(api_key)
 nlp_prompter = prompter(model)

创建 openai 模型的一个实例并将其传递给 promptify 的prompter,现在您有一个对象,您可以将提示与所需的参数一起传递到其中。

 # 发送至 gpt 的例句
 sent = "the patient is a 93-year-old female with a medical history of chronic right hip pain, osteoporosis, hypertension, depression, and chronic atrial fibrillation admitted for evaluation and management of severe nausea and vomiting and urinary tract infection"

此示例输入与医疗领域相关,涉及患者的医疗状况。

 # 无标签、无描述、无样本、无示例的命名实体识别
 # 带有说明的简单提示
 # 域名为模型提供了更多信息以便生成更好的结果,该参数是可选的
 # 输出是 python 对象-> [ {'e' : entity name, 't': type of entity } ]
 
 result = nlp_prompter.fit('ner.jinja',
                           domain      = 'medical',
                           text_input  = sent,
                           labels      = none)
 # output
 pprint(eval(result['text']))


在输出:e -实体,t -实体所属的类型/类中 ,如果您观察输出,则输出是一个python 对象,与 chatgpt 的原始输出相比,其结构良好。promptify 的这个功能/特性在将 llm 与应用程序集成时非常有用。域参数是可选的,将域传递给提示将产生更精确的响应。

这并不是 promptify 的全部内容...

您还可以提供自定义标签,以便从提示中识别自定义标签及其对应的实体。

 # 如果只想使用自定义标签执行 ner(处理越界预测)提示
 result = nlp_prompter.fit('ner.jinja',
                           domain      = 'medical',
                           text_input  = sent,
                           labels      = ["symptom", "disease"])
 
 # output
 pprint(eval(result['text']))

您可以从输出中观察到,属于所提供的自定义标签的实体已被识别。

顾名思义,一次性学习是指模型通过一次训练数据进行理解的能力。这真是太神奇了,有了 gpt 这样强大的 llm 和 promptify 的帮助,你就可以做到这一点。

 one_shot_training_data = "leptomeningeal metastases (lm) occur in patients with breast cancer (bc) and lung cancer (lc). the cerebrospinal fluid (csf) tumour microenvironment (tme) of lm patients is not well defined at a single-cell level. we did an analysis based on single-cell rna sequencing (scrna-seq) data and four patient-derived csf samples of idiopathic intracranial hypertension (iih)"
 one_shot_labelled_training_data = [[one_shot, [{'e': 'disease', 'w': 'leptomeningeal metastases'}, {'e': 'disease', 'w': 'breast cancer'}, {'e': 'disease', 'w': 'lung cancer'}, {'e': 'biomarker', 'w': 'cerebrospinal fluid'}, {'e': 'disease', 'w': 'tumour microenvironment'}, {'e': 'test', 'w': 'single-cell rna sequencing'}, {'e': 'disease', 'w': 'idiopathic intracranial hypertension'}]]]
 
 result = nlp_prompter.fit('ner.jinja',
                           domain      = 'medical',
                           text_input  = sent,
                           examples    = one_shot_labelled_training_data,
                           labels      = ["symptom", "disease"])
 
 
 pprint(eval(result['text']))

在这里,你只向模型提供了 1 个带标签的数据,标签为symptomdisease,其中

  • e -实体所属的标签/类别

  • w -实体

您可以从输出中观察到,一次性训练数据中提供的特定标签(症状、疾病)的实体与其相应的标签一起被准确识别。

 # 如果想在提示中给出一些领域知识和描述以增强输出
 result = nlp_prompter.fit('ner.jinja',
                           domain      = 'clinical',
                           text_input  = sent,
                           examples    = one_shot_labelled_training_data,
                           description = "以下段落摘自一位患者的出院总结。该段落描述了患者的病情和症状。",
                           labels      = ["symptom", "disease"])
 
 pprint(eval(result['text']))

如果您具有领域知识,在上述案例中是临床领域以及有关数据内容的简短描述,那么可以在描述参数中传递该知识,这将进一步提高输出的准确性。




5小时前

5小时前

5小时前

5小时前

5小时前

5小时前

5小时前

5小时前

5小时前

5小时前


金沙娱场城app copyright © 2024 金沙娱场城app-老版金沙app下载客户手机端  北京智识时代科技有限公司  金沙娱场城app的版权所有 

网站地图