{"id":14989959,"url":"https://github.com/kamalkraj/bert-ner-tf","last_synced_at":"2025-04-13T06:34:48.366Z","repository":{"id":35484095,"uuid":"215827280","full_name":"kamalkraj/BERT-NER-TF","owner":"kamalkraj","description":"Named Entity Recognition with BERT using TensorFlow 2.0","archived":false,"fork":false,"pushed_at":"2022-11-21T21:15:45.000Z","size":1216,"stargazers_count":212,"open_issues_count":11,"forks_count":71,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-03-24T10:42:29.710Z","etag":null,"topics":["bert","bert-ner","curl","inference","named-entity-recognition","postman","pretrained-models","tensorflow","tensorflow-2","tensorflow-2-example"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kamalkraj.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-10-17T15:34:29.000Z","updated_at":"2025-01-17T09:53:24.000Z","dependencies_parsed_at":"2023-01-15T22:01:17.408Z","dependency_job_id":null,"html_url":"https://github.com/kamalkraj/BERT-NER-TF","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kamalkraj%2FBERT-NER-TF","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kamalkraj%2FBERT-NER-TF/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kamalkraj%2FBERT-NER-TF/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kamalkraj%2FBERT-NER-TF/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kamalkraj","download_url":"https://codeload.github.com/kamalkraj/BERT-NER-TF/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248675027,"owners_count":21143761,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bert","bert-ner","curl","inference","named-entity-recognition","postman","pretrained-models","tensorflow","tensorflow-2","tensorflow-2-example"],"created_at":"2024-09-24T14:19:14.254Z","updated_at":"2025-04-13T06:34:48.340Z","avatar_url":"https://github.com/kamalkraj.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# BERT NER\n\nUse google BERT to do CoNLL-2003 NER !\n\nTrain model using Python and TensorFlow 2.0\n\n[ALBERT-TF2.0](https://github.com/kamalkraj/ALBERT-TF2.0)\n\n[BERT-SQuAD](https://github.com/kamalkraj/BERT-SQuAD)\n\n[BERT-NER-Pytorch](https://github.com/kamalkraj/BERT-NER)\n\n\n# Requirements\n\n- `python3`\n- `pip3 install -r requirements.txt`\n\n### Download Pretrained Models from Tensorflow offical models\n- [bert-base-cased](https://storage.googleapis.com/cloud-tpu-checkpoints/bert/tf_20/cased_L-12_H-768_A-12.tar.gz) unzip into `bert-base-cased`\n\n- [bert-large-cased](https://storage.googleapis.com/cloud-tpu-checkpoints/bert/tf_20/cased_L-24_H-1024_A-16.tar.gz) unzip into `bert-large-cased`\n\ncode for pre-trained bert from [tensorflow-offical-models](https://github.com/tensorflow/models/tree/master/official/nlp) \n\n# Run\n\n## Single GPU\n\n`python run_ner.py --data_dir=data/ --bert_model=bert-base-cased --output_dir=out_base --max_seq_length=128 --do_train --num_train_epochs 3 --do_eval --eval_on dev`\n\n## Multi GPU\n\n`python run_ner.py --data_dir=data/ --bert_model=bert-large-cased --output_dir=out_large --max_seq_length=128 --do_train --num_train_epochs 3 --multi_gpu --gpus 0,1,2,3 --do_eval --eval_on test`\n\n# Result\n\n## BERT-BASE\n\n### Validation Data\n```\n             precision    recall  f1-score   support\n\n        PER     0.9677    0.9756    0.9716      1842\n        LOC     0.9671    0.9592    0.9631      1837\n       MISC     0.8872    0.9132    0.9001       922\n        ORG     0.9191    0.9314    0.9252      1341\n\navg / total     0.9440    0.9509    0.9474      5942\n```\n### Test Data\n```\n             precision    recall  f1-score   support\n\n        ORG     0.8773    0.9037    0.8903      1661\n        PER     0.9646    0.9592    0.9619      1617\n       MISC     0.7691    0.8305    0.7986       702\n        LOC     0.9333    0.9305    0.9319      1668\n\navg / total     0.9053    0.9184    0.9117      5648\n```\n## Pretrained model download from [here](https://drive.google.com/file/d/1ZlQimY5xbkpS_1baO-ZtCZZef4MvG9__/view?usp=sharing)\n\n## BERT-LARGE\n\n### Validation Data\n```\n             precision    recall  f1-score   support\n\n        ORG     0.9290    0.9374    0.9332      1341\n       MISC     0.8967    0.9230    0.9097       922\n        PER     0.9713    0.9734    0.9723      1842\n        LOC     0.9748    0.9701    0.9724      1837\n\navg / total     0.9513    0.9564    0.9538      5942\n```\n### Test Data\n```\n             precision    recall  f1-score   support\n\n        LOC     0.9256    0.9329    0.9292      1668\n       MISC     0.7891    0.8419    0.8146       702\n        PER     0.9647    0.9623    0.9635      1617\n        ORG     0.8903    0.9133    0.9016      1661\n\navg / total     0.9094    0.9242    0.9167      5648\n```\n## Pretrained model download from [here](https://drive.google.com/file/d/1BZCKj_e_SXxlvg4rKUC0EI4BJXYssTVL/view?usp=sharing)\n\n# Inference\n\n```python\nfrom bert import Ner\n\nmodel = Ner(\"out_base/\")\n\noutput = model.predict(\"Steve went to Paris\")\n\nprint(output)\n'''\n    [\n        {\n            \"confidence\": 0.9981840252876282,\n            \"tag\": \"B-PER\",\n            \"word\": \"Steve\"\n        },\n        {\n            \"confidence\": 0.9998939037322998,\n            \"tag\": \"O\",\n            \"word\": \"went\"\n        },\n        {\n            \"confidence\": 0.999891996383667,\n            \"tag\": \"O\",\n            \"word\": \"to\"\n        },\n        {\n            \"confidence\": 0.9991968274116516,\n            \"tag\": \"B-LOC\",\n            \"word\": \"Paris\"\n        }\n    ]\n'''\n```\n\n# Deploy REST-API\nBERT NER model deployed as rest api\n```bash\npython api.py\n```\nAPI will be live at `0.0.0.0:8000` endpoint `predict`\n#### cURL request\n` curl -X POST http://0.0.0.0:8000/predict -H 'Content-Type: application/json' -d '{ \"text\": \"Steve went to Paris\" }'`\n\nOutput\n```json\n{\n    \"result\": [\n        {\n            \"confidence\": 0.9981840252876282,\n            \"tag\": \"B-PER\",\n            \"word\": \"Steve\"\n        },\n        {\n            \"confidence\": 0.9998939037322998,\n            \"tag\": \"O\",\n            \"word\": \"went\"\n        },\n        {\n            \"confidence\": 0.999891996383667,\n            \"tag\": \"O\",\n            \"word\": \"to\"\n        },\n        {\n            \"confidence\": 0.9991968274116516,\n            \"tag\": \"B-LOC\",\n            \"word\": \"Paris\"\n        }\n    ]\n}\n```\n#### cURL \n![curl output image](/img/curl.png)\n#### Postman\n![postman output image](/img/postman.png)\n\n\n### Pytorch version\n\n- https://github.com/kamalkraj/BERT-NER\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkamalkraj%2Fbert-ner-tf","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkamalkraj%2Fbert-ner-tf","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkamalkraj%2Fbert-ner-tf/lists"}