В задачах, связанных с искусственным интеллектом, данные могут быть:
Структурированные данные - это данные, которые можно представить в виде списка (множества) векторов. Неструктурированные данные требуется привести к виду, в котором они могут быть представлены в виде списка векторов.
Каждый элемент вектора, который характеризует объект данных, называется признаком. В виду этого процесс векторизации является процессом извлечения признаков.
Для решения задач NLP после предварительной обработки текстовых данных (которая направлена главным образом на уменьшение размеров словаря) необходимо извлечь признаки (привести тексты к векторному виду).
В NLP на уровне данных применяется следующая терминология:
Основная особенность: реализуются без использования алгоритмов машинного обучения
Простейший способ кодирования текстов, основанный на методике one-hot кодирования слов. Векторное представление текста в BoW вычисляется как сумма one-hot векторов входящих в него слов.
Очевидные недостатки:
Является модификацией BoW. Формально tfi-df (t, d, D) - это мера важности слова t для документа d в корпусе D.
TF (Term Frequency) вычисляется следующим образом:
IDF (Inverse Document Frequency) считается следующим образом:
Попробуем посчитать TF-IDF:
TF-IDF позволяет получать достаточно качественные эмбеддинги, которые можно применять на практике. Однако векторы все еще крайне разряжены.
Методы рассмотренные выше позволяли нам получать векторные представления документов, а не отдельных слов. Далее мы рассмотрим методы, которые предназначены для получения эмбеддингов слов. Для получения векторного представления документа достаточно усреднить векторные представления входящих в него слов.
Основная идея: если два слова часто употребляются в одинаковом контексте, значит эти слова близки по смыслу
Строки полученной матрицы совпадений являются векторными представлениями слов, однако как мы понимаем, такие эмбеддинги все еще разряжены. Мы можем использовать известный вам PCA для уменьшения размерности этой матрицы.
Вы можете сохранить ваши эмбеддинги в формат tsv и визуализировать их с помощью инструмента Projector от авторов TensorFlow. Аналогичный инструмент входит в состав TensorBoard.
np.savetxt('embeddings.tsv', pca.fit_transform(context_matrix), delimiter='\t')
Дополнительно вы можете загрузить в Projector список всех слов и тогда получите визуализацию в трехмерном пространстве вашего векторного пространства. Обращаю внимание, что визуализация может получиться не репрезентативной.
Также вам может пригодиться самый эстетичный вариант по замене пар <ключ, значение> на <значение, ключ> в Python
lookup = {value: key for key, value in vocab.items()}
Векторные представления можно получать не только на основе статистических данных о коллекции текстовых документов. Их можно обучать! Подход Word2Vec предлагает 2 способа получения векторных представлений с использованием глубокого обучения (нейронных сетей).
Для получения векторного представления слова в обоих случаях необходимо умножить one-hot вектор этого слова на матрицу W (эмбеддинг - результат вычисления на первом слое модели).
На практике при обучении CBoW берут по одному слову из контекста и предсказывают центральное слово. При обучении SkipGram берут центральное слово и предсказывают по одному слову из контекста.
В обоих случаях имеем задачу многоклассовой классификации. При решении данной задачи как правило применяется такая функция потерь, как категориальная перекрестная энтропия.
Изучите, как использовать эту функцию потерь в PyTorch (подсказка - там не нужно использовать softmax).
При выполнении ЛР можете использовать слой Embedding в PyTorch. В этом случае вместо one-hot векторов на вход подаются уникальные индексы слов в словаре.