Skip to content

Commit

Permalink
added relation_extraction examples
Browse files Browse the repository at this point in the history
  • Loading branch information
monk1337 authored Feb 8, 2023
1 parent 9519d09 commit 8d4844a
Show file tree
Hide file tree
Showing 2 changed files with 378 additions and 0 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,7 @@ result = nlp_prompter.fit('ner.jinja',
| Binary Text Classification | [Classification Examples with GPT-3](https://colab.research.google.com/drive/1gNqDxNyMMUO67DxigzRAOa7C_Tcr2g6M?usp=sharing) ||
| Question-Answering | [QA Task Examples with GPT-3](https://colab.research.google.com/drive/1Yhl7iFb7JF0x89r1L3aDuufydVWX_VrL?usp=sharing) ||
| Question-Answer Generation | [QA Task Examples with GPT-3](https://colab.research.google.com/drive/1Yhl7iFb7JF0x89r1L3aDuufydVWX_VrL?usp=sharing) ||
| Relation-Extraction | [Relation-Extraction Examples with GPT-3](https://colab.research.google.com/drive/1iW4QNjllc8ktaQBWh3_04340V-tap1co?usp=sharing) ||
| Summarization | [Summarization Task Examples with GPT-3](https://colab.research.google.com/drive/1PlXIAMDtrK-RyVdDhiSZy6ztcDWsNPNw?usp=sharing) ||
| Explanation | [Explanation Task Examples with GPT-3](https://colab.research.google.com/drive/1PlXIAMDtrK-RyVdDhiSZy6ztcDWsNPNw?usp=sharing) ||
| Tabular Data | | |
Expand Down
377 changes: 377 additions & 0 deletions examples/Relation_extraction.ipynb
Original file line number Diff line number Diff line change
@@ -0,0 +1,377 @@
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"provenance": []
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"language_info": {
"name": "python"
},
"gpuClass": "standard"
},
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"id": "4HhNZ9PRTgxM"
},
"outputs": [],
"source": [
"%%capture\n",
"!git clone https://github.com/promptslab/Promptify.git\n",
"!pip3 install openai\n",
"!pip3 install huggingface_hub"
]
},
{
"cell_type": "markdown",
"source": [
"<h2>Features 🚀</h2>\n",
"<ul>\n",
" <li>🧙‍♀️ NLP in 2 lines of code with no training data required</li>\n",
" <li>🔨 Easily add one shot, two shot, or few shot examples to the prompt</li>\n",
" <li>✌ Output always provided as a Python object (e.g. list, dictionary) for easy parsing and filtering</li>\n",
" <li>💥 Custom examples and samples can be easily added to the prompt</li>\n",
" <li>💰 Optimized prompts to reduce OpenAI token costs (coming soon)</li>\n",
"</ul>\n",
"\n",
"\n"
],
"metadata": {
"id": "k5vxlro8lAWu"
}
},
{
"cell_type": "markdown",
"source": [
"### Define any LLM model (such as GPT-3) ✅"
],
"metadata": {
"id": "oGti-CqqaoUw"
}
},
{
"cell_type": "code",
"source": [
"%cd /content/Promptify\n",
"\n",
"\n",
"import json\n",
"from promptify import OpenAI\n",
"from promptify import Prompter\n",
"from pprint import pprint\n",
"from IPython.display import Markdown, display\n",
"from IPython.core.display import display, HTML\n",
"\n",
"\n",
"# Define the API key for the OpenAI model\n",
"api_key = \"\"\n",
"\n",
"\n",
"# Create an instance of the OpenAI model, Currently supporting Openai's all model, In future adding more generative models from Hugginface and other platforms\n",
"model = OpenAI(api_key)\n",
"nlp_prompter = Prompter(model)\n",
"\n",
"\n",
"# Example sentence for demonstration\n",
"sentence = \"\"\"Posttransplant lymphoproliferative disorder, chronic renal insufficiency, \n",
" squamous cell carcinoma of the skin, anemia secondary to chronic renal \n",
" insufficiency and chemotherapy, and hypertension. The patient is here \n",
" for followup visit and chemotherapy.\"\"\"\n",
"\n",
"print(sentence)"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "Q1VTSg8XUATO",
"outputId": "1e50b831-fec4-4630-8b2d-40f32708aa8e"
},
"execution_count": 4,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"/content/Promptify\n",
"Posttransplant lymphoproliferative disorder, chronic renal insufficiency, \n",
" squamous cell carcinoma of the skin, anemia secondary to chronic renal \n",
" insufficiency and chemotherapy, and hypertension. The patient is here \n",
" for followup visit and chemotherapy.\n"
]
}
]
},
{
"cell_type": "markdown",
"source": [
"### 1: Relation extraction (zero-shot) 🚀\n",
"\n"
],
"metadata": {
"id": "NXwzgg9PbV0Z"
}
},
{
"cell_type": "code",
"source": [
"\n",
"result = nlp_prompter.fit('relation_extraction.jinja', \n",
" domain = 'clinical',\n",
" text_input = sentence)\n",
"\n",
"print(result['text'])\n",
"\n",
"# Output\n",
"\n",
"display(HTML('<h4>Sentence</h4>'))\n",
"print('\\n')\n",
"print(sentence)\n",
"print('\\n')\n",
"display(HTML('<h4>Output</h4>'))\n",
"print(\"\\n\")\n",
"pprint(eval(result['text']))"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 561
},
"id": "h9UW8wnZVhXe",
"outputId": "760540d5-5423-4d24-dc25-293e3d44b103"
},
"execution_count": 5,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
" [['Posttransplant lymphoproliferative disorder', 'has_diagnosis', 'patient'], \n",
" ['chronic renal insufficiency', 'has_diagnosis', 'patient'], \n",
" ['squamous cell carcinoma of the skin', 'has_diagnosis', 'patient'], \n",
" ['anemia secondary to chronic renal insufficiency and chemotherapy', 'has_diagnosis', 'patient'], \n",
" ['hypertension', 'has_diagnosis', 'patient'], \n",
" ['patient', 'is_here_for', 'followup visit'], \n",
" ['patient', 'is_here_for', 'chemotherapy']]\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<IPython.core.display.HTML object>"
],
"text/html": [
"<h4>Sentence</h4>"
]
},
"metadata": {}
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"\n",
"\n",
"Posttransplant lymphoproliferative disorder, chronic renal insufficiency, \n",
" squamous cell carcinoma of the skin, anemia secondary to chronic renal \n",
" insufficiency and chemotherapy, and hypertension. The patient is here \n",
" for followup visit and chemotherapy.\n",
"\n",
"\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<IPython.core.display.HTML object>"
],
"text/html": [
"<h4>Output</h4>"
]
},
"metadata": {}
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"\n",
"\n",
"[['Posttransplant lymphoproliferative disorder', 'has_diagnosis', 'patient'],\n",
" ['chronic renal insufficiency', 'has_diagnosis', 'patient'],\n",
" ['squamous cell carcinoma of the skin', 'has_diagnosis', 'patient'],\n",
" ['anemia secondary to chronic renal insufficiency and chemotherapy',\n",
" 'has_diagnosis',\n",
" 'patient'],\n",
" ['hypertension', 'has_diagnosis', 'patient'],\n",
" ['patient', 'is_here_for', 'followup visit'],\n",
" ['patient', 'is_here_for', 'chemotherapy']]\n"
]
}
]
},
{
"cell_type": "markdown",
"source": [
"## Load examples\n"
],
"metadata": {
"id": "O50DUQbFaZhY"
}
},
{
"cell_type": "code",
"source": [
"import json\n",
"\n",
"relation_examples = json.load(open(\"examples/data/relation_extraction.json\",'r'))\n",
"print(\"Got\", len(relation_examples), \"examples.\")\n",
"\n",
"prompt_examples = []\n",
"for sample in relation_examples:\n",
" prompt_examples.append((sample['text'], sample['labels']))\n",
"print()"
],
"metadata": {
"id": "1dJ1zN1DxXn-",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "ab1f8ca6-b169-4bc8-f85a-c8377bbd4f0b"
},
"execution_count": 7,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Got 2 examples.\n",
"\n"
]
}
]
},
{
"cell_type": "markdown",
"source": [
"### 2: Relation extraction with custom examples (one-shot, few-shot etc) 🚀\n",
"\n"
],
"metadata": {
"id": "DQiklr0ugcLJ"
}
},
{
"cell_type": "code",
"source": [
"\n",
"result = nlp_prompter.fit('relation_extraction.jinja', \n",
" domain = 'clinical',\n",
" examples = [prompt_examples[0]],\n",
" text_input = sentence)\n",
"# print(result)\n",
"print(result['text'])\n",
"\n",
"# Output\n",
"\n",
"display(HTML('<h4>Sentence</h4>'))\n",
"print('\\n')\n",
"print(sentence)\n",
"print('\\n')\n",
"display(HTML('<h4>Output</h4>'))\n",
"print(\"\\n\")\n",
"pprint(eval(result['text']))"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 456
},
"id": "EObz_MTSebBv",
"outputId": "4fec323f-4736-48f0-d972-b228d8e572e0"
},
"execution_count": 16,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
" [['Posttransplant lymphoproliferative disorder', 'is a', 'disease'], ['chronic renal insufficiency', 'is a', 'disease'], ['squamous cell carcinoma of the skin', 'is a', 'disease'], ['anemia secondary to chronic renal insufficiency and chemotherapy', 'is a', 'disease'], ['hypertension', 'is a', 'disease'], ['the patient', 'is here for', 'followup visit and chemotherapy']]\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<IPython.core.display.HTML object>"
],
"text/html": [
"<h4>Sentence</h4>"
]
},
"metadata": {}
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"\n",
"\n",
"Posttransplant lymphoproliferative disorder, chronic renal insufficiency, \n",
" squamous cell carcinoma of the skin, anemia secondary to chronic renal \n",
" insufficiency and chemotherapy, and hypertension. The patient is here \n",
" for followup visit and chemotherapy.\n",
"\n",
"\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<IPython.core.display.HTML object>"
],
"text/html": [
"<h4>Output</h4>"
]
},
"metadata": {}
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"\n",
"\n",
"[['Posttransplant lymphoproliferative disorder', 'is a', 'disease'],\n",
" ['chronic renal insufficiency', 'is a', 'disease'],\n",
" ['squamous cell carcinoma of the skin', 'is a', 'disease'],\n",
" ['anemia secondary to chronic renal insufficiency and chemotherapy',\n",
" 'is a',\n",
" 'disease'],\n",
" ['hypertension', 'is a', 'disease'],\n",
" ['the patient', 'is here for', 'followup visit and chemotherapy']]\n"
]
}
]
},
{
"cell_type": "code",
"source": [],
"metadata": {
"id": "6Hb-zzo6IWYy"
},
"execution_count": null,
"outputs": []
}
]
}

0 comments on commit 8d4844a

Please sign in to comment.