From 194ee0e48bcd2f0ec8f212acb66e0cb16397fd12 Mon Sep 17 00:00:00 2001
From: ahwar <20405797+Ahwar@users.noreply.github.com>
Date: Sun, 11 Dec 2022 13:00:15 +0500
Subject: [PATCH] docs: improved README.md
added more clear steps in README, removed extra cells in jupyter notebook
fixed one image was not showing on GitHub
simple description of project
described the process of running the project more clearly
removed extra cells from jupyter notebook
---
README.md | 39 +++++++----
convert Huggingface model to ONNX.ipynb | 83 +++++++-----------------
images/model-location.png | Bin 0 -> 31676 bytes
3 files changed, 47 insertions(+), 75 deletions(-)
create mode 100644 images/model-location.png
diff --git a/README.md b/README.md
index 3b219a1..5e3a545 100644
--- a/README.md
+++ b/README.md
@@ -1,36 +1,47 @@
-# Run HuggingFace NER (NLP) Model as Java using ONNX
+# Run HuggingFace NER (NLP) Model on Java using ONNX Runtime and DJL
+A NLP (Natural Language Processing) Java Application which detects `Names`, `organizaions`, and `locations` in a text by running Hugging face's [Roberta NER model](https://huggingface.co/xlm-roberta-large-finetuned-conll03-english) using [ONNX runtime](https://onnxruntime.ai/docs/get-started/with-java.html) and [Deep Java Library](https://djl.ai/)
-## Download files
+
+
+## Installation:
+Open Project folder in Java IDE (`Recommended: IntelliJ IDEA Community`) with gradle support and Build the project
+
+
+### Requirements:
+1. Java Development Kit JDK version: 11
+2. Gradle version 7+
+
+### Download files
These files are required to run the project
1. ONNX model
2. `tokenizer.json` file
-**Convert the model**
+### Convert the ONNX model
-To convert HuggingFace NER model to ONNX Open this [Google Colaboratory Notebook](https://colab.research.google.com/drive/1kZx9XOnExVfPoAGHhHRUrdQnioiLloBW#revisionId=0BwKss6yztf4KS0NKaWRiQjc0RGRvQkd6ZFp3OUFhR1lTclBNPQ) run the code as below shown image and follow all the steps
+To convert HuggingFace NER model to ONNX Open this [Google Colaboratory Notebook](https://colab.research.google.com/drive/1kZx9XOnExVfPoAGHhHRUrdQnioiLloBW#revisionId=0BwKss6yztf4KS0NKaWRiQjc0RGRvQkd6ZFp3OUFhR1lTclBNPQ) run the code as image shown below and follow all the steps
-
+
-(the code for above purpose is also saved in jupyter notebook in the file `convert Huggingface model to ONNX.ipynb`. you can run the code using [Jupyter notebook](https://jupyter.org/install))
+(the code for above purpose is also saved in jupyter notebook in the file `convert Huggingface model to ONNX.ipynb`. you can run the code using [Jupyter notebook](https://jupyter.org/install))
-Tokenzer file `tokenizer.json` was taken from this [huggingface repo](https://huggingface.co/xlm-roberta-large-finetuned-conll03-english)
-Download the `tokenizer.json` from the [link](https://huggingface.co/xlm-roberta-large-finetuned-conll03-english/raw/main/tokenizer.json) and save in `raw-files` directory
+after running the one of above codes your onnx model will be saved in `onnx/` folder.
+### Download tokenizer.json
+Tokenzer file `tokenizer.json` was taken from this [huggingface repo](https://huggingface.co/xlm-roberta-large-finetuned-conll03-english)
+Download the `tokenizer.json` from the [link](https://huggingface.co/xlm-roberta-large-finetuned-conll03-english/raw/main/tokenizer.json)
-## Installation:
-Open Project folder in Java IDE (`Recommended: IntelliJ IDE`) with gradle support and Build the project
+**move files**
+Copy files created from above two stesp into `raw-files` directory as shown in the below image
+
-### Requirements:
-1. Java Development Kit JDK version: 11
-2. Gradle version 7+
-### Building project
+## Building project
Build the project using This button

diff --git a/convert Huggingface model to ONNX.ipynb b/convert Huggingface model to ONNX.ipynb
index 0dad0f3..e533854 100644
--- a/convert Huggingface model to ONNX.ipynb
+++ b/convert Huggingface model to ONNX.ipynb
@@ -1,18 +1,4 @@
{
- "nbformat": 4,
- "nbformat_minor": 0,
- "metadata": {
- "colab": {
- "provenance": []
- },
- "kernelspec": {
- "name": "python3",
- "display_name": "Python 3"
- },
- "language_info": {
- "name": "python"
- }
- },
"cells": [
{
"cell_type": "markdown",
@@ -20,7 +6,7 @@
"id": "xJckl99IHePQ"
},
"source": [
- "## Hugging Face to ONNX\n"
+ "## Hugging Face Model to ONNX\n"
]
},
{
@@ -31,7 +17,7 @@
},
"outputs": [],
"source": [
- "!pip install -q transformers[onnx] transformers[sentencepiece] torch"
+ "%pip install -q transformers[onnx] transformers[sentencepiece] torch"
]
},
{
@@ -46,19 +32,10 @@
},
"outputs": [
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- "Framework not requested. Using torch to export to ONNX.\n",
- "Downloading: 100% 852/852 [00:00<00:00, 758kB/s]\n",
- "Downloading: 100% 2.24G/2.24G [00:57<00:00, 39.2MB/s]\n",
- "Downloading: 100% 5.07M/5.07M [00:00<00:00, 45.9MB/s]\n",
- "Downloading: 100% 9.10M/9.10M [00:00<00:00, 59.7MB/s]\n",
- "Using framework PyTorch: 1.12.1+cu113\n",
- "Overriding 1 configuration item(s)\n",
- "\t- use_cache -> False\n",
"Validating ONNX model...\n",
- "tcmalloc: large alloc 1073741824 bytes == 0xb3b2000 @ 0x7f47b38afb6b 0x7f47b38cf379 0x7f46ce7575fe 0x7f46cea041e4 0x7f46ce81397c 0x7f46ce813daa 0x7f46ce82b8f1 0x7f46ce82dea9 0x7f46ce38cf26 0x7f46ce358820 0x7f46cea382be 0x5d746e 0x5d813c 0x4ff515 0x49caa1 0x55e571 0x5d7cf1 0x49ca7c 0x55e571 0x5d7cf1 0x5d9487 0x586306 0x5d808f 0x560200 0x55e571 0x5d7cf1 0x49ec69 0x5d7c18 0x49ec69 0x55e571 0x55ef23\n",
"\t-[✓] ONNX model output names match reference model ({'logits'})\n",
"\t- Validating ONNX Model output \"logits\":\n",
"\t\t-[✓] (3, 9, 8) matches (3, 9, 8)\n",
@@ -72,43 +49,27 @@
" --feature=token-classification \\\n",
" --model=xlm-roberta-large-finetuned-conll03-english onnx/"
]
+ }
+ ],
+ "metadata": {
+ "colab": {
+ "provenance": []
},
- {
- "cell_type": "code",
- "source": [
- "!zip -r model.zip onnx"
- ],
- "metadata": {
- "id": "RrFoM3zndFZ0"
- },
- "execution_count": null,
- "outputs": []
+ "kernelspec": {
+ "display_name": "Python 3.8.0 64-bit",
+ "language": "python",
+ "name": "python3"
},
- {
- "cell_type": "markdown",
- "source": [
- "Now download the model file as shown in the below image \n",
- "\n",
- "
\n",
- "\n",
- "\n",
- ""
- ],
- "metadata": {
- "id": "q0atoqIldM6m"
- }
+ "language_info": {
+ "name": "python",
+ "version": "3.8.0"
},
- {
- "cell_type": "markdown",
- "source": [
- "and after extracting it copy onnx folder in to `raw-files` directory in the Java Project Home directory. \n",
- "
\n",
- "\n",
- ""
- ],
- "metadata": {
- "id": "TSVrlfjlka0F"
+ "vscode": {
+ "interpreter": {
+ "hash": "437c6a4c2ab8ad564298253974ee7794b68bcbeea462aed8eaaa05b6d7c57f73"
}
}
- ]
-}
\ No newline at end of file
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}
diff --git a/images/model-location.png b/images/model-location.png
new file mode 100644
index 0000000000000000000000000000000000000000..07e7e7e570df23a2dc53d8359826f54edce125c6
GIT binary patch
literal 31676
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
Ih4jAvFKZ)nkpKVy
literal 0
HcmV?d00001