?我們正在為虛擬助手小部件尋找Beta測試人員。如果您有興趣在網站上使用它,請與我們聯繫。
亮點•概述•基準•安裝•入門•Kubernetes•文檔•教程•貢獻•發行說明•博客
⚡nboost是一個可擴展的,搜索引人入勝的平台,用於開發和部署最先進的模型,以提高搜索結果的相關性。

NBOOST利用固定模型生產特定領域的神經搜索引擎。該平台還可以改善需要排名輸入的其他下游任務,例如問答。
與我們聯繫以請求特定域的模型或留下反饋
NBoost的工作流相對簡單。以上面的圖形為單位,並想像在這種情況下的服務器是Elasticsearch。

在常規的搜索請求中,用戶向Elasticsearch發送查詢並恢復結果。

在NBOOST搜索請求中,用戶向模型發送查詢。然後,該模型索取了Elasticsearch的結果,並選擇了最佳的返回用戶的結果。
?請注意,我們正在評估與對訓練的構建的模型相比(MS MARCO vs TREC-CAR),這表明這些模型對許多其他現實世界搜索問題的推廣性。
| 微調模型 | 依賴性 | 評估集 | 搜索提升[1] | GPU上的速度 |
|---|---|---|---|---|
nboost/pt-tinybert-msmarco (默認) | Bing查詢 | +45% (0.26 vs 0.18) | 〜50ms/查詢 | |
nboost/pt-bert-base-uncased-msmarco | Bing查詢 | +62% (0.29 vs 0.18) | 〜300毫秒/查詢 | |
nboost/pt-bert-large-msmarco | Bing查詢 | +77% (0.32 vs 0.18) | - | |
nboost/pt-biobert-base-msmarco | 生物 | +66% (0.17 vs 0.10) | 〜300毫秒/查詢 |
在這裡複製的說明。
[1] MRR與BM25相比,BM25是Elasticsearch的默認值。重讀前50名。
[2] https://github.com/nyu-dl/dl4marco-bert
例如,將這些微調模型之一與NBOOST一起運行,以運行nboost --model_dir bert-base-uncased-msmarco ,它將自動下載和緩存。
使用預訓練的語言理解模型,與僅文本搜索相比,您可以將搜索相關指標提高近2倍,而幾乎沒有額外的配置。在評估性能的同時,通常在模型的準確性和速度之間經常取決於權衡,因此我們在上面基準了這兩個因素。該排行榜正在進行中,我們打算發布更多最先進的模型!
有兩種方法可以作為Docker圖像或PYPI軟件包獲得NBOOST。對於雲用戶,我們強烈建議通過Docker使用NBoost 。
?根據模型,您應該安裝相應的張量或pytorch依賴性。我們在下面打包它們。
要安裝NBoost,請按照下表。
| 依賴性 | ? Docker | ? PYPI | ? Kubernetes |
|---|---|---|---|
| Pytorch (推薦) | koursaros/nboost:latest-pt | pip install nboost[pt] | helm install nboost/nboost --set image.tag=latest-pt |
| 張量 | koursaros/nboost:latest-tf | pip install nboost[tf] | helm install nboost/nboost --set image.tag=latest-tf |
| 全部 | koursaros/nboost:latest-all | pip install nboost[all] | helm install nboost/nboost --set image.tag=latest-all |
| - (用於測試) | koursaros/nboost:latest-alpine | pip install nboost | helm install nboost/nboost --set image.tag=latest-alpine |
以任何方式安裝它,如果您最終在$ nboost --help或$ docker run koursaros/nboost --help ,那麼您就可以開始了!

![]() | 代理是NBoost的核心。代理本質上是啟用該模型的包裝紙。它能夠從特定的搜索API(即elasticsearch)中理解傳入的消息。當代理收到一條消息時,它會增加客戶端要求的結果量,以便模型可以重新列出更大的集合併返回(希望)更好的結果。 例如,如果客戶要求使用Elasticsearch的查詢“ Brown Dogs”有10個結果,那麼代理可能會將結果請求增加到100,並為客戶提供最佳的10個結果。 |
在此示例中,我們將設置一個代理,以坐在客戶端和Elasticsearch之間,並提高結果!
如果您想在GPU上運行示例,請確保使用Tensorflow 1.14-1.15,Pytorch或onnx運行時使用CUDA來支持建模功能。但是,如果您只想在CPU上運行它,請不要擔心。對於這兩種情況,只需運行:
pip install nboost[pt]?如果您已經擁有Elasticsearch服務器,則可以跳過此步驟!
如果您沒有Elasticsearch,請不要擔心!我們建議使用Docker設置本地Elasticsearch集群(前提是已安裝了Docker)。首先,通過運行獲取ES圖像:
docker pull elasticsearch:7.4.2擁有圖像後,您可以通過:
docker run -d -p 9200:9200 -p 9300:9300 -e " discovery.type=single-node " elasticsearch:7.4.2現在,我們準備部署我們的神經代理!這樣做很簡單,運行:
nboost
--uhost localhost
--uport 9200
--search_route " /<index>/_search "
--query_path url.query.q
--topk_path url.query.size
--default_topk 10
--choices_path body.hits.hits
--cvalues_path _source.passage?
--uhost和--uport應該與上面的Elasticsearch服務器相同! UHOST和UPORT對於上游主持人和上游端口(指上游服務器)而言是簡短的。
如果您收到此消息: Listening: <host>:<port> ,那麼我們很高興!
NBoost具有內置的方便索引工具( nboost-index )。出於演示目的,將索引一組有關旅行和酒店通過NBoost的段落。您可以通過運行:
travel.csv隨附nboost
nboost-index --file travel.csv --index_name travel --delim , --id_col現在讓我們測試一下!使用:
curl " http://localhost:8000/travel/_search?pretty&q=passage:vegas&size=2 "如果Elasticsearch結果中有nboost標籤,則恭喜它可以正常工作!

讓我們檢查一下NBoost前端。轉到您的瀏覽器並訪問Localhost:8000/nboost。
如果您無法訪問瀏覽器,則可以
curl http://localhost:8000/nboost/statusfor相同信息。

前端記錄了發生的一切:
localhost:9200 。為了增加並行代理的數量,只需增加--workers 。對於更強大的部署方法,您可以通過Kubernetes分發代理(請參見下文)。

有關深入查詢DSL和其他搜索API解決方案(例如Bing API),請參見文檔。
我們可以使用頭盔輕鬆地將NBOOST部署在Kubernetes群集中。
首先,我們需要在您的kubernetes群集中註冊回購。
helm repo add nboost https://raw.githubusercontent.com/koursaros-ai/nboost/master/charts/
helm repo update讓我們嘗試部署四個複製品:
helm install --name nboost --set replicaCount=4 nboost/nboost所有可能的--set (values.yaml)選項如下:
| 範圍 | 描述 | 預設 |
|---|---|---|
replicaCount | 部署的副本數量 | 3 |
image.repository | nboost圖像名稱 | koursaros/nboost |
image.tag | nboost圖像標籤 | latest-pt |
args.model | 模型類的名稱 | nil |
args.model_dir | 固定模型的名稱或目錄 | pt-bert-base-uncased-msmarco |
args.qa | 是否使用QA插件 | False |
args.qa_model_dir | QA模型的名稱或目錄 | distilbert-base-uncased-distilled-squad |
args.model | 模型類的名稱 | nil |
args.host | 代理的主機名 | 0.0.0.0 |
args.port | 代理人聆聽的端口 | 8000 |
args.uhost | 上游搜索API服務器的主機名 | elasticsearch-master |
args.uport | 上游服務器的端口 | 9200 |
args.data_dir | 高速緩存型號二進制目錄 | nil |
args.max_seq_len | 最大令牌長度 | 64 |
args.bufsize | 字節中的HTTP緩衝區大小 | 2048 |
args.batch_size | 通過RERANK模型運行的批次大小 | 4 |
args.multiplier | 增加結果的因素 | 5 |
args.workers | 服務代理的線程數量 | 10 |
args.query_path | 在要求查詢的請求中的jsonpath | nil |
args.topk_path | jsonpath以找到要求的結果的數量 | nil |
args.choices_path | jsonpath可以找到一系列重新排序的選擇 | nil |
args.cvalues_path | jsonpath找到選擇的str值 | nil |
args.cids_path | jsonpath找到選擇的ID | nil |
args.search_path | 通過NBOOST重新計的標籤的URL路徑 | nil |
service.type | Kubernetes服務類型 | LoadBalancer |
resources | 資源需求和限制適用於POD | {} |
nodeSelector | POD分配的節點標籤 | {} |
affinity | POD分配的親和力設置 | {} |
tolerations | POD分配的耐受標籤 | [] |
image.pullPolicy | 圖像拉策略 | IfNotPresent |
imagePullSecrets | Docker註冊表秘密名稱為數組 | [] (不在部署的吊艙中添加圖像拉秘密) |
nameOverride | 字符串到覆蓋圖表。名稱 | nil |
fullnameOverride | 字符串到覆蓋圖表。 | nil |
serviceAccount.create | 指定是否創建了服務帳戶 | nil |
serviceAccount.name | 服務帳戶的名稱要使用。如果未設置並創建為真,則使用全名模板生成名稱 | nil |
serviceAccount.create | 指定是否創建了服務帳戶 | nil |
podSecurityContext.fsGroup | 容器的組ID | nil |
securityContext.runAsUser | 容器的用戶ID | 1001 |
ingress.enabled | 啟用入口資源 | false |
ingress.hostName | 安裝的主機名 | nil |
ingress.path | URL結構內的路徑 | [] |
ingress.tls | 使用TLS啟用入口 | [] |
ingress.tls.secretName | 使用TLS類型的秘密 | chart-example-tls |
官方的NBoost文檔託管在nboost.readthedocs.io上。它是在每個新版本中自動構建,更新和存檔的。
貢獻非常感謝!您可以進行更正或更新,並將其提交為NBOOST。這是步驟:
fix-nboost-typo-1Fix/model-bert: improve the readability and move sectionsFix/model-bert: improve the readability and move sections可以在撰稿人指南中找到更多細節。
如果您在學術論文中使用NBoost,我們很樂意被引用。這是引用NBoost的兩種方法:
footnote{https://github.com/koursaros-ai/nboost}
@misc{koursaros2019NBoost,
title={NBoost: Neural Boosting Search Results},
author={Thienes, Cole and Pertschuk, Jack},
howpublished={ url {https://github.com/koursaros-ai/nboost}},
year={2019}
}如果您已經下載了NBoost二進製或源代碼的副本,請注意,NBOOST二進制代碼和源代碼均在Apache許可證版本2.0下獲得許可。
Koursaros AI很高興將此開源軟件帶到社區。