Word2Vec с POS не дает ожидаемых результатов? - PullRequest
0 голосов
/ 26 мая 2019

Я пытаюсь оценить влияние части речевой информации на вложения Word2Vec, но не получаю ожидаемых результатов.

Я ожидал, что POS включит вложения word2vec для более эффективной работы в задаче машинного перевода, но на самом деле это хуже.

Я создаю два набора встраивания одного и того же корпуса с использованием Gensim, один из них - обычный Word2Vec, другой - я изменяю токены на "[WORD] __ [POS]".

Я измеряю различия в производительности, используя вложения в задачу машинного перевода Seq2Seq. Я оцениваю два подхода с BLEU

Вот как я тренирую вложения Word2vec + POS с SpaCy:

sentences = []
    for sent in doc.sents:
        tokens = []
        for t in sent:
            tokens += ["{}__{}".format(t.text, t.pos_)]
        sentences += tokens
    pos_train += [sentences]

Это моя эталонная модель машинного перевода с Keras + Tensorflow:

encoder_inputs = Input(shape=(None, num_encoder_tokens))
encoder = LSTM(LATENT_DIM, return_state=True)
_, state_h, state_c = encoder(encoder_inputs)
encoder_states = [state_h, state_c]

decoder_inputs = Input(shape=(None, num_decoder_tokens))
decoder_lstm = LSTM(LATENT_DIM, return_sequences=True, return_state=True)
decoder_outputs, _, _ = decoder_lstm(decoder_inputs, initial_state=encoder_states)
decoder_dense = Dense(num_decoder_tokens, activation='softmax')
decoder_outputs = decoder_dense(decoder_outputs)

model = Model([encoder_inputs, decoder_inputs], decoder_outputs)

При использовании BLEU подход Word2Vec + POS неизменно получает те же результаты, что и Word2Vec, или на 0,01-0,02 балла ниже нормальных вложений Word2Vec.

Кто-нибудь знает, почему это может происходить? Есть ли пробел в моих рассуждениях или ожиданиях?

1 Ответ

1 голос
/ 29 мая 2019

Я бы также ожидал, что точная информация о части речи улучшит перевод, но я не знаю, сообщали ли другие о таком улучшении. Некоторые (неосведомленные) домыслы относительно того, почему это не может:

  • возможно, пометка POS не очень точна в отношении одного из языков, или есть некоторые другие аномальные проблемы, характерные для ваших данных

  • возможно, метод создания составных токенов с внутренним __ в некоторых угловых случаях мешает оценке - например, если в исходном корпусе сохраняются какие-либо токены, в которых уже было __

  • может быть, для определенных случаев недостаточности данных, столкновение гомографов с одинаковым значением различных частей речи на самом деле помогает сгущать неясный перевод значения в значение. (Например, возможно, учитывая семантическую взаимосвязь shop_NOUN и shop_VERB, лучше иметь 100 встречных примеров shop, чем 50 каждого.)

Некоторые идеи отладки (в дополнение к очевидному «перепроверьте все»):

  • внимательно посмотрите на те тестовые случаи, в которых подходы plain-vs-POS различаются по своей оценке; посмотрите, есть ли какие-либо паттерны - например, странные жетоны / знаки препинания, нестандартная грамматика и т. д. - дающие подсказки о том, где болят __POS украшения

  • попробуйте другие языковые пары и другие (частные или общедоступные) наборы данных для согласования, чтобы увидеть, помогает ли POS-тегирование в других местах (или вообще), и есть ли что-то более сложное в вашем конкретном наборе данных / language- пара

  • Учтите, что умножение токенов (путем разделения гомографий на POS-специфичные варианты) изменило размер модели и распределение слов таким образом, чтобы это могло взаимодействовать с другими ограничениями (например, min_count, * 1038). * и т. д.) способами, которые модифицируют обучение. В частности, возможно, POS-модель с большим словарным запасом должна получить больше тренировочных эпох или большую размерность слова-вектора, чтобы отражать ее больший словарный запас с меньшим средним числом вхождений слов.

Удачи!

...