Настройте встраивание слов в свой словарный запас
У меня есть словарный запас, связанный с ресторанным бизнесом на испанском языке, и я использую предопределенные встраивания слов на испанском языке с помощью FastText и Bert, однако я вижу, что есть много слов за пределами словарного запаса (oov), которые не распознаются предопределенными вложения слов. Кроме того, мой словарный запас очень ограничен, поэтому нет смысла тренировать встраивание слов только для этого с нуля. Есть ли какой-нибудь подход, который я мог бы использовать, чтобы расширить предопределенные встраивания слов, включив в них встраивания слов для большинства oov?
Спасибо
2 ответа
Я бы посоветовал получить достаточно обучающего текста, тесно связанного с вашей предметной областью, для обучения вашей собственной модели. Например, если вы можете получить/очистить достаточное количество обзоров ресторанов на испанском языке, кулинарных книг, обсуждений гурманов и т. д., так что у вас будет много упоминаний всех слов, важных для вашего конечного использования, вы, скорее всего, получите собственную доменно-ориентированную модель с очень хорошие векторы для важных терминов.
Я знаю, что вы думаете, что ваш словарный запас, представляющий интерес, слишком мал, но если в более общих предварительно обученных моделях действительно отсутствует «много» слов, лучший способ хорошо смоделировать эти слова — провести настоящее обучение с достаточным количеством слов. данные, чтобы модель могла выучить эти слова. А чтобы правильно разместить их по отношению к другим, более общим словам, обучение должно включать эти слова в реалистичный контекст с другими словами.
Использование FastText для такого индивидуального обучения корпуса может немного помочь со словами с длинным хвостом, которые похожи на известные слова (общие поддиапазоны с ними). Синтезированные векторы результирующей модели для неизвестных слов могут быть намного лучше, чем ничего, если они выходят за пределы Слова -vocab («OOV») представляют собой небольшие изменения по сравнению с родственными известными словами, например, альтернативные варианты написания/словоформ/опечатки. Но вам все равно нужно много разнообразных вариантов использования, специфичных для предметной области, чтобы действительно хорошо моделировать слова.
Если вам действительно нужны векторы слов, которые по координатам совместимы с некоторыми другими векторами замороженных на месте из других источников, это более сложная проблема. Но существуют способы «проецировать» (координировать-переводить) слова из одной модели в координатное пространство другой, предполагая, что каждая модель сама по себе довольно хороша, и существует большое количество общих слов, которые служат якорями / ориентирами для обучения. -а-преобразование.
Общая стратегия кратко описана в разделе 2.2 («Расширение словарного запаса») статьи Google «Векторы пропуска мысли» за 2015 год. В библиотеке Python Gensim есть класс
TranslationMatrix
И пример блокнота , который может помочь с такой координатной проекцией.
Но даже с помощью этого метода вы создадите свою собственную отдельную модель вектора слов, которая наверняка будет содержать множество примеров использования интересующих вас слов. Но затем вы должны координировать и переводить эти новые слова в более крупную предварительно обученную модель вектора слов, используя слова, которые появляются в обеих моделях, как «карту» туда, куда должны быть проецированы новые слова.
FastText может получать векторы даже для слов вне словарного запаса (OOV), суммируя векторы для составляющих его символограмм, при условии, что хотя бы одна из символограмм присутствовала в обучающих данных.
То же самое относится и к BERT, которые используют алгоритм BPE для токенизации.
Я не уверен в деталях вашей реализации, но была ли ваша модель внедрения обучена на достаточно большом корпусе испанского языка. Модель должна содержать символьные граммы и иметь возможность возвращать вложение для более конкретных слов.
Вы можете попробовать другую, возможно, более крупную модель внедрения.