Я пытаюсь вставить примерно 60 миллионов фраз в векторное пространство , а затем вычислить косинусное сходство между ними. Я использовал sklearn CountVectorizer
с пользовательской функцией токенизатора, которая создает униграммы и биграммы. Оказывается, чтобы получить осмысленное представление, мне нужно учесть огромное количество столбцов, линейных по количеству строк. Это приводит к невероятно редким матрицам и убивает производительность. Это было бы не так плохо, если бы было всего около 10000 столбцов, что, я думаю, вполне разумно для встраивания слов.
Я думаю о том, чтобы попытаться использовать Google, word2vec
потому что я почти уверен, что он производит гораздо меньшие размеры и более плотные вложения. Но перед этим, есть ли какие-то другие вложения, которые могли бы сначала оправдать? Ключевым требованием будет возможность масштабировать около 60 миллионов фраз (строк).
Я довольно новичок в области встраивания слов, поэтому любой совет поможет.
Я также должен добавить, что я уже использую разложение по сингулярным числам для повышения производительности.
Ответы:
Недавно была проведена некоторая работа по динамическому назначению измерения word2vec (skip грамм) с использованием машин Больцмана. Проверьте эту статью:
«Бесконечное вложение слов» -Нальсник, Рави
Основная идея состоит в том, чтобы позволить вашему обучающему набору определять размерность вашей модели word2vec, которая наказывается термином регуляризации, связанным с размером измерения.
Вышеупомянутая статья делает это для слов, и мне было бы интересно посмотреть, насколько хорошо это работает с фразами.
источник