{"id":13510694,"url":"https://github.com/koursaros-ai/nboost","last_synced_at":"2025-03-30T16:34:49.090Z","repository":{"id":41514089,"uuid":"218382079","full_name":"koursaros-ai/nboost","owner":"koursaros-ai","description":"NBoost is a scalable, search-api-boosting platform for deploying transformer models to improve the relevance of search results on different platforms (i.e. Elasticsearch)","archived":false,"fork":false,"pushed_at":"2020-09-30T14:51:16.000Z","size":14826,"stargazers_count":675,"open_issues_count":30,"forks_count":69,"subscribers_count":17,"default_branch":"master","last_synced_at":"2024-09-20T04:14:29.143Z","etag":null,"topics":["cloud","deep-learning","docker","elasticsearch","helm","kubernetes","machine-learning","microservices","nboost","nlp","proxy","python","pytorch","search-api","search-engine","semantic-search","tensorflow"],"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/koursaros-ai.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","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-29T20:56:24.000Z","updated_at":"2024-08-07T02:37:46.000Z","dependencies_parsed_at":"2022-08-10T02:35:22.530Z","dependency_job_id":null,"html_url":"https://github.com/koursaros-ai/nboost","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/koursaros-ai%2Fnboost","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/koursaros-ai%2Fnboost/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/koursaros-ai%2Fnboost/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/koursaros-ai%2Fnboost/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/koursaros-ai","download_url":"https://codeload.github.com/koursaros-ai/nboost/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":222566739,"owners_count":17004237,"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":["cloud","deep-learning","docker","elasticsearch","helm","kubernetes","machine-learning","microservices","nboost","nlp","proxy","python","pytorch","search-api","search-engine","semantic-search","tensorflow"],"created_at":"2024-08-01T02:01:50.336Z","updated_at":"2024-11-01T11:31:08.166Z","avatar_url":"https://github.com/koursaros-ai.png","language":"Python","funding_links":[],"categories":["Python","cloud"],"sub_categories":[],"readme":"\u003e 🧪 We're looking for beta testers for our \u003ca href='https://answerbot.app'\u003evirtual assistant\u003c/a\u003e widget. \u003ca href = 'mailto:jp954@cornell.edu'\u003eContact us\u003c/a\u003e if you're interested in using it on your website.\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://github.com/koursaros-ai/nboost/raw/master/.github/banner.svg?sanitize=true\" alt=\"Nboost\" width=\"70%\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n\u003ca href=\"https://cloud.drone.io/koursaros-ai/nboost\"\u003e\n    \u003cimg src=\"https://cloud.drone.io/api/badges/koursaros-ai/nboost/status.svg\" /\u003e\n\u003c/a\u003e\n\u003ca href=\"https://pypi.org/project/nboost/\"\u003e\n    \u003cimg src=\"https://img.shields.io/pypi/pyversions/nboost.svg\" /\u003e\n\u003c/a\u003e\n\u003ca href=\"https://pypi.org/project/nboost/\"\u003e\n    \u003cimg alt=\"PyPI\" src=\"https://img.shields.io/pypi/v/nboost.svg\"\u003e\n\u003c/a\u003e\n\u003ca href='https://nboost.readthedocs.io/en/latest/'\u003e\n    \u003cimg src='https://readthedocs.org/projects/nboost/badge/?version=latest' alt='Documentation Status' /\u003e\n\u003c/a\u003e\n\u003ca href=\"https://www.codacy.com/app/koursaros-ai/nboost?utm_source=github.com\u0026amp;utm_medium=referral\u0026amp;utm_content=koursaros-ai/nboost\u0026amp;utm_campaign=Badge_Grade\"\u003e\n    \u003cimg src=\"https://api.codacy.com/project/badge/Grade/a9ce545b9f3846ba954bcd449e090984\"/\u003e\n\u003c/a\u003e\n\u003ca href=\"https://codecov.io/gh/koursaros-ai/neural_rerank\"\u003e\n  \u003cimg src=\"https://codecov.io/gh/koursaros-ai/neural_rerank/branch/master/graph/badge.svg\" /\u003e\n\u003c/a\u003e\n\u003ca href='https://github.com/koursaros-ai/nboost/blob/master/LICENSE'\u003e\n    \u003cimg alt=\"PyPI - License\" src=\"https://img.shields.io/pypi/l/nboost.svg\"\u003e\n\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#what-is-it\"\u003eHighlights\u003c/a\u003e •\n  \u003ca href=\"#overview\"\u003eOverview\u003c/a\u003e •\n  \u003ca href=\"#benchmarks\"\u003eBenchmarks\u003c/a\u003e •\n  \u003ca href=\"#install-nboost\"\u003eInstall\u003c/a\u003e •\n  \u003ca href=\"#getting-started\"\u003eGetting Started\u003c/a\u003e •\n  \u003ca href=\"#kubernetes\"\u003eKubernetes\u003c/a\u003e •\n  \u003ca href=\"https://nboost.readthedocs.io/\"\u003eDocumentation\u003c/a\u003e •\n  \u003ca href=\"#tutorials\"\u003eTutorials\u003c/a\u003e •\n  \u003ca href=\"#contributing\"\u003eContributing\u003c/a\u003e •\n  \u003ca href=\"./CHANGELOG.md\"\u003eRelease Notes\u003c/a\u003e •\n  \u003ca href=\"https://koursaros-ai.github.io/\"\u003eBlog\u003c/a\u003e  \n\u003c/p\u003e\n\n\u003ch2 align=\"center\"\u003eWhat is it\u003c/h2\u003e\n\n⚡**NBoost** is a scalable, search-engine-boosting platform for developing and deploying state-of-the-art models to improve the relevance of search results.\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://github.com/koursaros-ai/nboost/raw/master/.github/overview.svg?sanitize=true\" width=\"100%\"\u003e\n\u003c/p\u003e\n\nNboost leverages finetuned models to produce domain-specific neural search engines. The platform can also improve other downstream tasks requiring ranked input, such as question answering.\n\n\u003ca href = 'mailto:jp954@cornell.edu'\u003eContact us to request domain-specific models or leave feedback\u003c/a\u003e\n\n\u003ch2 align=\"center\"\u003eOverview\u003c/h2\u003e\n\nThe workflow of NBoost is relatively simple. Take the graphic above, and imagine that the server in this case is Elasticsearch.\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://github.com/koursaros-ai/nboost/raw/master/.github/conventional.svg?sanitize=true\" width=\"80%\"\u003e\n\u003c/p\u003e\n\nIn a **conventional search request**, the user sends a query to *Elasticsearch* and gets back the results.\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://github.com/koursaros-ai/nboost/raw/master/.github/nboost.svg?sanitize=true\" width=\"80%\"\u003e\n\u003c/p\u003e\n\nIn an **NBoost search request**, the user sends a query to the *model*. Then, the model asks for results from *Elasticsearch* and picks the best ones to return to the user.\n\n\u003ch2 align=\"center\"\u003eBenchmarks\u003c/h2\u003e\n\n\u003e 🔬 Note that we are evaluating models on differently constructed sets than they were trained on (MS Marco vs TREC-CAR), suggesting the generalizability of these models to many other real world search problems.\n\n\u003ccenter\u003e\n\nFine-tuned Models                                                                   | Dependency                                                                   | Eval Set                                                           | Search Boost\u003ca href='#benchmarks'\u003e\u003csup\u003e[1]\u003c/sup\u003e\u003c/a\u003e  | Speed on GPU\n----------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ------------------------------------------------------------------ | ----------------------------------------------------- | ----------------------------------\n`nboost/pt-tinybert-msmarco` (**default**)                                          | \u003cimg alt=\"PyTorch\" src=\"https://img.shields.io/badge/PyTorch-red\"/\u003e          |  \u003ca href ='http://www.msmarco.org/'\u003ebing queries\u003c/a\u003e               | **+45%** \u003csub\u003e\u003csup\u003e(0.26 vs 0.18)\u003c/sup\u003e\u003c/sub\u003e         | ~50ms/query \u003ca href='#footnotes'\u003e\n`nboost/pt-bert-base-uncased-msmarco`                                               | \u003cimg alt=\"PyTorch\" src=\"https://img.shields.io/badge/PyTorch-red\"/\u003e          | \u003ca href ='http://www.msmarco.org/'\u003ebing queries\u003c/a\u003e                | **+62%** \u003csub\u003e\u003csup\u003e(0.29 vs 0.18)\u003c/sup\u003e\u003c/sub\u003e         | ~300 ms/query\u003ca href='#footnotes'\u003e\n`nboost/pt-bert-large-msmarco`                                                      | \u003cimg alt=\"PyTorch\" src=\"https://img.shields.io/badge/PyTorch-red\"/\u003e          | \u003ca href ='http://www.msmarco.org/'\u003ebing queries\u003c/a\u003e                | **+77%** \u003csub\u003e\u003csup\u003e(0.32 vs 0.18)\u003c/sup\u003e\u003c/sub\u003e         | -\n`nboost/pt-biobert-base-msmarco`                                                    | \u003cimg alt=\"PyTorch\" src=\"https://img.shields.io/badge/PyTorch-red\"/\u003e          | \u003ca href ='https://github.com/naver/biobert-pretrained'\u003ebiomed\u003c/a\u003e  | **+66%** \u003csub\u003e\u003csup\u003e(0.17 vs 0.10)\u003c/sup\u003e\u003c/sub\u003e         | ~300 ms/query\u003ca href='#footnotes'\u003e\n\n\n\u003c/center\u003e\n\n**Instructions for reproducing \u003ca href = 'https://nboost.readthedocs.io/en/latest/chapter/benchmarking.html'\u003ehere\u003c/a\u003e.**\n\n\u003csub\u003e[1] \u003ca href = 'https://en.wikipedia.org/wiki/Mean_reciprocal_rank'\u003eMRR \u003c/a\u003e compared to BM25, the default for Elasticsearch. Reranking top 50.\u003c/sub\u003e\n\u003cbr\u003e\n\u003csub\u003e[2] https://github.com/nyu-dl/dl4marco-bert\u003c/sub\u003e\n\nTo use one of these fine-tuned models with nboost, run `nboost --model_dir bert-base-uncased-msmarco` for example, and it will download and cache automatically.\n\nUsing pre-trained language understanding models, you can boost search relevance metrics by nearly **2x** compared to just text search, with little to no extra configuration. While assessing performance, there is often a tradeoff between model accuracy and speed, so we benchmark both of these factors above. This leaderboard is a work in progress, and we intend on releasing more cutting edge models!\n\n\u003ch2 align=\"center\"\u003eInstall NBoost\u003c/h2\u003e\n\nThere are two ways to get NBoost, either as a Docker image or as a PyPi package. **For cloud users, we highly recommend using NBoost via Docker**. \n\u003e 🚸 Depending on your model, you should install the respective Tensorflow or Pytorch dependencies. We package them below.\n\nFor installing NBoost, follow the table below.\n\u003ccenter\u003e\n\nDependency                      | 🐳 Docker                                                 | 📦 Pypi                                           |  \u003ca href=\"#kubernetes\"\u003e🐙 Kubernetes\u003c/a\u003e\n------------------------------- | --------------------------------------------------------- | ------------------------------------------------- | -------------\n**Pytorch** (*recommended*)     | \u003csub\u003e\u003csup\u003e`koursaros/nboost:latest-pt`\u003c/sup\u003e\u003c/sub\u003e        | \u003csub\u003e\u003csup\u003e`pip install nboost[pt]`\u003c/sup\u003e\u003c/sub\u003e    | \u003csub\u003e\u003csup\u003e`helm install nboost/nboost --set image.tag=latest-pt`\u003c/sup\u003e\u003c/sub\u003e\n**Tensorflow**                  | \u003csub\u003e\u003csup\u003e`koursaros/nboost:latest-tf`\u003c/sup\u003e\u003c/sub\u003e        | \u003csub\u003e\u003csup\u003e`pip install nboost[tf]`\u003c/sup\u003e\u003c/sub\u003e    | \u003csub\u003e\u003csup\u003e`helm install nboost/nboost --set image.tag=latest-tf`\u003c/sup\u003e\u003c/sub\u003e\n**All**                         | \u003csub\u003e\u003csup\u003e`koursaros/nboost:latest-all`\u003c/sup\u003e\u003c/sub\u003e       | \u003csub\u003e\u003csup\u003e`pip install nboost[all]`\u003c/sup\u003e\u003c/sub\u003e   | \u003csub\u003e\u003csup\u003e`helm install nboost/nboost --set image.tag=latest-all`\u003c/sup\u003e\u003c/sub\u003e\n**-** (*for testing*)           | \u003csub\u003e\u003csup\u003e`koursaros/nboost:latest-alpine`\u003c/sup\u003e\u003c/sub\u003e    | \u003csub\u003e\u003csup\u003e`pip install nboost`\u003c/sup\u003e\u003c/sub\u003e        | \u003csub\u003e\u003csup\u003e`helm install nboost/nboost --set image.tag=latest-alpine`\u003c/sup\u003e\u003c/sub\u003e\n\n\u003c/center\u003e\n\nAny way you install it, if you end up reading the following message after `$ nboost --help` or `$ docker run koursaros/nboost --help`, then you are ready to go!\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://github.com/koursaros-ai/nboost/raw/master/.github/cli-help.svg?sanitize=true\" alt=\"success installation of NBoost\"\u003e\n\u003c/p\u003e\n\n\n\u003ch2 align=\"center\"\u003eGetting Started\u003c/h2\u003e\n\n- [The Proxy](#the-proxy)\n- [Setting up a Neural Proxy for Elasticsearch in 3 minutes](#Setting-up-a-Neural-Proxy-for-Elasticsearch-in-3-minutes)\n  * [Setting up an Elasticsearch Server](#setting-up-an-elasticsearch-server)\n  * [Deploying the proxy](#deploying-the-proxy)\n  * [Indexing some data](#indexing-some-data)\n- [Elastic made easy](#elastic-made-easy)\n\n\n### 📡The Proxy\n\n\u003ccenter\u003e\n\u003ctable\u003e\n  \u003ctr\u003e\n  \u003ctd width=\"33%\"\u003e\n      \u003cimg src=\"https://github.com/koursaros-ai/nboost/raw/master/.github/rocket.svg?sanitize=true\" alt=\"component overview\"\u003e\n      \u003c/td\u003e\n  \u003ctd\u003e\n  \u003cp\u003eThe \u003ca href=\"https://nboost.readthedocs.io/en/latest/api/nboost.proxy.html\"\u003eProxy\u003c/a\u003e is the core of NBoost. The proxy is essentially a wrapper to enable serving the model. It is able to understand incoming messages from specific search apis (i.e. Elasticsearch). When the proxy receives a message, it increases the amount of results the client is asking for so that the model can rerank a larger set and return the (hopefully) better results.\u003c/p\u003e\n  \u003cp\u003eFor instance, if a client asks for 10 results to do with the query \"brown dogs\" from Elasticsearch, then the proxy may increase the results request to 100 and filter down the best ten results for the client.\u003c/p\u003e\n\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\u003c/center\u003e\n\n#### \n\n\n\n### Setting up a Neural Proxy for Elasticsearch in 3 minutes\n\nIn this example we will set up a proxy to sit in between the client and Elasticsearch and boost the results!\n\n#### Installing NBoost with tensorflow\n\nIf you want to run the example on a GPU, make sure you have Tensorflow 1.14-1.15, Pytorch or ONNX Runtime with CUDA to support the modeling functionality. However, if you want to just run it on a CPU, don't worry about it. For both cases, just run:\n\n```bash\npip install nboost[pt]\n```\n\n\n#### Setting up an Elasticsearch Server\n\u003e 🔔 If you already have an Elasticsearch server, you can skip this step!\n\nIf you don't have Elasticsearch, not to worry! We recommend setting up a local Elasticsearch cluster using docker (providing you have Docker installed). First, get the ES image by running:\n```bash\ndocker pull elasticsearch:7.4.2\n```\nOnce you have the image, you can run an Elasticsearch server via:\n```bash\ndocker run -d -p 9200:9200 -p 9300:9300 -e \"discovery.type=single-node\" elasticsearch:7.4.2\n```\n\n#### Deploying the proxy\nNow we're ready to deploy our Neural Proxy! It is very simple to do this, run:\n```bash\nnboost                                  \\\n    --uhost localhost                   \\\n    --uport 9200                        \\\n    --search_route \"/\u003cindex\u003e/_search\"   \\\n    --query_path url.query.q            \\\n    --topk_path url.query.size          \\\n    --default_topk 10                   \\\n    --choices_path body.hits.hits       \\\n    --cvalues_path _source.passage\n```\n\u003e 📢 The `--uhost` and `--uport` should be the same as the Elasticsearch server above! Uhost and uport are short for upstream-host and upstream-port (referring to the upstream server).\n\nIf you get this message: `Listening: \u003chost\u003e:\u003cport\u003e`, then we're good to go!\n\n#### Indexing some data\nNBoost has a handy indexing tool built in (`nboost-index`). For demonstration purposes,  will be indexing [a set of passages about traveling and hotels](https://microsoft.github.io/TREC-2019-Deep-Learning/) through NBoost. You can add the index to your Elasticsearch server by running:\n\u003e  `travel.csv` comes with NBoost\n```bash\nnboost-index --file travel.csv --index_name travel --delim , --id_col\n```` \n\n\nNow let's test it out! Hit the Elasticsearch with:\n```bash\ncurl \"http://localhost:8000/travel/_search?pretty\u0026q=passage:vegas\u0026size=2\"\n```\n\nIf the Elasticsearch result has the `nboost` tag in it, congratulations it's working!\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://github.com/koursaros-ai/nboost/raw/master/.github/travel-tutorial.svg?sanitize=true\" alt=\"success installation of NBoost\"\u003e\n\u003c/p\u003e\n\n#### What just happened?\nLet's check out the **NBoost frontend**. Go to your browser and visit [localhost:8000/nboost](http://localhost:8000/nboost).\n\u003e If you don't have access to a browser, you can `curl http://localhost:8000/nboost/status` for the same information.\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://github.com/koursaros-ai/nboost/raw/master/.github/frontend-example.png\"\u003e\n\u003c/p\u003e\n\nThe frontend recorded everything that happened:\n\n1. NBoost got a request for **2 search results**. *(average_topk)*\n2. NBoost connected to the server at `localhost:9200`.\n3. NBoost sent a request for 50 search results to the server. *(topn)* \n4. NBoost received **50 search results** from the server. *(average_choices)*\n5. The model picked the best 2 search results and returned them to the client.\n\n#### Elastic made easy\nTo increase the number of parallel proxies, simply increase `--workers`. For a more robust deployment approach, you can distribute the proxy via Kubernetes (see below).\n\n\u003ch2 align=\"center\"\u003eKubernetes\u003c/h2\u003e\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://github.com/koursaros-ai/nboost/raw/master/.github/sailboat.svg?sanitize=true\" width=\"100%\"\u003e\n\u003c/p\u003e\n\n#### See also\nFor in-depth query DSL and other search API solutions (such as the Bing API), see the [docs](https://nboost.readthedocs.io/en/latest/chapter/bing-api.html).\n\n### Deploying NBoost via Kubernetes\nWe can easily deploy NBoost in a Kubernetes cluster using [Helm](https://helm.sh/).\n\n#### Add the NBoost Helm Repo\nFirst we need to register the repo with your Kubernetes cluster.\n```bash\nhelm repo add nboost https://raw.githubusercontent.com/koursaros-ai/nboost/master/charts/\nhelm repo update\n```\n\n#### Deploy some NBoost replicas\nLet's try deploying four replicas:\n```bash\nhelm install --name nboost --set replicaCount=4 nboost/nboost\n```\n\nAll possible `--set` ([values.yaml](https://github.com/koursaros-ai/nboost/blob/master/charts/nboost/values.yaml)) options are listed below:\n\n| Parameter                                    | Description                                      | Default                                                     |\n| -------------------------------------------- | ------------------------------------------------ | ----------------------------------------------------------- |\n| `replicaCount`                               | Number of replicas to deploy                     | `3`                                                         |\n| `image.repository`                           | NBoost Image name                                | `koursaros/nboost`                                          |\n| `image.tag`                                  | NBoost Image tag                                 | `latest-pt`                                                 |\n| `args.model`                                 | Name of the model class                          | `nil`                                                       |\n| `args.model_dir`                             | Name or directory of the finetuned model         | `pt-bert-base-uncased-msmarco`                              |\n| `args.qa`                                    | Whether to use the qa plugin                     | `False`                                                     |\n| `args.qa_model_dir`                          | Name or directory of the qa model                | `distilbert-base-uncased-distilled-squad`                   |\n| `args.model`                                 | Name of the model class                          | `nil`                                                       |\n| `args.host`                                  | Hostname of the proxy                            | `0.0.0.0`                                                   |\n| `args.port`                                  | Port for the proxy to listen on                  | `8000`                                                      |\n| `args.uhost`                                 | Hostname of the upstream search api server       | `elasticsearch-master`                                      |\n| `args.uport`                                 | Port of the upstream server                      | `9200`                                                      |\n| `args.data_dir`                              | Directory to cache model binary                  | `nil`                                                       |\n| `args.max_seq_len`                           | Max combined token length                        | `64`                                                        |\n| `args.bufsize`                               | Size of the http buffer in bytes                 | `2048`                                                      |\n| `args.batch_size`                            | Batch size for running through rerank model      | `4`                                                         |\n| `args.multiplier`                            | Factor to increase results by                    | `5`                                                         |\n| `args.workers`                               | Number of threads serving the proxy              | `10`                                                        |\n| `args.query_path`                            | Jsonpath in the request to find the query        | `nil`                                                       |\n| `args.topk_path`                             | Jsonpath to find the number of requested results | `nil`                                                       |\n| `args.choices_path`                          | Jsonpath to find the array of choices to reorder | `nil`                                                       |\n| `args.cvalues_path`                          | Jsonpath to find the str values of the choices   | `nil`                                                       |\n| `args.cids_path`                             | Jsonpath to find the ids of the choices          | `nil`                                                       |\n| `args.search_path`                           | The url path to tag for reranking via nboost     | `nil`                                                       |\n| `service.type`                               | Kubernetes Service type                          | `LoadBalancer`                                              |\n| `resources`                                  | resource needs and limits to apply to the pod    | `{}`                                                        |\n| `nodeSelector`                               | Node labels for pod assignment                   | `{}`                                                        |\n| `affinity`                                   | Affinity settings for pod assignment             | `{}`                                                        |\n| `tolerations`                                | Toleration labels for pod assignment             | `[]`                                                        |\n| `image.pullPolicy`                           | Image pull policy                                | `IfNotPresent`                                              |\n| `imagePullSecrets`                           | Docker registry secret names as an array         | `[]` (does not add image pull secrets to deployed pods)     |\n| `nameOverride`                               | String to override Chart.name                    | `nil`                                                       |\n| `fullnameOverride`                           | String to override Chart.fullname                | `nil`                                                       |\n| `serviceAccount.create`                      | Specifies whether a service account is created   | `nil`                                                       |\n| `serviceAccount.name`                        | The name of the service account to use. If not set and create is true, a name is generated using the fullname template   | `nil`  |\n| `serviceAccount.create`                      | Specifies whether a service account is created   | `nil`                                                       |\n| `podSecurityContext.fsGroup`                 | Group ID for the container                       | `nil`                                                       |\n| `securityContext.runAsUser`                  | User ID for the container                        | `1001`                                                      |\n| `ingress.enabled`                            | Enable ingress resource                          | `false`                                                     |\n| `ingress.hostName`                           | Hostname to your installation                    | `nil`                                                       |\n| `ingress.path`                               | Path within the url structure                    | `[]`                                                        |\n| `ingress.tls`                                | enable ingress with tls                          | `[]`                                                        |\n| `ingress.tls.secretName`                     | tls type secret to be used                       | `chart-example-tls`                                         |\n\n\n\n\u003ch2 align=\"center\"\u003eDocumentation\u003c/h2\u003e\n\n[![ReadTheDoc](https://readthedocs.org/projects/nboost/badge/?version=latest\u0026style=for-the-badge)](https://nboost.readthedocs.io)\n\nThe official NBoost documentation is hosted on [nboost.readthedocs.io](http://nboost.readthedocs.io/). It is automatically built, updated and archived on every new release.\n\n\u003ch2 align=\"center\"\u003eContributing\u003c/h2\u003e\n\nContributions are greatly appreciated! You can make corrections or updates and commit them to NBoost. Here are the steps:\n\n1. Create a new branch, say `fix-nboost-typo-1`\n2. Fix/improve the codebase\n3. Commit the changes. Note the **commit message must follow [the naming style](./CONTRIBUTING.md#commit-message-naming)**, say `Fix/model-bert: improve the readability and move sections`\n4. Make a pull request. Note the **pull request must follow [the naming style](./CONTRIBUTING.md#commit-message-naming)**. It can simply be one of your commit messages, just copy paste it, e.g. `Fix/model-bert: improve the readability and move sections`\n5. Submit your pull request and wait for all checks passed (usually 10 minutes)\n    - Coding style\n    - Commit and PR styles check\n    - All unit tests\n6. Request reviews from one of the developers from our core team.\n7. Merge!\n\nMore details can be found in the [contributor guidelines](./CONTRIBUTING.md).\n\n\u003ch2 align=\"center\"\u003eCiting NBoost\u003c/h2\u003e\n\nIf you use NBoost in an academic paper, we would love to be cited. Here are the two ways of citing NBoost:\n\n1.     \\footnote{https://github.com/koursaros-ai/nboost}\n2. \n    ```latex\n    @misc{koursaros2019NBoost,\n      title={NBoost: Neural Boosting Search Results},\n      author={Thienes, Cole and Pertschuk, Jack},\n      howpublished={\\url{https://github.com/koursaros-ai/nboost}},\n      year={2019}\n    }\n    ```\n\n\u003ch2 align=\"center\"\u003eLicense\u003c/h2\u003e\n\nIf you have downloaded a copy of the NBoost binary or source code, please note that the NBoost binary and source code are both licensed under the [Apache License, Version 2.0](./LICENSE).\n\n\u003csub\u003e\nKoursaros AI is excited to bring this open source software to the community.\u003cbr\u003e\nCopyright (C) 2019. All rights reserved.\n\u003c/sub\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkoursaros-ai%2Fnboost","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkoursaros-ai%2Fnboost","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkoursaros-ai%2Fnboost/lists"}