Что такое fastText?

fastText - это библиотека для эффективного изучения представлений слов и классификации предложений.

На простом английском языке, используя fastText, вы можете создавать собственные вложения слов с помощью Skipgram, word2vec или CBOW (Continuous Bag of Words) и использовать их для классификации текста.

Facebook опубликовал предварительно обученные векторы слов, почему это важно?

Причина, по которой я пишу этот пост, - с легкостью использовать слово векторы, для этого есть много ресурсов, но вы должны знать все мельчайшие детали, чтобы работать самостоятельно. Но я сосредоточусь только на том, как использовать векторы для чего-то полезного и интересного.

Изучение представления слов требует серьезных вычислительных мощностей и времени. Поскольку Facebook сделал это за вас, почему бы не использовать это для повышения производительности?

Сначала загрузите слово векторы

Здесь вы можете найти все заранее подготовленные словесные векторы для 90 языков. Загрузите тот, который вам нужен.

О векторах

Каждый вектор слов имеет 300 размер, а количество лексем или слов в векторном файле варьируется от языка к языку. На английском доступно 2519370 токена.

Почему не пакет python fasttext?

Да, я знаю, есть пакет Python под названием fasttext, который представляет интерфейс высокого уровня для использования векторных файлов вместе с некоторыми другими функциями fastText. Но работать с этим пакетом в моем случае я не нашел никакого удобства.

Раньше я работал с gensim и считаю его очень простым в использовании. Кроме того, это быстрая библиотека обработки естественного языка, которая включает в себя множество современных функций НЛП.

Хватит разговоров, перейдем к делу.

Установка зависимостей

Я использую Python 2.7 with Anaconda x64 в Ubuntu, но совершенно уверен, что следующие коды будут работать и на Python 3.

  • Python
  • Gensim версия 1.0.0
  • scikit-learn

Установить Gensim

Откройте командное окно или терминал и введите следующую команду

pip install -U gensim

Проверить версию

Я использую 1.0.0

from __future__ import print_function
import gensim
print(gensim.__version__)

Установить Scikit-learn

Я использую sklearn 0.18.1. Я буду использовать sklearn для построения диаграммы разброса t-SNE для встраивания слов.

pip install -U sklearn

Структура проекта

Я собираюсь поддерживать следующую структуру проекта на протяжении всего процесса.

FastTextModelLoader
        |
        |------------ wiki.en/
        |                 |---- wiki.en.bin
        |                 |---- wiki.en.vec
        |
        |------------ vector_test.py
        |
        |------------ plot_tsne.py

Я загрузил векторы английского слова и извлек их в папку проекта. Есть два файла, я воспользуюсь файлом .vec.

Загрузка векторного файла и применение векторных операций

vector_test.py

Здесь я собираюсь загрузить векторный файл и применить некоторые векторные операции. Вы можете найти все доступные функции в документации gensim.

Я думаю, что код довольно прост.

Построение t-SNE (t-распределенное стохастическое соседнее вложение)

Короче говоря, это алгоритм уменьшения размерности, который используется для визуализации данных большой размерности, например векторов слов. Вы не можете нанести 300 размерные данные на X-Y плоскость, для этого нужно уменьшить размеры. К счастью, t-SNE служит этой цели.

Я не буду вдаваться в подробности, я добавил ссылки. Вы должны проверить это, чтобы узнать больше.

plot_tsne.py

Я ограничил визуализацию только 500 словами. Вы можете изменить этот параметр для просмотра большего или меньшего количества слов.

График разброса

(Щелкните здесь, чтобы просмотреть в высоком разрешении)

Репозиторий кода

Коды можно найти здесь. Для запуска кода необходимо загрузить векторные файлы .

Ссылка: