Двухмодельная архитектура NER: WikiNEuRal для имён, ruBERT для адресов
- WikiNEuRal размечает имена (PER), не распознаёт известных личностей - ruBERT размечает адреса (страна, регион, город, улица, дом) - Повышена полнота FIO до 1.000: полные имена клиентов маскируются целиком - Новый набор benchmark-two-model.txt и тесты TwoModelBenchmarkTest, TwoModelCascadeTest
This commit is contained in:
+36
-16
@@ -1,25 +1,45 @@
|
||||
#!/usr/bin/env bash
|
||||
# Загрузка модели распознавания для второй ступени.
|
||||
# Загрузка моделей распознавания для второй ступени.
|
||||
#
|
||||
# Модель — BERT (onnx-community/bert-base-NER-Russian-ONNX, лицензия MIT): размечает
|
||||
# имена и составляющие адреса вплоть до региона и района. Около 170 МБ, в репозиторий
|
||||
# не кладётся.
|
||||
# Используются две модели под разные задачи:
|
||||
# - WikiNEuRal (Babelscape/wikineural-multilingual-ner, CC BY-NC-SA 4.0) — имена.
|
||||
# Многоязычный NER на базе mBERT, обучен на 9 языках, включая русский. Не
|
||||
# распознаёт известных личностей («Лев Толстой»), поэтому справочник имён
|
||||
# не нужен. ONNX-версия около 700 МБ.
|
||||
# - ruBERT (onnx-community/bert-base-NER-Russian-ONNX, MIT) — адреса. Размечает
|
||||
# страну, регион, район, город, улицу и дом отдельно. Около 170 МБ.
|
||||
#
|
||||
# Модели в репозиторий не кладутся.
|
||||
#
|
||||
# ./tools/fetch-ner-model.sh
|
||||
set -euo pipefail
|
||||
cd "$(dirname "$0")/.."
|
||||
|
||||
BASE=https://huggingface.co/onnx-community/bert-base-NER-Russian-ONNX/resolve/main
|
||||
DIR=models/rubert-ner
|
||||
mkdir -p "$DIR"
|
||||
fetch() {
|
||||
local base="$1" dir="$2" model="$3"; shift 3
|
||||
mkdir -p "$dir"
|
||||
echo "Загрузка модели в $dir"
|
||||
curl -sSL --progress-bar -o "$dir/$model" "$base/$model"
|
||||
for f in "$@"; do
|
||||
curl -sSL -o "$dir/$f" "$base/$f"
|
||||
done
|
||||
echo
|
||||
ls -lh "$dir"
|
||||
echo
|
||||
}
|
||||
|
||||
echo "Загрузка модели в $DIR (около 170 МБ)"
|
||||
curl -sSL --progress-bar -o "$DIR/model_int8.onnx" "$BASE/onnx/model_int8.onnx"
|
||||
for f in vocab.txt config.json tokenizer.json tokenizer_config.json; do
|
||||
curl -sSL -o "$DIR/$f" "$BASE/$f"
|
||||
done
|
||||
fetch "https://huggingface.co/rhnfzl/wikineural-multilingual-ner-onnx/resolve/main" \
|
||||
models/wikineural-ner model.onnx \
|
||||
config.json tokenizer.json tokenizer_config.json special_tokens_map.json
|
||||
|
||||
echo
|
||||
ls -lh "$DIR"
|
||||
echo
|
||||
echo "Готово. Включить: pdguard.ner.engine=rubert, pdguard.ner.model=$DIR"
|
||||
fetch "https://huggingface.co/onnx-community/bert-base-NER-Russian-ONNX/resolve/main" \
|
||||
models/rubert-ner onnx/model_int8.onnx \
|
||||
vocab.txt config.json tokenizer.json tokenizer_config.json
|
||||
|
||||
# ruBERT кладёт модель в подкаталог onnx/; приведём к ожидаемому имени.
|
||||
mv -f models/rubert-ner/onnx/model_int8.onnx models/rubert-ner/model.onnx 2>/dev/null || true
|
||||
rmdir models/rubert-ner/onnx 2>/dev/null || true
|
||||
|
||||
echo "Готово. Включить:"
|
||||
echo " pdguard.ner.name-engine=wikineural, pdguard.ner.name-model=models/wikineural-ner"
|
||||
echo " pdguard.ner.address-engine=rubert, pdguard.ner.address-model=models/rubert-ner"
|
||||
Reference in New Issue
Block a user