Начиная с версии 2.1, spaCy имеет языковую модель в стиле BERT (LM). Он предсказывает слова-векторы вместо слов, поэтому я буду использовать здесь «слова» и «слова-векторы» взаимозаменяемо.
Мне нужно взять предложение с замаскированным словом и список слов и ранжировать слова по вероятности их появления в замаскированном слоте. В настоящее время я использую для этого BERT (аналогично bert-синтаксис). Я хотел бы посмотреть, приемлема ли производительность spaCy в этой задаче. Между этот файл и Вот этот я почти уверен, что можно что-то построить. Тем не менее, мне кажется, что нужно проникнуть во внутренности библиотеки глубже, чем хотелось бы.
Есть ли простой способ взаимодействия с языковой моделью spaCy в маске?
В основном это недостаток приближения LMAO. На самом деле я не осознавал этого, пока кто-то не указал мне на это в сабреддите /r/machinelearning
.
Поскольку мы предсказываем вектор, мы действительно можем предсказать только одну точку в векторном пространстве. Это действительно отличается от предсказания распределения по словам. Представьте, что у нас есть пробел типа The __ of corn.
Допустим, хорошее распределение филлеров для этого будет {kernel, ear, piece}
. Векторы для этих слов не особенно близки, так как алгоритм word2vec
строит векторное пространство на основе всех контекстов слов, а слова взаимозаменяемы только в этом контексте. В подавляющем большинстве случаев использования piece
слово ear
было бы очень плохой заменой.
Если вероятные наполнители не расположены близко друг к другу в векторном пространстве, модель LMAO не сможет вернуть вам ответ, соответствующий этому набору слов.
Если вам нужен только 1-лучший ответ, алгоритм в spacy pretrain
имеет хорошие шансы дать его вам. Но если вам нужно распределение, аппроксимация не работает, и вы должны использовать что-то вроде BERT
.