SAF Vectorizers — это плагин для SmartApp Framework, который используется для векторизации текстов с помощью различных моделей:
- SBERT (SentenceBERT) — предобученная русскоязычная Open Source модель от SberDevices.
- USE (Universal Sentence Encoder) — предобученная мультиязыковая модель. Модель распространяется под лицензией Apache 2.0 и используется в оригинальном виде без изменений.
- Word2Vec — предобученная русскоязычная модель. Распространяется на условиях лицензии Creative Commons Attribution (CC-BY). Модель доступна на официальном сайте NLPL word embeddings repository и используется в оригинальном виде без изменений. Авторы модели — Language Technology Group at the University of Oslo.
- FastText — предобученная русскоязычная модель. Распространяется на условиях лицензии Creative Commons Attribution-Share-Alike License 3.0. Модель доступна на официальном сайте FastText и используется в оригинальном виде без изменений. Авторы модели:
@inproceedings{grave2018learning,
title={Learning Word Vectors for 157 Languages},
author={Grave, Edouard and Bojanowski, Piotr and Gupta, Prakhar and Joulin, Armand and Mikolov, Tomas},
booktitle={Proceedings of the International Conference on Language Resources and Evaluation (LREC 2018)},
year={2018}
}
Установка плагина
Перед установкой плагина скачайте предобученные модели векторизаторов с их официальных сайтов.
Скрипт на скачивание моделей по умолчанию запускается в setup.py
, но вы можете запустить его отдельно, чтобы видеть статус загрузки в логах. Выдайте скрипту права на исполнение и отключите VPN, если используете.
В качестве аргументов скрипт принимает названия моделей векторизаторов, которые вы хотите скачать. Чтобы скачать все модели, используйте аргумент all
. Чтобы скачать определенную модель, укажите ее название в аргументе: sbert
,use
, fasttext
или word2vec
. Если нужно скачать несколько моделей, укажите их названия через пробел: use fasttext
.
Команда запуска скрипта на скачивание моделей:
chmod u+r+x download_models.sh
./download_models.sh all
В saf_vectorizers появится директория static
, где будут храниться файлы моделей. Размер директории со всеми моделями — около 16 ГБ.
Установка плагина
- Активируйте env, где установлен smart_app_framework, или создайте новый.
- Перейдите в склонированный репозиторий
saf_vectorizers
в ветку main. - Запустите команду
pip install -e
.
Не рекомендуем устанавливать плагин через git, поскольку необходимо включение файлов из директории static
.
Проверьте, что установка завершена:
from core.text_preprocessing.preprocessing_result import TextPreprocessingResult
from saf_vectorizers import SBERTVectorizer
vectorizer=SBERTVectorizer()
test_text=TextPreprocessingResult({"original_text": "хочу узнать прогноз погоды на завтра в москве"})
res_vector=vectorizer.vectorize(test_text)
print(res_vector)
print(res_vector.shape)
Новые возможности плагина
Плагин предоставляет следующие сущности:
- class FastTextVectorizer
- class SBERTVectorizer
- class USEVectorizer
- class Word2VecVectorizer
Каждый из этих классов является векторизатором, который вы можете использовать при обучении классификационных моделей, а также во время инференса, чтобы модель на вход получала векторное представление текста.
Чтобы получить векторное представление текста, нужно вызвать метод vectorize
у векторизатора. Он принимает на вход объект TextPreprocessingResult
и возвращает вектор как массив numpy:
def vectorize(self, text_preprocessing_result: TextPreprocessingResult) -> np.ndarray:
Пример объекта TextPreprocessingResult
можно запросить, написав на developer@sberdevices.ru.
Подключение и использование плагина
Чтобы подключить плагин, добавьте его имя в переменную PLUGINS
в app_config
вашего смартаппа:
PLUGINS = ["saf_vectorizers", ... , "another_plugin"]
В конфигурации классификатора, модель которого должна принимать на вход векторизированную реплику, добавьте поле vectorizer
с одним из значений типа модели векторизации: sbert
, use
, fasttext
, word2vec
. Модель должна быть та же, что использовалась при обучение модели:
{
"type": "scikit",
"threshold": 0.7,
"path": "pretrained_model.pkl",
"intents": ["intent_1", "intent_2" ... "intent_n"],
"vectorizer": "sbert"
}