SAF Vectorizers


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 ГБ.

Установка плагина

  1. Активируйте env, где установлен smart_app_framework, или создайте новый.
  2. Перейдите в склонированный репозиторий saf_vectorizers в ветку main.
  3. Запустите команду pip install -e.

Не рекомендуем устанавливать плагин через git, поскольку необходимо включение файлов из директории static (см. файл MANIFEST.in).

Проверьте, что установка завершена:

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.

Подключение и использование плагина

Чтобы подключить плагин, добавьте его имя в переменную 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"
}

Заметили ошибку?

Выделите текст и нажмите Ctrl + Enter, чтобы сообщить нам о ней