{"id":12492,"date":"2023-08-29T16:09:13","date_gmt":"2023-08-29T14:09:13","guid":{"rendered":"https:\/\/flaven.fr\/?p=12492"},"modified":"2026-09-16T10:09:22","modified_gmt":"2026-09-16T08:09:22","slug":"the-importance-of-the-labeling-process-or-annotating-inside-an-ml-pipeline-plus-an-example-with-ner-made-for-spacy","status":"publish","type":"post","link":"https:\/\/flaven.fr\/2023\/08\/the-importance-of-the-labeling-process-or-annotating-inside-an-ml-pipeline-plus-an-example-with-ner-made-for-spacy\/","title":{"rendered":"The importance of the Labeling process or annotating inside an ML pipeline plus an example on how-to train a &#8220;custom&#8221; NER for Spacy"},"content":{"rendered":"<p>With AI\/ML, I&#8217;m trying to go from &#8220;user&#8221; status to &#8220;maker&#8221; status. At the very beginning, like often, I am more focused on uses and few attempts posted in this blog testified of this strong interest on how-to.<\/p>\n<ul>\n<li>Improve a CMS\u2019s photos library qualification with AI, Object Detection from images in Python with OpenCv and YOLO<br \/><a href=\"https:\/\/flaven.fr\/2021\/03\/improve-a-cmss-photos-library-qualification-with-ai-object-detection-from-images-in-python-with-opencv-and-yolo\/\" target=\"_blank\" rel=\"noopener\">https:\/\/flaven.fr\/2021\/03\/improve-a-cmss-photos-library-qualification-with-ai-object-detection-from-images-in-python-with-opencv-and-yolo\/<\/a><\/li>\n<li>Quick overview about using NLP for a CMS Customer Support (FAQs turn to a Chatbot) or CMS editorial features for Journalist (Keywords Extraction) using spaCy, Rake, TensorFlow, Pytorch<br \/><a href=\"https:\/\/flaven.fr\/2020\/09\/quick-overview-about-using-nlp-for-a-cms-customer-support-faqs-turn-to-a-chatbot-or-cms-editorial-features-for-journalist-keywords-extraction-using-spacy-rake-tensorflow-pytorch\/\" target=\"_blank\" rel=\"noopener\">https:\/\/flaven.fr\/2020\/09\/quick-overview-about-using-nlp-for-a-cms-customer-support-faqs-turn-to-a-chatbot-or-cms-editorial-features-for-journalist-keywords-extraction-using-spacy-rake-tensorflow-pytorch\/<\/a><\/li>\n<\/ul>\n<p><b>For this post, you can find all files for each project on my GitHub account. See <a href=\"https:\/\/github.com\/bflaven\/ia_usages\/tree\/main\/ml_label_studio\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/github.com\/bflaven\/ia_usages\/tree\/main\/ml_label_studio<\/a><\/b><br \/>\nBut what if I want to go further than the simple use? Like in any learning process, to become a &#8220;doer&#8221; requires an essential step: <b>selecting tools.<\/b><\/p>\n<p><b>This action often allows both to deepen understanding and practicing. At the same time, you should not hesitate to throw away a technology or a tool if it proves to be too time-consuming for a poor result!<\/b><\/p>\n<p>I have focus my attention on a very basic question: How to build a custom NER with the help of Spacy? This question leads me to a bigger one: In NLP, how to build a machine learning pipeline with Label Studio or Docanno (open source), instead of Prodigy (paid)?<\/p>\n<p>Choosing the right tool answered to the thorny question of ensuring data quality and might give some accuracy to your model! Otherwise, you may fall in &#8220;Shit in, Shit out&#8221; curse. <\/p>\n<p> Like always, to ensure quality and accuracy, you must get down to the nitty-gritty. So, if you can, you must look under the hood and get our hands dirty with code.<\/p>\n<p><b>The importance of the Labeling process or annotating inside the ML pipeline.<\/b><br \/>\n<img loading=\"lazy\" decoding=\"async\" width=\"850\" height=\"304\" src=\"https:\/\/flaven.fr\/wp-content\/uploads\/2023\/08\/A-common-pipeline-for-annotating-data-and-building-models-with-machine-learning.png\"><\/p>\n<p>Source: <a href=\"https:\/\/www.researchgate.net\/figure\/A-common-pipeline-for-annotating-data-and-building-models-with-machine-learning_fig1_359227212\" target=\"_blank\" rel=\"noopener\">https:\/\/www.researchgate.net\/figure\/A-common-pipeline-for-annotating-data-and-building-models-with-machine-learning_fig1_359227212<\/a><\/p>\n<p>So, for the sake of simplicity, the labeling process can be even cut into 6 steps<\/p>\n<ul>\n<li>step_1. Unlabeled data<\/li>\n<li>step_2. Labeler (loop)<\/li>\n<li>step_3. Labeled data<\/li>\n<li>step_4. Training (loop)<\/li>\n<li>step_5. Model<\/li>\n<li>step_6. Inference<\/li>\n<\/ul>\n<p><b>&#8220;Simplest&#8221; Labeling Process with 6 Steps<\/b><br \/>\n<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"316\" src=\"https:\/\/flaven.fr\/wp-content\/uploads\/2023\/08\/labeling_process_small.png\"><\/p>\n<p><b>Here is a quick terminology to grasp roughly the essential of the Labeling process.<\/b><\/p>\n<ul>\n<li>\nData: interesting stuff to annotate &#8211; image, audio, video, text.<\/li>\n<li>Task: Single piece of data that is ready to be predicted or annotated ; Part of job ; Includes metadata relevant for predicting or annotating.<\/li>\n<li>Prediction: Inference output from a machine learning model<\/li>\n<li>Annotation: Human created or&#8230; approved<\/li>\n<\/ul>\n<p>Source: <a href=\"https:\/\/www.youtube.com\/watch?v=VBnhpMLpBB0\" target=\"_blank\" rel=\"noopener\">https:\/\/www.youtube.com\/watch?v=VBnhpMLpBB0<\/a><\/p>\n<p>Like as I said before discovering the labelling process, my original question was to create a specific NER with the help of Spacy.<\/p>\n<p>Indeed, the ability to recognize name entities is paramount but most of the time you may need a specific NER because you are working with domain specific data e.g. Finance, Medicine, Cooking, History, Biology, African Football, Law, Cinema, Television, Transport&#8230; Anyway, there are many domains where you have to deal with specific words that which sounds like gibberish to laymen!<\/p>\n<h1>Methodology<\/h1>\n<p>I have to talk a little bit about methodology. First of all, use cases have always help me to enliven my learning process. So, I sure look after explanations but also select use cases, mostly quick and reproducible. Even if, use cases must be counterbalanced by the consciousness that mere imitation is not sufficient to fully understand AI\/ML! Reproducing a tutorial will never turn you into a specialist. Thanks God, become a specialist is not my objective. As much as possible, I try to isolate real process like the labeling one to master IA cases and minimizing uncertainty when working on Projects in Real Life.<\/p>\n<h2>The Custom NER example<\/h2>\n<p>In the field of NLP, create a &#8220;custom NER&#8221; is a classic example. This is most often favored example. Indeed, it is the most intuitive process with the most striking results, a bit like writing your first test under Cypress on you website homepage, creating a blog in 20 min on RoR or finally building your WP plugin in 5 minutes.<\/p>\n<p>For any POC to have value, meaning instructive and profitable, two things are needed:<\/p>\n<ol>\n<li>Set goals (OKR in particular)<\/li>\n<li>Set a time limit (Deadline) otherwise from POC you go to WIP which is as toxic as procrastination. In general, in duration, I try not to exceed a month and a half.<\/li>\n<\/ol>\n<h2>Always define objectives<\/h2>\n<p>So, here is a list of my objectives in term of learning value:<\/p>\n<ol>\n<li>Create a custom NER for Spacy for specific vocabulary or specific language (African languages or poor documented languages e.g Hmong). This exploration leads to lead to discover NLP useful formats such as JSON, JSON-MIN, CONLL2003 to facilitate workflow.\n<\/li>\n<li>Discover a viable workflow on how-to customise a NER inside Spacy and find a free alternative to the tool https:\/\/prodi.gy\/. This exploration leads to lead to annotation tool<\/li>\n<li>Eventually extend the annotation tool for other type of media e.g video, audio, images&#8230; This exploration leads to generate a customized ML model for YOLO image detection for instance. This case will be probably a topic for a next post.<\/li>\n<\/ol>\n<h2>Remember few LEAN AGILE principles and make some mix<\/h2>\n<p><b>Just as quick reminder, as I have read earlier some elements on Lean. I found interesting to mix also this investigation on my labeling process exploration with some rules from Lean methodology. All these principles are so many reminders when you get lost in explanations or in useless code creation.<\/b><\/p>\n<ul>\n<li>Go on site to see the problem: Go&#038;See or &#8220;Go to the Gemba&#8221;<\/li>\n<p>Gemba is the equivalent of the crime scene in Japanese.<b>Remain on the ground where you create and produce value. In business, Genba refers to the place where value is created;<\/b>Source: https:\/\/en.wikipedia.org\/wiki\/Gemba<\/p>\n<li>The Plan-Do-Check-Act (PDCA) cycle<\/li>\n<p>The Plan-Do-Check-Act avoids investing on false leads. Lean favors countermeasures that are ingenious, economical and whose effect can be verified quickly. I can resist to quote these &#8220;waste hole&#8221; examples as I definitely fell once in while in one of those traps.<\/p>\n<p><i>Type of waste: the 7 examples of waste<\/i><\/p>\n<ol>\n<li>Overproduction: Write code that is never used. Create a User Story sooner than necessary.\n<\/li>\n<li>Corrections &#038; retouching: Investigation and correction of a defect; Refactoring exactly opposite to that done by another pair.\n<\/li>\n<li>Waiting: Waiting for the availability of the test environment. Waiting for build result; Workstation slowness; Waiting for functional information or decision while performing a task.<\/li>\n<li>Inventory: Maintenance of a backlog of undeveloped User Stories; Regularly review the post-its on an &#8220;Ideas for improvement&#8221; poster without ever implementing these ideas.<\/li>\n<li>Useless gestures: Code navigation; Restarting the development environment (IDE).<\/li>\n<li>Unnecessary steps: Two pairs performing overlapping tasks.\n<\/li>\n<li>Transportation: Carry over changes between different branches within a configuration management system; Passing information from one developer to another.\n<\/li>\n<\/ol>\n<\/ul>\n<p>So, the purpose is either to flesh out and make alive a real procedure, process or pipeline for annotating data and building models with machine learning for any kind of content.<\/p>\n<p>In most of the case, I have replaced Prodigy by Label Studio or even Doccano. I would rather go for Label Studio as it is compatible with DAGSHub.  Label Studio gave a great documentation and many examples for any kind of annotation process including sounds, images, videos&#8230;.<\/p>\n<h2>Set the environments with anaconda<\/h2>\n<pre>\r\n# list the envs\r\nconda info --envs\r\n\r\n# ml_with_label_studio\r\nsource activate ml_with_label_studio\r\npip freeze > requirements_ml_with_label_studio.txt\r\nconda deactivate\r\n\r\n# tagging_entity_extraction\r\nsource activate tagging_entity_extraction\r\npip freeze > requirements_tagging_entity_extraction.txt\r\nconda deactivate\r\n\r\n\r\n# Create a anaconda environment named tagging_entity_extraction\r\nconda create --name tagging_entity_extraction python=3.9.13\r\nconda info --envs\r\nsource activate tagging_entity_extraction\r\nconda deactivate\r\n\r\n# if needed to remove an environment\r\nconda env remove -n [NAME_OF_THE_CONDA_ENVIRONMENT]\r\nconda env remove -n chainlit_python\r\nconda env remove -n ai_chatgpt_prompts\r\n\r\n# update conda \r\nconda update -n base -c defaults conda\r\n\r\n# to export requirements\r\npip freeze > requirements_ml_with_label_studio.txt\r\npip freeze > requirements_tagging_entity_extraction.txt\r\n\r\n# to install\r\npip install -r requirements_ml_with_label_studio.txt\r\npip install -r requirements_tagging_entity_extraction.txt\r\n\r\n<\/pre>\n<h2>Use cases<\/h2>\n<p>Some explanations can be found in the readme on <a href=\"https:\/\/github.com\/bflaven\/BlogArticlesExamples\/tree\/master\/ml_label_studio\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/github.com\/bflaven\/BlogArticlesExamples\/tree\/master\/ml_label_studio<\/a><\/p>\n<h2>Videos to tackle this post<\/h2>\n<p>#1 Machine Learning for NLP: Labeling process to train a &#8220;custom&#8221; NER for Spacy with Label Studio<br \/>\n<iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/5QwPKZFZZW0\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe><\/p>\n<p>#2 Machine Learning for NLP: Export &#038; convert data from Label Studio to Spacy training format to create a custom NER<br \/>\n<iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/RO33OEkeOTg\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe><\/p>\n<p>#3 Machine Learning for NLP: Work with a dataset in Label Studio for a Pytorch Sentiment Analysis<br \/>\n<iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/NVVbfVHgS_I\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe><\/p>\n<p>#4 Machine Learning for NLP: Running &#038; Connecting a ML Backend to Label Studio for a Pytorch Sentiment Analysis<br \/>\n<iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/d1VR4UiMFDE\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe><\/p>\n<p><H2>More infos<\/H2><\/p>\n<ul>\n<li>Text Annotations using Label Studio and DAGSHub &#8211; (NLP &#8211; NER)<br \/><a href=\"https:\/\/www.youtube.com\/watch?v=CxfGJGK4mxQ\" target=\"_blank\" rel=\"noopener\">https:\/\/www.youtube.com\/watch?v=CxfGJGK4mxQ<\/a><\/li>\n<li>TinySquirrelDataset<br \/><a href=\"https:\/\/dagshub.com\/DagsHub\/TinySquirrelDataset\" target=\"_blank\" rel=\"noopener\">https:\/\/dagshub.com\/DagsHub\/TinySquirrelDataset<\/a><\/li>\n<li>RelaxML<br \/><a href=\"https:\/\/dagshub.com\/yonomitt\/RelaxML\" target=\"_blank\" rel=\"noopener\">https:\/\/dagshub.com\/yonomitt\/RelaxML<\/a><\/li>\n<li>jcharistech<br \/><a href=\"https:\/\/dagshub.com\/jcharistech\" target=\"_blank\" rel=\"noopener\">https:\/\/dagshub.com\/jcharistech<\/a><\/li>\n<li>spacy-ner<br \/><a href=\"https:\/\/github.com\/kriesbeck\/spacy-ner\/blob\/master\/NER%20in%20spaCy.ipynb\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/kriesbeck\/spacy-ner\/blob\/master\/NER%20in%20spaCy.ipynb<\/a><\/li>\n<li>Quickstart from spacy<br \/><a href=\"https:\/\/spacy.io\/usage\/training#quickstart\" target=\"_blank\" rel=\"noopener\">https:\/\/spacy.io\/usage\/training#quickstart<\/a><\/li>\n<li>Using spaCy as a ML backend for Label Studio<br \/><a href=\"https:\/\/www.youtube.com\/watch?v=F19NT-21uT4\" target=\"_blank\" rel=\"noopener\">https:\/\/www.youtube.com\/watch?v=F19NT-21uT4<\/a><\/li>\n<li>Zero to One: Getting Started with Label Studio<br \/><a href=\"https:\/\/labelstud.io\/blog\/zero-to-one-getting-started-with-label-studio\/\" target=\"_blank\" rel=\"noopener\">https:\/\/labelstud.io\/blog\/zero-to-one-getting-started-with-label-studio\/<\/a><\/li>\n<li>datasets from Label Studio<br \/><a href=\"https:\/\/s3.amazonaws.com\/labelstud.io\/datasets\/IMDB_train_unlabeled_100.csv\" target=\"_blank\" rel=\"noopener\">https:\/\/s3.amazonaws.com\/labelstud.io\/datasets\/IMDB_train_unlabeled_100.csv<\/a><\/li>\n<li>Introduction to Machine Learning with Label Studio<br \/><a href=\"https:\/\/labelstud.io\/blog\/introduction-to-machine-learning-with-label-studio\/\" target=\"_blank\" rel=\"noopener\">https:\/\/labelstud.io\/blog\/introduction-to-machine-learning-with-label-studio\/<\/a><\/li>\n<li>label-studio-ml-tutorial<br \/><a href=\"https:\/\/github.com\/heartexlabs\/label-studio-ml-tutorial.git\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/heartexlabs\/label-studio-ml-tutorial.git<\/a><\/li>\n<li>Max Tkachenko Youtube Channel<br \/><a href=\"https:\/\/www.youtube.com\/@makseqtka4\" target=\"_blank\" rel=\"noopener\">https:\/\/www.youtube.com\/@makseqtka4<\/a><\/li>\n<li>What is the Label Studio ML backend?<br \/><a href=\"https:\/\/github.com\/heartexlabs\/label-studio-ml-backend\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/heartexlabs\/label-studio-ml-backend<\/a><\/li>\n<li>Integrate Label Studio into your machine learning pipeline<br \/><a href=\"https:\/\/labelstud.io\/guide\/ml#Start-your-custom-ML-backend-with-Label-Studio\" target=\"_blank\" rel=\"noopener\">https:\/\/labelstud.io\/guide\/ml#Start-your-custom-ML-backend-with-Label-Studio<\/a><\/li>\n<li>Create the simplest Machine Learning backend<br \/><a href=\"https:\/\/labelstud.io\/tutorials\/dummy_model.html\" target=\"_blank\" rel=\"noopener\">https:\/\/labelstud.io\/tutorials\/dummy_model.html<\/a><\/li>\n<li>PRODIGY v1.12: OpenAI integration, Prompt Engineering, Task Routers, Deployment Docs and more!<br \/><a href=\"https:\/\/www.youtube.com\/watch?v=-JiwLH9RG1E\" target=\"_blank\" rel=\"noopener\">https:\/\/www.youtube.com\/watch?v=-JiwLH9RG1E<\/a><\/li>\n<li>Graph Rewriting for NLP<br \/><a href=\"https:\/\/grew.fr\/\" target=\"_blank\" rel=\"noopener\">https:\/\/grew.fr\/<\/a><\/li>\n<li>Dependency parsing<br \/><a href=\"https:\/\/grew.fr\/grs\/parsing\/\" target=\"_blank\" rel=\"noopener\">https:\/\/grew.fr\/grs\/parsing\/<\/a><\/li>\n<li>NER @ CLI: Custom-named entity recognition with spaCy in four lines<br \/><a href=\"https:\/\/www.codecentric.de\/wissens-hub\/blog\/ner-cli-custom-named-entity-recognition-with-spacy-in-four-lines\" target=\"_blank\" rel=\"noopener\">https:\/\/www.codecentric.de\/wissens-hub\/blog\/ner-cli-custom-named-entity-recognition-with-spacy-in-four-lines<\/a><\/li>\n<li>Spark NLP -Training<br \/><a href=\"https:\/\/sparknlp.org\/docs\/en\/training\" target=\"_blank\" rel=\"noopener\">https:\/\/sparknlp.org\/docs\/en\/training<\/a><\/li>\n<li>CoNLL-U Viewer<br \/><a href=\"https:\/\/universaldependencies.org\/conllu_viewer.html\" target=\"_blank\" rel=\"noopener\">https:\/\/universaldependencies.org\/conllu_viewer.html<\/a><\/li>\n<li>pyconll is a low level wrapper around the CoNLL-U format<br \/><a href=\"https:\/\/pyconll.readthedocs.io\/en\/stable\/starting.html\" target=\"_blank\" rel=\"noopener\">https:\/\/pyconll.readthedocs.io\/en\/stable\/starting.html<\/a><\/li>\n<li>CoNLL-U Parser<br \/><a href=\"https:\/\/github.com\/EmilStenstrom\/conllu\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/EmilStenstrom\/conllu<\/a><\/li>\n<li>What is CoNLL data format?<br \/><a href=\"https:\/\/stackoverflow.com\/questions\/27416164\/what-is-conll-data-format\" target=\"_blank\" rel=\"noopener\">https:\/\/stackoverflow.com\/questions\/27416164\/what-is-conll-data-format<\/a><\/li>\n<li>CoNLL-U File Viewer<br \/><a href=\"https:\/\/www.sdbtools.net\/info\/prj\/conllu\/\" target=\"_blank\" rel=\"noopener\">https:\/\/www.sdbtools.net\/info\/prj\/conllu\/<\/a><\/li>\n<li>spacy-conll 3.4.0<br \/><a href=\"https:\/\/pypi.org\/project\/spacy-conll\/\" target=\"_blank\" rel=\"noopener\">https:\/\/pypi.org\/project\/spacy-conll\/<\/a><\/li>\n<li>Applied Language Technology<br \/><a href=\"https:\/\/www.youtube.com\/@AppliedLanguageTechnology\" target=\"_blank\" rel=\"noopener\">https:\/\/www.youtube.com\/@AppliedLanguageTechnology<\/a><\/li>\n<li>Parsing CoNLL-U annotations using Python<br \/><a href=\"https:\/\/www.youtube.com\/watch?v=lvJRFMvWtFI\" target=\"_blank\" rel=\"noopener\">https:\/\/www.youtube.com\/watch?v=lvJRFMvWtFI<\/a><\/li>\n<li>Introducing the CoNLL-U annotation schema<br \/><a href=\"https:\/\/applied-language-technology.mooc.fi\/html\/notebooks\/part_iii\/06_text_linguistics.html#introducing-the-conll-u-annotation-schema\" target=\"_blank\" rel=\"noopener\">https:\/\/applied-language-technology.mooc.fi\/html\/notebooks\/part_iii\/06_text_linguistics.html#introducing-the-conll-u-annotation-schema<\/a><\/li>\n<li>Hmong Medical Corpus Blog: Discussing NLP approaches for resource-poor languages<br \/><a href=\"https:\/\/hmcorpus.home.blog\/\" target=\"_blank\" rel=\"noopener\">https:\/\/hmcorpus.home.blog\/<\/a><\/li>\n<li>nathanmwhite<br \/><a href=\"https:\/\/github.com\/nathanmwhite?tab=repositories\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/nathanmwhite?tab=repositories<\/a><\/li>\n<li>Languages list<br \/><a href=\"https:\/\/universaldependencies.org\/#language-\" target=\"_blank\" rel=\"noopener\">https:\/\/universaldependencies.org\/#language-<\/a><\/li>\n<li>Many tree-banks for African languages: Bambara, Yoruba, Wolof, Amharic, Swahili&#8230;.<br \/>\n<br \/><a href=\"https:\/\/github.com\/UniversalDependencies\/\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/UniversalDependencies\/<\/a><\/li>\n<li>CoNLL-U Parser<br \/><a href=\"https:\/\/pypi.org\/project\/conllu\/\" target=\"_blank\" rel=\"noopener\">https:\/\/pypi.org\/project\/conllu\/<\/a><\/li>\n<li>spacy &#8211; Projects<br \/><a href=\"https:\/\/spacy.io\/usage\/projects\" target=\"_blank\" rel=\"noopener\">https:\/\/spacy.io\/usage\/projects<\/a><\/li>\n<li>&#x1fa90; spaCy Project: Part-of-speech Tagging &#038; Dependency Parsing (Universal Dependencies)<br \/><a href=\"https:\/\/github.com\/explosion\/projects\/tree\/v3\/pipelines\/tagger_parser_ud\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/explosion\/projects\/tree\/v3\/pipelines\/tagger_parser_ud<\/a><\/li>\n<li>spaCy lookups data<br \/><a href=\"https:\/\/github.com\/explosion\/spacy-lookups-data\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/explosion\/spacy-lookups-data<\/a><\/li>\n<li>&#x1fa90; Project Templates<br \/><a href=\"https:\/\/github.com\/explosion\/projects\/tree\/v3\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/explosion\/projects\/tree\/v3<\/a><\/li>\n<li>spacy &#8211; blog<br \/><a href=\"https:\/\/explosion.ai\/blog\" target=\"_blank\" rel=\"noopener\">https:\/\/explosion.ai\/blog<\/a><\/li>\n<li>spacy &#8211; &#x1fa90; Project Templates<br \/>\n<br \/><a href=\"https:\/\/github.com\/explosion\/projects\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/explosion\/projects<\/a><\/li>\n<li>SpaCy for Digital Humanities with Python Tutorials. This playlist is a tutorial series on how to use spaCy in Python for the purposes of performing natural language processing (NLP) on texts.<br \/><a href=\"https:\/\/www.youtube.com\/playlist?list=PL2VXyKi-KpYvuOdPwXR-FZfmZ0hjoNSUo\" target=\"_blank\" rel=\"noopener\">https:\/\/www.youtube.com\/playlist?list=PL2VXyKi-KpYvuOdPwXR-FZfmZ0hjoNSUo<\/a><\/li>\n<li>William Mattingly on github<br \/><a href=\"https:\/\/github.com\/wjbmattingly\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/wjbmattingly<\/a><\/li>\n<li>spacy-models<br \/><a href=\"https:\/\/github.com\/topics\/spacy-models\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/topics\/spacy-models<\/a><\/li>\n<li>HuSpaCy is a spaCy library providing industrial-strength Hungarian language processing facilities through spaCy models<br \/><a href=\"https:\/\/github.com\/huspacy\/huspacy\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/huspacy\/huspacy<\/a><\/li>\n<li>Chinese models for SpaCy<br \/><a href=\"https:\/\/github.com\/howl-anderson\/Chinese_models_for_SpaCy\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/howl-anderson\/Chinese_models_for_SpaCy<\/a><\/li>\n<li>Experimental Finnish language model for spaCy<br \/><a href=\"https:\/\/github.com\/aajanki\/spacy-fi\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/aajanki\/spacy-fi<\/a><\/li>\n<li>Experimental Turkish language model for SpaCy<br \/><a href=\"https:\/\/github.com\/mehmetilker\/spacy-tr\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/mehmetilker\/spacy-tr<\/a><\/li>\n<li>\u041c\u043e\u0434\u0435\u043b\u044c \u0440\u0443\u0441\u0441\u043a\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430 \u0434\u043b\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 spaCy<br \/><a href=\"https:\/\/github.com\/buriy\/spacy-ru\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/buriy\/spacy-ru<\/a><\/li>\n<li>[CA] Model pel processament del llenguatge natural en Catal\u00e0 per a spaCy<br \/><a href=\"https:\/\/github.com\/ccoreilly\/spacy-catala\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/ccoreilly\/spacy-catala<\/a><\/li>\n<li>Serbian Language Pipeline for Spacy<br \/><a href=\"https:\/\/github.com\/BCDH\/spacy-serbian-pipeline\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/BCDH\/spacy-serbian-pipeline<\/a><\/li>\n<li>Ancient Greek models for spaCy<br \/><a href=\"https:\/\/github.com\/jmyerston\/greCy\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/jmyerston\/greCy<\/a><\/li>\n<li>Thai spaCy model<br \/><a href=\"https:\/\/github.com\/PyThaiNLP\/thai_spacy_model\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/PyThaiNLP\/thai_spacy_model<\/a><\/li>\n<li>Welsh-language Part-of-Speech Tagging Model<br \/><a href=\"https:\/\/github.com\/techiaith\/model-tagiwr-spacy-cy\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/techiaith\/model-tagiwr-spacy-cy<\/a><\/li>\n<li>&#x1fa90; spaCy Project: Nepali Spacy Model<br \/><a href=\"https:\/\/github.com\/jangedoo\/spacy_ne\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/jangedoo\/spacy_ne<\/a><\/li>\n<li>ukr-spacy<br \/><a href=\"https:\/\/github.com\/kurnosovv\/ukr-spacy\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/kurnosovv\/ukr-spacy<\/a><\/li>\n<li>SpaCy_sv_master<br \/><a href=\"https:\/\/github.com\/alonsopg\/spaCy_sv_master\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/alonsopg\/spaCy_sv_master<\/a><\/li>\n<li>A simple docker image with python, spacy and language models preinstalled<br \/><a href=\"https:\/\/github.com\/lteacy\/spacy_docker\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/lteacy\/spacy_docker<\/a><\/li>\n<li>spacy create new language model with data from corpus<br \/><a href=\"https:\/\/stackoverflow.com\/questions\/50152856\/spacy-create-new-language-model-with-data-from-corpus\/50215001#50215001\" target=\"_blank\" rel=\"noopener\">https:\/\/stackoverflow.com\/questions\/50152856\/spacy-create-new-language-model-with-data-from-corpus\/50215001#50215001<\/a><\/li>\n<li>Training a language model in spaCy v3<br \/><a href=\"https:\/\/tech.bakkenbaeck.com\/post\/training-a-language-model-in-spacy-v3\" target=\"_blank\" rel=\"noopener\">https:\/\/tech.bakkenbaeck.com\/post\/training-a-language-model-in-spacy-v3<\/a><\/li>\n<li>spacy &#8211; Training config<br \/><a href=\"https:\/\/spacy.io\/api\/data-formats#config\" target=\"_blank\" rel=\"noopener\">https:\/\/spacy.io\/api\/data-formats#config<\/a><\/li>\n<li>thinc.ai<br \/><a href=\"https:\/\/thinc.ai\/docs\/usage-config\" target=\"_blank\" rel=\"noopener\">https:\/\/thinc.ai\/docs\/usage-config<\/a><\/li>\n<li>How to Create a Config.cfg File in spaCy 3x for Named Entity Recognition (NER)<br \/><a href=\"https:\/\/www.youtube.com\/watch?v=l67PXnhu0ig\" target=\"_blank\" rel=\"noopener\">https:\/\/www.youtube.com\/watch?v=l67PXnhu0ig<\/a><\/li>\n<li>Using spaCy 3.0 to build a custom NER model<br \/><a href=\"https:\/\/towardsdatascience.com\/using-spacy-3-0-to-build-a-custom-ner-model-c9256bea098\" target=\"_blank\" rel=\"noopener\">https:\/\/towardsdatascience.com\/using-spacy-3-0-to-build-a-custom-ner-model-c9256bea098<\/a><\/li>\n<li>pythonhumanities.com<br \/><a href=\"https:\/\/pythonhumanities.com\/\" target=\"_blank\" rel=\"noopener\">https:\/\/pythonhumanities.com\/<\/a><\/li>\n<li>The \u2018__init__.py\u2019 File: What Is It? How to Use It? (Complete Guide)<br \/><a href=\"https:\/\/www.codingem.com\/what-is-init-py-file-in-python\/\" target=\"_blank\" rel=\"noopener\">https:\/\/www.codingem.com\/what-is-init-py-file-in-python\/<\/a><\/li>\n<li>Natural Language Processing with spaCy \u2014 Steps and Examples<br \/><a href=\"https:\/\/pub.towardsai.net\/natural-language-processing-with-spacy-steps-and-examples-155618e84103\" target=\"_blank\" rel=\"noopener\">https:\/\/pub.towardsai.net\/natural-language-processing-with-spacy-steps-and-examples-155618e84103<\/a><\/li>\n<li>polyglot<br \/><a href=\"https:\/\/polyglot.readthedocs.io\/en\/latest\/\" target=\"_blank\" rel=\"noopener\">https:\/\/polyglot.readthedocs.io\/en\/latest\/<\/a><\/li>\n<li>spaCy models<br \/><a href=\"https:\/\/www.educba.com\/spacy-models\/\" target=\"_blank\" rel=\"noopener\">https:\/\/www.educba.com\/spacy-models\/<\/a><\/li>\n<li>spacy &#8211; Language Support<br \/><a href=\"https:\/\/github.com\/explosion\/spaCy\/discussions\/categories\/language-support\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/explosion\/spaCy\/discussions\/categories\/language-support<\/a><\/li>\n<li>spacy &#8211; Adding models for new languages master thread #3056<br \/><a href=\"https:\/\/github.com\/explosion\/spaCy\/discussions\/3056\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/explosion\/spaCy\/discussions\/3056<\/a><\/li>\n<li>spacy &#8211; tests for language english<br \/><a href=\"https:\/\/github.com\/explosion\/spaCy\/tree\/master\/spacy\/tests\/lang\/en\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/explosion\/spaCy\/tree\/master\/spacy\/tests\/lang\/en<\/a><\/li>\n<li>spacy &#8211; Linguistic Features<br \/><a href=\"https:\/\/spacy.io\/usage\/linguistic-features\" target=\"_blank\" rel=\"noopener\">https:\/\/spacy.io\/usage\/linguistic-features<\/a><\/li>\n<li>Build a Custom NER model using spaCy 3.0<br \/><a href=\"https:\/\/turbolab.in\/build-a-custom-ner-model-using-spacy-3-0\/\" target=\"_blank\" rel=\"noopener\">https:\/\/turbolab.in\/build-a-custom-ner-model-using-spacy-3-0\/<\/a><\/li>\n<li>Working with languages not yet supported by Spacy<br \/><a href=\"https:\/\/support.prodi.gy\/t\/working-with-languages-not-yet-supported-by-spacy\/206\/19\" target=\"_blank\" rel=\"noopener\">https:\/\/support.prodi.gy\/t\/working-with-languages-not-yet-supported-by-spacy\/206\/19<\/a><\/li>\n<li>Using Custom spaCy Components in Rasa<br \/>\n<br \/><a href=\"https:\/\/rasa.com\/blog\/custom-spacy-components\/\" target=\"_blank\" rel=\"noopener\">https:\/\/rasa.com\/blog\/custom-spacy-components\/<\/a><\/li>\n<li>Python Tutorials for Digital Humanities<br \/><a href=\"https:\/\/www.youtube.com\/@python-programming\" target=\"_blank\" rel=\"noopener\">https:\/\/www.youtube.com\/@python-programming<\/a><\/li>\n<li>Named Entity Recognition: Concept, Tools and Tutorial<br \/><a href=\"https:\/\/monkeylearn.com\/blog\/named-entity-recognition\/\" target=\"_blank\" rel=\"noopener\">https:\/\/monkeylearn.com\/blog\/named-entity-recognition\/<\/a><\/li>\n<li>Tag NLP on medium.com<br \/><a href=\"https:\/\/medium.com\/tag\/nlp\" target=\"_blank\" rel=\"noopener\">https:\/\/medium.com\/tag\/nlp<\/a><\/li>\n<li>How to Create a Custom NER in Spacy 3.5<br \/><a href=\"https:\/\/towardsdatascience.com\/how-to-create-a-custom-ner-in-spacy-3-5-c9942aab3c91\" target=\"_blank\" rel=\"noopener\">https:\/\/towardsdatascience.com\/how-to-create-a-custom-ner-in-spacy-3-5-c9942aab3c91<\/a><\/li>\n<li>The New Economy of Data Labeling<br \/><a href=\"https:\/\/medium.com\/coderbyte\/data-labeling-63b5bf796f24\" target=\"_blank\" rel=\"noopener\">https:\/\/medium.com\/coderbyte\/data-labeling-63b5bf796f24<\/a><\/li>\n<li>Learn how to prepare your dataset for fine-tuning<br \/><a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/cognitive-services\/openai\/how-to\/prepare-dataset\" target=\"_blank\" rel=\"noopener\">https:\/\/learn.microsoft.com\/en-us\/azure\/cognitive-services\/openai\/how-to\/prepare-dataset<\/a><\/li>\n<li>NLP Project Part 2: How to Clean and Prepare Data for Analysis<br \/><a href=\"https:\/\/www.dataquest.io\/blog\/how-to-clean-and-prepare-your-data-for-analysis\/\" target=\"_blank\" rel=\"noopener\">https:\/\/www.dataquest.io\/blog\/how-to-clean-and-prepare-your-data-for-analysis\/<\/a><\/li>\n<li>How To Prepare Your Data For Machine Learning in Python with Scikit-Learn<br \/><a href=\"https:\/\/machinelearningmastery.com\/prepare-data-machine-learning-python-scikit-learn\/\" target=\"_blank\" rel=\"noopener\">https:\/\/machinelearningmastery.com\/prepare-data-machine-learning-python-scikit-learn\/<\/a><\/li>\n<li>Train Neural Network by loading your images |TensorFlow, CNN, Keras tutorial<br \/><a href=\"https:\/\/www.youtube.com\/watch?v=uqomO_BZ44g\" target=\"_blank\" rel=\"noopener\">https:\/\/www.youtube.com\/watch?v=uqomO_BZ44g<\/a><\/li>\n<li>Machine Learning Mastery With Python<br \/><a href=\"https:\/\/machinelearningmastery.com\/machine-learning-with-python\/\" target=\"_blank\" rel=\"noopener\">https:\/\/machinelearningmastery.com\/machine-learning-with-python\/<\/a><\/li>\n<li>Datasets for Natural Language Processing<br \/><a href=\"https:\/\/machinelearningmastery.com\/datasets-natural-language-processing\/\" target=\"_blank\" rel=\"noopener\">https:\/\/machinelearningmastery.com\/datasets-natural-language-processing\/<\/a><\/li>\n<li>tm2tb is a term extraction module with a focus on bilingual data.<br \/><a href=\"https:\/\/github.com\/luismond\/tm2tb\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/luismond\/tm2tb<\/a><\/li>\n<li>Custom Named Entity Recognition Using spaCy<br \/><a href=\"https:\/\/towardsdatascience.com\/custom-named-entity-recognition-using-spacy-7140ebbb3718\" target=\"_blank\" rel=\"noopener\">https:\/\/towardsdatascience.com\/custom-named-entity-recognition-using-spacy-7140ebbb3718<\/a><\/li>\n<li>Spacy<br \/><a href=\"https:\/\/spacy.io\/\" target=\"_blank\" rel=\"noopener\">https:\/\/spacy.io\/<\/a><\/li>\n<li>NLP_App<br \/><a href=\"https:\/\/github.com\/yami-s\/NLP_App\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/yami-s\/NLP_App<\/a><\/li>\n<li>Named Entity Recognition | Relation Extraction | Label Studio | Part1<br \/><a href=\"https:\/\/www.youtube.com\/watch?v=qNcoLpxW8QE\" target=\"_blank\" rel=\"noopener\">https:\/\/www.youtube.com\/watch?v=qNcoLpxW8QE<\/a><\/li>\n<li>Labeling images for semantic segmentation using Label Studio<br \/><a href=\"https:\/\/www.youtube.com\/watch?v=UUP_omOSKuc\" target=\"_blank\" rel=\"noopener\">https:\/\/www.youtube.com\/watch?v=UUP_omOSKuc<\/a><\/li>\n<li>Custom NER with spaCy v3 Tutorial | Free NER Data Annotation | Named Entity Recognition Tutorial<br \/><a href=\"https:\/\/www.youtube.com\/watch?v=p_7hJvl7P2A\" target=\"_blank\" rel=\"noopener\">https:\/\/www.youtube.com\/watch?v=p_7hJvl7P2A<\/a><\/li>\n<li>Label Studio API<br \/><a href=\"https:\/\/labelstud.io\/api\" target=\"_blank\" rel=\"noopener\">https:\/\/labelstud.io\/api<\/a><\/li>\n<li>Prodigy<br \/><a href=\"https:\/\/prodi.gy\" target=\"_blank\" rel=\"noopener\">https:\/\/prodi.gy<\/a><\/li>\n<li>Label Studio Docs<br \/><a href=\"https:\/\/github.com\/HumanSignal\/label-studio\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/HumanSignal\/label-studio<\/a><\/li>\n<li>Youtube Channel from Label Studio<br \/><a href=\"https:\/\/www.youtube.com\/@label-studio\" target=\"_blank\" rel=\"noopener\">https:\/\/www.youtube.com\/@label-studio<\/a><\/li>\n<li>Training Custom NER models in SpaCy to auto-detect named entities [Complete Guide]<br \/><a href=\"https:\/\/www.machinelearningplus.com\/nlp\/training-custom-ner-model-in-spacy\/\" target=\"_blank\" rel=\"noopener\">https:\/\/www.machinelearningplus.com\/nlp\/training-custom-ner-model-in-spacy\/<\/a><\/li>\n<li>Training Spacy NER models with doccano<br \/><a href=\"https:\/\/medium.com\/@justindavies\/training-spacy-ner-models-with-doccano-8d8203e29bfa\" target=\"_blank\" rel=\"noopener\">https:\/\/medium.com\/@justindavies\/training-spacy-ner-models-with-doccano-8d8203e29bfa<\/a><\/li>\n<li>Labelbox<br \/><a href=\"https:\/\/labelbox.com\/\" target=\"_blank\" rel=\"noopener\">https:\/\/labelbox.com\/<\/a><\/li>\n<li>Using spaCy as a ML backend for Label Studio<br \/><a href=\"https:\/\/www.youtube.com\/watch?v=F19NT-21uT4\" target=\"_blank\" rel=\"noopener\">https:\/\/www.youtube.com\/watch?v=F19NT-21uT4<\/a><\/li>\n<li>spaCy powered Label Studio ML backend<br \/>\n<br \/><a href=\"https:\/\/github.com\/tim-smart\/label-studio-spacy\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/tim-smart\/label-studio-spacy<\/a><\/li>\n<li>Spacy: Training Pipelines &#038; Models<br \/><a href=\"https:\/\/spacy.io\/usage\/training\" target=\"_blank\" rel=\"noopener\">https:\/\/spacy.io\/usage\/training<\/a><\/li>\n<ul>\n","protected":false},"excerpt":{"rendered":"<p>With AI\/ML, I&#8217;m trying to go from &#8220;user&#8221; status to &#8220;maker&#8221; status. At the very beginning, like often, I am more focused on uses and&hellip; <\/p>\n<p class=\"text-center\"><a href=\"https:\/\/flaven.fr\/2023\/08\/the-importance-of-the-labeling-process-or-annotating-inside-an-ml-pipeline-plus-an-example-with-ner-made-for-spacy\/\" class=\"more-link\">Continue reading &rarr; <span class=\"screen-reader-text\">The importance of the Labeling process or annotating inside an ML pipeline plus an example on how-to train a &#8220;custom&#8221; NER for Spacy<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":12493,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"bf_ai_meta_description":"Master labeling in ML pipelines. Train custom NER models with SpaCy. Tools and outcomes detailed.","bf_ai_og_title":"Labeling in ML Pipelines","footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[3437,3444,3445,3447,3448,3449,3450,3435],"tags":[2532,3034,504,3493,3032,3037,2434,192,3036,3035,3033,3489,3031,2316,2580],"class_list":["post-12492","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-business-case-studies","category-programming-databases","category-seo-web-marketing","category-technology-trends","category-tools-productivity","category-tutorials-how-to","category-ux-product-design","category-web-development","tag-anaconda","tag-annotations","tag-automation","tag-clip","tag-datascience","tag-doccano","tag-docker","tag-json","tag-label-studio","tag-labelingmachine","tag-machinelearning","tag-microsoft-azure","tag-mlops","tag-python","tag-spacy"],"jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p3Vuhl-3fu","jetpack_featured_media_url":"https:\/\/flaven.fr\/wp-content\/uploads\/2023\/08\/ml_label_studio_b.jpg","_links":{"self":[{"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/posts\/12492","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/comments?post=12492"}],"version-history":[{"count":14,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/posts\/12492\/revisions"}],"predecessor-version":[{"id":12908,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/posts\/12492\/revisions\/12908"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/media\/12493"}],"wp:attachment":[{"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/media?parent=12492"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/categories?post=12492"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/tags?post=12492"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}