Вложение абзаца с помощью ELMo

Я пытаюсь понять, как подготовить абзацы для векторизации ELMo.

Документы показывают только, как встраивать несколько предложений / слов одновременно.

например.

sentences = [["the", "cat", "is", "on", "the", "mat"],
         ["dogs", "are", "in", "the", "fog", ""]]
elmo(
     inputs={
          "tokens": sentences,
          "sequence_len": [6, 5]
            },
     signature="tokens",
     as_dict=True
    )["elmo"]

Как я понимаю, это вернет 2 вектора, каждый из которых представляет данное предложение. Как мне подготовить входные данные для векторизации целого абзаца, содержащего несколько предложений. Обратите внимание, что я хотел бы использовать свою собственную предварительную обработку.

Можно ли это сделать так?

sentences = [["<s>" "the", "cat", "is", "on", "the", "mat", ".", "</s>", 
              "<s>", "dogs", "are", "in", "the", "fog", ".", "</s>"]]

или может быть так?

sentences = [["the", "cat", "is", "on", "the", "mat", ".", 
              "dogs", "are", "in", "the", "fog", "."]]

1 ответ

ELMo создает контекстные векторы слов. Таким образом, вектор слова, соответствующий слову, является функцией слова и контекста, например, предложения, в котором он появляется.

Как и ваш пример из документации, вы хотите, чтобы ваш абзац представлял собой список предложений, представляющих собой списки токенов. Итак, ваш второй пример. Чтобы получить этот формат, вы можете использовать spacy токенизатор

import spacy

# you need to install the language model first. See spacy docs.
nlp = spacy.load('en_core_web_sm')

text = "The cat is on the mat. Dogs are in the fog."
toks = nlp(text)
sentences = [[w.text for w in s] for s in toks.sents]

Я не думаю, что вам нужно дополнительное заполнение "" во втором предложении как sequence_len заботится об этом.

Обновление:

Как я понимаю, это вернет 2 вектора, каждый из которых представляет данное предложение

Нет, это вернет вектор для каждого слова, в каждом предложении. Если вы хотите, чтобы весь абзац был контекстом (для каждого слова), просто измените его на

sentences = [["the", "cat", "is", "on", "the", "mat", "dogs", "are", "in", "the", "fog"]]

а также

...
"sequence_len": [11]
Другие вопросы по тегам