0

我正在尝试使用 Word2Vec 嵌入来衡量词性信息的影响,但没有获得预期的结果。

我希望 POS 包含 word2vec 嵌入在机器翻译任务中表现更好,但实际上表现更差。

我正在使用 Gensim 从同一个语料库中创建两组嵌入,一组是普通的 Word2Vec,另一组是我将标记更改为“[WORD]__[POS]”。

我通过在 Seq2Seq 机器翻译任务中使用嵌入来衡量性能差异。我正在使用 BLEU 评估这两种方法

这就是我使用 SpaCy 训练 word2vec + POS 嵌入的方式:

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 相同,或者比正常的 Word2Vec 嵌入低 0.01-0.02 分。

有谁知道为什么会发生这种情况?我的推理或期望是否存在差距?

4

1 回答 1

2

我也希望通过准确的词性信息来改进翻译——但我​​不知道其他人是否报告了这样的改进。关于为什么它可能不会的一些(不知情的)猜想:

  • 对于其中一种语言,POS 标记可能不是很准确,或者您的数据存在其他一些特定的异常挑战

  • 可能使用 internal 创建复合标记的方法在一些极端情况下会干扰评估 - 例如,如果原始语料库保留了其中__已经包含的任何标记__

  • 也许对于某些数据不足的情况,不同词性的同义词的碰撞实际上有助于加深模糊的意思到意思的翻译。(例如,可能考虑到 and 的语义相关性shop_NOUNshop_VERB最好有 100 个碰撞示例而shop不是每个 50 个。)

一些调试思路(除了明显的“仔细检查一切”):

  • 仔细查看那些普通与 POS 方法得分不同的测试用例;看看是否有任何模式——比如奇怪的标记/标点符号、非标准语法等——为__POS装饰物的伤害提供线索

  • 尝试其他语言对和其他(私人或公共)相关数据集,以查看 POS 标记是否在其他地方(或一般情况下)有帮助,并且您的特定数据集/语言对有一些额外的挑战

  • 考虑到令牌的乘法(通过将同形异义词拆分为特定于 POS 的变体)已经改变了模型大小和单词分布,其方式可能与其他限制(如min_countmax_vocab_size等)相互作用,从而修改训练。特别是,也许更大词汇量的 POS 模型应该获得更多的训练 epoch 或更大的词向量维度,以反映其更大的词汇量和更低的平均单词出现次数。

祝你好运!

于 2019-05-29T02:03:26.813 回答