Я использую языковую модель ELMo - https://allennlp.org/elmo для представления моих текстовых данных в виде числового вектора. Этот вектор будет использоваться в качестве обучающих данных для простой задачи анализа настроений.
В этом случае данные не на английском языке, поэтому я скачал пользовательскую модель ELMo из - https://github.com/HIT-SCIR/ELMoForManyLangs (я предполагаю, что это поведение аналогично официальному репозиторию allennlp)
Чтобы преобразовать текстовый документ в ELMo, встраивая функцию sents2elmo
. Аргумент - это список токенизированных предложений, если я правильно понял документацию.
Таким образом, одна выборка в моих тренировочных данных может быть включена следующим образом:
from elmoformanylangs import Embedder
embedder = Embedder('custom_language')
embeddings = embedder.sents2elmo([['hello', 'world', 'how', 'are', 'you', '?'],
['am', 'great', 'thanks', '!']])
Это вернет список из двух пустых массивов, по одному для каждого предложения, и каждый токен в предложении будет представлен как один вектор размером 1024. И так как параметр по умолчанию sents2elmo(output_layer)
равен -1, этот вектор представляет среднее значение 3 внутренних слоев в языковой модели.
Как вложения могут быть представлены в виде одномерного массива? Должен ли я просто усреднить все векторы слов для одного предложения. А затем усреднить все векторы предложений?
sentence_1 = np.mean(embeddings[0], axis=0)
sentence_2 = np.mean(embeddings[1], axis=0)
document = np.mean([sentence_1, sentence_2], axis=0)
Этот подход уничтожает какую-либо информацию? Если да, есть ли другие способы сделать это?
Спасибо!