40 lines
1.9 KiB
Bash
Executable File
40 lines
1.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Обучение модели для второй ступени распознавания имён.
|
|
#
|
|
# Модель в репозиторий не кладётся: она весит мегабайты и собирается из открытых
|
|
# корпусов за несколько минут. Без модели сервис работает на одних правилах.
|
|
#
|
|
# ./tools/train-ner.sh # быстрый вариант, только factRuEval
|
|
# ./tools/train-ner.sh full # плюс префикс Nerus, качество заметно выше
|
|
set -euo pipefail
|
|
cd "$(dirname "$0")/.."
|
|
|
|
MODE="${1:-quick}"
|
|
WORK="$(mktemp -d)"
|
|
trap 'rm -rf "$WORK"' EXIT
|
|
|
|
echo "1. factRuEval-2016 — ручная разметка, 1965 предложений"
|
|
curl -sSL -o "$WORK/fre.tar.gz" \
|
|
https://codeload.github.com/dialogue-evaluation/factRuEval-2016/tar.gz/refs/heads/master
|
|
tar xzf "$WORK/fre.tar.gz" -C "$WORK"
|
|
python3 tools/factrueval-to-opennlp.py "$WORK/factRuEval-2016-master" "$WORK/train.txt"
|
|
|
|
if [ "$MODE" = "full" ]; then
|
|
echo "2. Nerus — автоматическая разметка, берём префикс потоком (400 тыс. предложений)"
|
|
curl -sS -r 0-400000000 \
|
|
https://storage.yandexcloud.net/natasha-nerus/data/nerus_lenta.conllu.gz \
|
|
| gunzip 2>/dev/null \
|
|
| python3 tools/conllu-to-opennlp.py 400000 >> "$WORK/train.txt"
|
|
fi
|
|
|
|
echo "3. Обучение, несколько минут"
|
|
mvn -q -B test-compile
|
|
mvn -q -B dependency:build-classpath -Dmdep.outputFile="$WORK/cp.txt"
|
|
mkdir -p models
|
|
java -Xmx6g -Dner.iterations=100 -Dner.cutoff=5 \
|
|
-cp "target/test-classes:target/classes:$(cat "$WORK/cp.txt")" \
|
|
ru.pdguard.tools.NerTrainer "$WORK/train.txt" models/ru-ner-person.bin
|
|
|
|
echo
|
|
echo "Готово. Включить: pdguard.ner.model=models/ru-ner-person.bin"
|