使用chatgpt命名实体识别(NER)
#编程 #python #ai #nlp

这并不像其他所有ChatGpt博客,但是在这里我们将尝试了解promptify将如何与LLM(大型语言模型)一起使用,例如Chatgpt,例如执行 ner nertity识别(NER)与直接使用chatgpt相比,这种方法如何强大。

有趣的外卖

  1. 如何使用提示用于及时工程
  2. 简单命名实体识别(NER)使用Promtify+Chatgpt
  3. 自定义标签使用ProMTIFY+CHATGPT
  4. 用于指定实体识别(NER)
  5. 使用ProMTIFY+CHATGPT
  6. 一击命名实体识别(NER)
  7. 使用promtify+chatgpt
  8. 域知识命名实体识别(NER)

让我们开始...

什么是及时的工程和提示

提示工程是一种自然语言处理(NLP)概念,涉及发现/创建输入,从而产生理想或有用的结果。提示等同于告诉魔术灯中的精灵该怎么做。在这种情况下,魔术灯是 chat-gpt ,准备回答我们的任何问题, promtify 用于以这种方式构建和构建我们的问题像chatgpt这样的llms更好地理解问题并提供理想的结果。

什么命名实体识别(NER)

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

示例

NER example - 1

Image description

在这里国家/势头它们所属的称为命名实体识别(NER)。

究竟要做什么?

Promptify Flow Diagram
诸如chatgpt之类的LLM的输入和输出通常是普通的非结构化文本,但是当您通过某些参数(其中许多是可选的)将其传递给Quistify(其中许多是可选的)时,Promptify发送这些LLMS a 结构化输入是等同于问一个正确结构化的问题,这将帮助这些LLM更好地理解问题。然后以 python对象

返回LLM的输出

输出 - 普通Chatgpt vs Promtify+Chatgpt

我们将要求chatgpt在纯文本上执行命名实体识别,我们还将告诉我们输入句子所属的域,然后我们将尝试使用strivefify给出相同的输入,让我们观察响应。

普通chatgpt
Image description
在尝试再次尝试时,输出结构很有可能会有所不同,并且在应用程序中使用此输出相对难以使用,因为该结构在每个查询时可能会有所不同。


PROMTIFY+CHATGPT
NER-Output-Plain
实体(e)及其相应的类/类型(t)作为python对象返回。而且,您还可以观察到,通过促使更多实体被识别时。现在,相对而言,这是一个更强大的输出,可以轻松地在应用程序中使用。

现在,让我们检查一下提示的Python实现,代码实现是使用 Google Colab 来帮助解释更好的...

提示 - chatgpt

%%capture
!git clone https://github.com/promptslab/Promptify.git
!pip3 install openai

克隆提示存储库并安装OpenAI库

# Define the API key for the OpenAI model
api_key  = ""

粘贴通过遵循此博客How to generate API secret key
生成的API键

# Create an instance of the OpenAI model, Currently supporting Openai's all model, In future adding more generative models from Hugginface and other platforms
model = OpenAI(api_key)
nlp_prompter = Prompter(model)

创建一个OpenAI模型的实例,然后将其传递到促进的 prompter ,现在您有了一个对象,可以使用所需的参数传递提示。

# Example sentence that is sent to 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"

此样本输入与医疗领域有关,它与患者的医疗状况有关。

带有2行代码的命名实体识别(NER)

# Named Entity Recognition with No labels, no description, no oneshot, no examples
# Simple prompt with instructions
# domain name gives more info to model for better result generation, the parameter is optional
# Output will be python object -> [ {'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']))

NER-Output-Plain
在输出中
e - 实体
t - 类型/类实体属于
如果您观察到输出,则输出为 python对象,并且与CHATGPT的原始输出相比,结构
将LLMS与应用程序集成时,来自distify的此功能/功能可能非常有用。 参数是可选的,并且将域传递到您的提示中会导致更好的响应。

这并不是全部关于提示....

命名实体识别(NER)的自定义标签

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

# If want to perform NER with custom tags only (handling out-of-bounds prediction) prompt


result = nlp_prompter.fit('ner.jinja',
                          domain      = 'medical',
                          text_input  = sent, 
                          labels      = ["SYMPTOM", "DISEASE"])

# Output
pprint(eval(result['text']))

Custom Labels
您可以从输出中观察到属于所提供的自定义标签的实体已确定。

一镜头 - 命名实体识别(NER)

One shot learning顾名思义,是模型使用一个培训数据理解的能力。这真是令人着迷,借着像GPT这样的强大LLM,在提示的帮助下,您实际上可以做到。

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']))

在这里,您仅提供了标签症状疾病的模型的标记数据
e - 该实体属于
的标签/类 W - 实体

One Shot - Output
您可以从输出中观察到属于特定标签的实体(症状,疾病),这些实体被准确地识别出一声训练数据中的特定标签(症状,疾病)及其相应的标签。

命名实体识别 - 具有领域知识

#If want to give some domain knowledge and description in prompt to enhance the output

result = nlp_prompter.fit('ner.jinja',
                          domain      = 'clinical',
                          text_input  = sent,
                          examples    = one_shot_labelled_training_data,
                          description = "Below Paragraph is from discharge summary of a patient. The Paragraph describes the condition and symptoms of patient.",
                          labels      = ["SYMPTOM", "DISEASE"])

pprint(eval(result['text']))

如果您有领域知识,在上述情况下,临床领域以及对数据的描述的一小部分描述,则可以在 Description 参数中传递,这将进一步提高输出。

One shot with description

您现在只是刮擦了LLMS与Promtify一起使用时可以做的事情的表面。还有更多博客。

github repo Promtify
COLAB笔记本Notebook