Вложение абзаца с помощью ELMo - PullRequest
0 голосов
/ 01 декабря 2018

Я пытаюсь понять, как подготовить абзацы для векторизации 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 Ответ

0 голосов
/ 01 декабря 2018

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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...