SAF Vectorizers - Плагин для SmartApp Framework, осуществляющий векторизацию (получение embedding'ов) текстов с помощью различных моделей:
-
SBERT (SentenceBERT) предобученная русскоязычная модель от SberDevices, которая доступна в open source (подробнее про нее можно почитать в статье на habr).
Одним из авторов модели является Александр Абрамов, к нему можно обращаться с вопросами и предложениями по модели SBERT. -
USE (Universal Sentence Encoder) предобученная мультиязыковая модель (подробности про модель можно найти на TensorFlow Hub). Модель распространяется под лицензией Apache-2.0 и используется в оригинальном виде, без каких-либо изменений.
-
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}
}
- Word2Vec предобученная русскоязычная модель, распространяется на условиях лицензии
Creative Commons Attribution (CC-BY).
Модель скачивается с официального сайта NLPL word embeddings repository и
используется в оригинальном виде, без каких-либо изменений.
Авторами модели являются Language Technology Group at the University of Oslo.
Названия типов моделей (используются как аргумент для скрипта на скачивание моделей, а также в конфигах
классификаторов в поле "vectorizer"): sbert
, use
, fasttext
, word2vec
Перед началом установки рекомендуется запустить скрипт на скачивание предобученных моделей векторизаторов (в репозитории их нет т.к все модели тяжелые), предварительно выдайте скрипту права на исполнение и отключите VPN (если используете).
В качестве аргументов скрипт принимает названия моделей векторизаторов,
которые вы хотите скачать и использовать. Если аргумент all
, то скачиваются все модели. Если, например, хотите
скачать и использовать только sbert, то замените all
на sbert
. Если нужны только use и fasttext, то вместо all
пропишите use fasttext
и т.д.
Но обратите внимание, что не обязательно запускать отдельно скрипт на скачивание моделей, т.к он по умолчанию уже
запускается в setup.py
. Если не хотите качать все модели, то зайдите в setup.py
и замените all
на другое значение.
Команда запуска скрипта на скачивание моделей:
chmod u+r+x download_models.sh
./download_models.sh all
У вас должна появиться директория static
в saf_vectorizers, там будут храниться файлы моделей,
финальный размер директории, если вы скачаете все модели, будет около 16 ГБ
.
Процесс скачивания моделей не быстрый и занимает какое-то время, в логах консоли можно увидеть какая именно модель сейчас скачивается.
Команда установки плагина:
pip install -e .
Рекомендуется устанавливать именно таким образом, а не через git т.к необходимо включение файлов
из директоии static
(см. файл MANIFEST.in), т.е активируете env, куда у вас уже установлен smart_app_framework, или
создаете новый env, затем переходите в склонированный репозиторий saf_vectorizers (main ветка) и запускаете
pip install -e .
Проверить, что все установилось успешно в ваш env можно так:
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
можно найти здесь:
https://github.com/sberdevices/saf_vectorizers/blob/main/saf_vectorizers/check_vectorizers.py
Чтобы подключить плагин, добавьте его имя в переменную PLUGINS
в app_config вашего смартаппа:
PLUGINS = ["saf_vectorizers"]
В конфигурации классификатора, модель которого должна принимать на вход уже векторизированную реплику,
следует добавить поле "vectorizer"
с одним из значений (sbert
, use
, fasttext
, word2vec
)
типа модели векторизации, та же что использовалась при обучение модели:
{
"type": "scikit",
"threshold": 0.7,
"path": "pretrained_model.pkl",
"intents": ["intent_1", "intent_2" ... "intent_n"],
"vectorizer": "sbert"
}
C вопросами и предложениями пишите нам по адресу developer@sberdevices.ru или вступайте в наш Telegram канал - SmartMarket Community.