大家好! 我們將開設一系列文章,致力於解決與自然語言處理(自然語言處理或簡稱 NLP)相關的實際問題以及使用開源庫創建對話代理(聊天機器人)
NLP 任務包括確定文字的情緒、解析命名實體、確定對話者想要從您的機器人那裡得到什麼:訂購披薩或獲取背景資訊等等。 您可以閱讀有關 NLP 任務和方法的更多信息
在本文中,我們將向您展示如何使用預先訓練的 NLP 模型來運行 REST 伺服器,無需任何額外的配置或培訓即可使用。
深巴甫洛夫的安裝
此處和下文將給予針對 Linux 的說明。 對於 Windows,請參閱我們的
- 使用目前支援的 Python 版本建立並啟動虛擬環境:
virtualelnv env -p python3.7 source env/bin/activate
- 在虛擬環境中安裝 DeepPavlov:
pip install deeppavlov
使用 DeepPavlov 模型啟動 REST 伺服器
在我們首次使用 DeepPavlov 模型啟動伺服器之前,討論該程式庫架構的一些功能將會很有用。
DP 中的任何模型都包含:
- Python程式碼;
- 可下載元件 - 針對特定資料(嵌入、神經網路權重等)的序列化訓練結果;
- 設定檔(以下簡稱config),包含模型使用的類別、下載元件的URL、Python依賴等資訊。
我們將在接下來的文章中向您詳細介紹 DeepPavlov 的原理,目前我們知道這一點就足夠了:
- DeepPavlov 中的任何模型都透過其配置名稱來識別;
- 要運行該模型,您需要從 DeepPavlov 伺服器下載其元件;
- 此外,要運行模型,您需要安裝它使用的 Python 庫。
我們將推出的第一個模型將是多語言命名實體識別(NER)。 此模型根據文字單字所屬的命名實體的類型(專有名稱、地名、貨幣名稱等)對文字單字進行分類。 目前最新版本 NER 的配置名稱:
ner_ontonotes_bert_mult
我們使用以下模型啟動 REST 伺服器:
- 我們將其配置中指定的模型依賴項安裝到活動虛擬環境中:
python -m deeppavlov install ner_ontonotes_bert_mult
- 從 DeepPavlov 伺服器下載序列化模型元件:
python -m deeppavlov download ner_ontonotes_bert_mult
序列化的元件將下載到 DeepPavlov 主目錄,預設位於該目錄
~/.deeppavlov
下載時,已下載組件的雜湊值將與伺服器上組件的雜湊值進行檢查。 如果存在匹配,則跳過下載並使用現有文件。 下載組件的大小平均為 0.5 到 8 Gb,在某些情況下解壓縮後可達 20 Gb。
- 我們使用以下模型啟動 REST 伺服器:
python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
執行此命令的結果是,將在主機的連接埠 5005 上啟動具有模型的 REST 伺服器(預設連接埠為 5000)。
初始化模型後,可以在 URL 找到帶有 API 文件和測試能力的 Swagger http://127.0.0.1:5005
。 讓我們透過將模型傳送到端點來測試模型 http://127.0.0.1:5005/model
具有以下 JSON 內容的 POST 請求:
{
"x": [
"В МФТИ можно добраться на электричке с Савёловского Вокзала.",
"В юго-западной Руси стог жита оценен в 15 гривен"
]
}
作為回應,我們應該收到以下 JSON:
[
[
["В", "МФТИ", "можно", "добраться", "на", "электричке", "с", "Савёловского", "Вокзала", "."],
["O", "B-FAC", "O", "O", "O", "O", "O", "B-FAC", "I-FAC", "O"]
],
[
["В", "юго", "-", "западной", "Руси", "стог", "жита", "оценен", "в", "15", "гривен"],
["O", "B-LOC", "I-LOC", "I-LOC", "I-LOC", "O", "O", "O", "O", "B-MONEY", "I-MONEY"]
]
]
使用這些範例,我們將分析 DeepPavlov REST API。
API 深度巴甫洛夫
每個 DeepPavlov 模型至少有一個輸入參數。 在 REST API 中,參數是命名的,它們的名稱是傳入字典的鍵。 在大多數情況下,參數是需要處理的文字。 有關模型傳回的參數和值的更多資訊可以在文件的 MODELS 部分找到
在範例中,兩個字串的清單被傳遞給參數 x,每個字串都被賦予單獨的標記。 在 DeepPavlov 中,所有模型都將獨立處理的值清單(批次)作為輸入。
術語「批次」指的是機器學習領域,指的是由演算法或神經網路同時處理的一批獨立輸入值。 與單獨傳遞給輸入的相同值相比,這種方法可以減少(通常顯著)模型處理批次中的一個元素的時間。 但只有在處理完所有元素後才會發出處理結果。 因此,在產生傳入批次時,有必要考慮模型的速度及其每個單獨元素所需的處理時間。
如果 DeepPavlov 模型有多個參數,每個參數都會收到自己的一批值,並且在輸出時模型總是會產生一批答案。 傳出批次的元素是處理具有相同索引的傳入批次的元素的結果。
在上面的範例中,模型的結果是將每個字串分解為標記(單字和標點符號),並相對於它所代表的命名實體(組織名稱、貨幣)對標記進行分類。 目前型號 ner_ontonotes_bert_mult 能夠辨識18種命名實體,詳細說明可見
DeepPavlov 的其他開箱即用模型
除了 NER 之外,在撰寫本文時 DeepPavlov 中還提供以下開箱即用的模型:
文字問答
用該文本的片段回答該文本的問題。 型號配置: 小隊_ru_bert_infer
請求範例:
{
"context_raw": [
"DeepPavlov разрабатывается лабораторией МФТИ.",
"В юго-западной Руси стог жита оценен в 15 гривен."
],
"question_raw": [
"Кем разрабатывается DeepPavlov?",
"Сколько стоил стог жита на Руси?"
]
}
其結果是:
[
["лабораторией МФТИ", 27, 31042.484375],
["15 гривен", 39, 1049.598876953125]
]
侮辱檢測
檢測是否存在對文字物件的侮辱行為(在撰寫本文時 - 僅適用於英語)。 模型配置:insuls_kaggle_conv_bert
請求範例:
{
"x": [
"Money talks, bullshit walks.",
"You are not the brightest one."
]
}
其結果是:
[
["Not Insult"],
["Insult"]
]
情緒分析
文字情緒分類(正面、中性、負面)。 型號配置: rusentiment_elmo_twitter_cnn
請求範例:
{
"x": [
"Мне нравится библиотека DeepPavlov.",
"Я слышал о библиотеке DeepPavlov.",
"Меня бесят тролли и анонимусы."
]
}
其結果是:
[
["positive"],
["neutral"],
["negative"]
]
釋義檢測
判斷兩個不同的文本是否具有相同的意義。 型號配置: Stand_paraphraser_en
查詢:
{
"text_a": [
"Город погружается в сон, просыпается Мафия.",
"Президент США пригрозил расторжением договора с Германией."
],
"text_b": [
"Наступает ночь, все жители города пошли спать, а преступники проснулись.",
"Германия не собирается поддаваться угрозам со стороны США."
]
}
其結果是:
[
[1],
[0]
]
始終可以找到所有開箱即用的 DeepPavlov 模型的當前列表
結論
在本文中,我們熟悉了 DeepPavlov API 以及該程式庫開箱即用的一些文字處理功能。 應該記住,對於任何 NLP 任務,在與任務的主題領域(領域)相對應的資料集上訓練模型時,將會獲得最佳結果。 此外,原則上,更多的模型也不能針對所有情況進行訓練。
在接下來的文章中,我們將了解該庫的其他設置,從 Docker 啟動 DeepPavlov,然後我們將繼續訓練模型。 並且不要忘記 DeepPavlov 有
來源: www.habr.com