Подготовка текста для моделирования в диалоговой структуре - PullRequest
0 голосов
/ 01 апреля 2020

Я работаю над реализацией DialogueGCN код из этой бумаги . Это модель, которая классифицирует «эмоции» из высказываний текста в разговоре. Поскольку эта модель учитывает контекст говорящего, структура данных очень важна. Это выглядит примерно так:

c = conversation (each conversation is independent of the other
u  = utterances (ex.
                 u1 = "Hey how are you?"
                 u2 = "good, thanks, and you?"
                 u3 = "confused, my dog is cooking pasta")
Utterances are of variable length and conversations have variable amounts of utterances. 
Each utterance has an 'emotion' label.


                               |    corpus    |
                              /        |       \
                             c1       c2       c3
                           / | \     / | \    / | \
                          u1 u2 u3 u1 u2 u3  u1 u2 u3

В статье используется CNN для создания элементов из текстовых данных. Модель CNN происходит от Ким (2014) . Есть несколько реализаций этого документа. Я использую эту реализацию Keras . Архитектура модели сводится к следующему:

### the model input is 1 utterance

z = Embedding(len(vocabulary_inv), embedding_dim, input_length=sequence_length, name="embedding")(model_input)
z = Dropout(dropout_prob[0])(z)

# Convolutional block
conv_blocks = []
filter_sizes = [2,4,5]
for sz in filter_sizes:
    conv = Convolution1D(filters=num_filters,
                         kernel_size=sz,
                         padding="valid",
                         activation="relu",
                         strides=1)(z)
    conv = MaxPooling1D(pool_size=2)(conv)
    conv = Flatten()(conv)
    conv_blocks.append(conv)
z = Concatenate()(conv_blocks) if len(conv_blocks) > 1 else conv_blocks[0]

z = Dropout(dropout_prob[1])(z)
z = Dense(hidden_dims, activation="relu")(z)

### the output of the dense layer is a tensor for the utterance

IIU C, каждое высказывание каждого разговора индивидуально вводится в этот CNN, и выводится 1 тензор на высказывание. Затем все высказывания за разговор объединяются. После обработки всего корпуса в результате получается список связанных тензоров. Это вводится в модель GCN.

Если вы все еще следуете за мной, у меня такой вопрос:

Я пытаюсь использовать модель GCN для прогнозирования новый набор диалогов. Диалоги структурированы в том же формате, но все еще находятся в текстовой (строковой) форме. Мне нужно векторизовать их, чтобы скормить их в модель генерации объектов CNN. В документе DialogueGCN не говорится, как это было сделано. Каков оптимальный способ векторизации строк, когда они структурированы в формате диалога, где слова в каждом высказывании зависят от разговора, но слова в разговорах независимы?

Другими словами, если я преобразовываю каждый уникальный слово в уникальное целое число, должен ли я обрабатывать весь корпус как один (используя одно и то же слово: целочисленное отображение для всех разговоров), или я должен обрабатывать каждый разговор отдельно (уникальное слово: отображение int для каждого конво), потому что они независимы друг от друга , Например, слово «бейсбол» может означать что-то различное в разговоре 1 и разговоре 2, в зависимости от контекста (предыдущие и будущие высказывания).

...