{"id":13715354,"url":"https://github.com/kamalkraj/BERT-NER","last_synced_at":"2025-05-07T04:30:44.355Z","repository":{"id":39352177,"uuid":"172325096","full_name":"kamalkraj/BERT-NER","owner":"kamalkraj","description":"Pytorch-Named-Entity-Recognition-with-BERT","archived":false,"fork":false,"pushed_at":"2021-05-06T19:38:36.000Z","size":1712,"stargazers_count":1234,"open_issues_count":33,"forks_count":277,"subscribers_count":23,"default_branch":"dev","last_synced_at":"2025-04-12T10:59:41.839Z","etag":null,"topics":["bert","bert-ner","conll-2003","cpp11","curl","inference","named-entity-recognition","postman","pretrained-models","pytorch"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.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.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-02-24T10:40:46.000Z","updated_at":"2025-04-09T16:23:14.000Z","dependencies_parsed_at":"2022-07-04T07:18:17.497Z","dependency_job_id":null,"html_url":"https://github.com/kamalkraj/BERT-NER","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","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kamalkraj%2FBERT-NER/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kamalkraj%2FBERT-NER/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kamalkraj%2FBERT-NER/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kamalkraj","download_url":"https://codeload.github.com/kamalkraj/BERT-NER/tar.gz/refs/heads/dev","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252813643,"owners_count":21808362,"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","conll-2003","cpp11","curl","inference","named-entity-recognition","postman","pretrained-models","pytorch"],"created_at":"2024-08-03T00:00:57.967Z","updated_at":"2025-05-07T04:30:43.117Z","avatar_url":"https://github.com/kamalkraj.png","language":"Python","funding_links":[],"categories":["Pytorch \u0026 related libraries｜Pytorch \u0026 相关库","Pytorch \u0026 related libraries","Python","NLP\u0026PyTorch实战"],"sub_categories":["NLP \u0026 Speech Processing｜自然语言处理 \u0026 语音处理:","NLP \u0026 Speech Processing:"],"readme":"# BERT NER\n\nUse google BERT to do CoNLL-2003 NER !\n\n![new](https://i.imgur.com/OB4Ugp4.png) Train model using Python and Inference using C++\n\n[ALBERT-TF2.0](https://github.com/kamalkraj/ALBERT-TF2.0)\n\n[BERT-NER-TENSORFLOW-2.0](https://github.com/kamalkraj/BERT-NER-TF)\n\n[BERT-SQuAD](https://github.com/kamalkraj/BERT-SQuAD)\n\n\n# Requirements\n\n-  `python3`\n- `pip3 install -r requirements.txt`\n\n# Run\n\n`python run_ner.py --data_dir=data/ --bert_model=bert-base-cased --task_name=ner --output_dir=out_base --max_seq_length=128 --do_train --num_train_epochs 5 --do_eval --warmup_proportion=0.1`\n\n\n# Result\n\n## BERT-BASE\n\n### Validation Data\n```\n             precision    recall  f1-score   support\n\n        PER     0.9677    0.9745    0.9711      1842\n        LOC     0.9654    0.9711    0.9682      1837\n       MISC     0.8851    0.9111    0.8979       922\n        ORG     0.9299    0.9292    0.9295      1341\n\navg / total     0.9456    0.9534    0.9495      5942\n```\n### Test Data\n```\n             precision    recall  f1-score   support\n\n        PER     0.9635    0.9629    0.9632      1617\n        ORG     0.8883    0.9097    0.8989      1661\n        LOC     0.9272    0.9317    0.9294      1668\n       MISC     0.7689    0.8248    0.7959       702\n\navg / total     0.9065    0.9209    0.9135      5648\n```\n## Pretrained model download from [here](https://1drv.ms/u/s!Auc3VRul9wo5hghurzE47bTRyUeR?e=08seO3)\n\n## BERT-LARGE\n\n### Validation Data\n```\n             precision    recall  f1-score   support\n\n        ORG     0.9288    0.9441    0.9364      1341\n        LOC     0.9754    0.9728    0.9741      1837\n       MISC     0.8976    0.9219    0.9096       922\n        PER     0.9762    0.9799    0.9781      1842\n\navg / total     0.9531    0.9606    0.9568      5942\n```\n### Test Data\n```\n             precision    recall  f1-score   support\n\n        LOC     0.9366    0.9293    0.9329      1668\n        ORG     0.8881    0.9175    0.9026      1661\n        PER     0.9695    0.9623    0.9659      1617\n       MISC     0.7787    0.8319    0.8044       702\n\navg / total     0.9121    0.9232    0.9174      5648\n```\n## Pretrained model download from [here](https://1drv.ms/u/s!Auc3VRul9wo5hgr8jwhFD8iPCYp1?e=UsJJ2V)\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# Inference C++\n\n## Pretrained and converted bert-base model download from [here](https://1drv.ms/u/s!Auc3VRul9wo5hgkJjtxZ8FAQGuj2?e=wffJCT)\n### Download libtorch from [here](https://download.pytorch.org/libtorch/cpu/libtorch-shared-with-deps-1.2.0.zip)\n\n- install `cmake`, tested with `cmake` version `3.10.2`\n- unzip downloaded model and `libtorch` in `BERT-NER`\n- Compile C++ App\n  ```bash\n    cd cpp-app/\n    cmake -DCMAKE_PREFIX_PATH=../libtorch\n   ```\n    ![cmake output image](/img/cmake.png)\n    ```bash\n    make\n    ```\n    ![make output image](/img/make.png)\n\n\n- Runing APP\n  ```bash\n     ./app ../base\n  ```\n     ![inference output image](/img/inference.png)\n\nNB: Bert-Base C++ model is split in to two parts.\n  - Bert Feature extractor and NER classifier.\n  - This is done because `jit trace` don't support `input` depended `for` loop or `if` conditions inside `forword` function of `model`.\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### C++ unicode support \n- http://github.com/ufal/unilib\n\n### Tensorflow version\n\n- https://github.com/kyzhouhzau/BERT-NER\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkamalkraj%2FBERT-NER","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkamalkraj%2FBERT-NER","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkamalkraj%2FBERT-NER/lists"}