首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenNMT-py翻译中的对齐/注意

OpenNMT-py翻译中的对齐/注意
EN

Stack Overflow用户
提问于 2019-06-04 09:04:57
回答 2查看 585关注 0票数 0

在Opennmt中翻译时,有人知道如何获得对齐权吗?通常唯一的输出是得到的句子,我试图找到一个调试标志或类似的注意权重。到目前为止,我一直没有成功。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-04 09:15:47

您可以得到注意矩阵。请注意,它与对齐不一样,后者是统计(非神经)机器翻译中的一个术语。

github上的一个线程在讨论它。下面是讨论中的一个片段。当您从模式中得到翻译时,注意集中在attn字段。

代码语言:javascript
复制
import onmt
import onmt.io
import onmt.translate
import onmt.ModelConstructor
from collections import namedtuple

# Load the model.
Opt = namedtuple('Opt', ['model', 'data_type', 'reuse_copy_attn', "gpu"])

opt = Opt("PATH_TO_SAVED_MODEL", "text", False, 0)
fields, model, model_opt =  onmt.ModelConstructor.load_test_model(
    opt, {"reuse_copy_attn" : False})

# Test data
data = onmt.io.build_dataset(
    fields, "text", "PATH_TO_DATA", None, use_filter_pred=False)
data_iter = onmt.io.OrderedIterator(
    dataset=data, device=0,
    batch_size=1, train=False, sort=False,
    sort_within_batch=True, shuffle=False)

# Translator
translator = onmt.translate.Translator(
    model, fields, beam_size=5, n_best=1,
    global_scorer=None, cuda=True)

builder = onmt.translate.TranslationBuilder(
   data, translator.fields, 1, False, None)

batch = next(data_iter)
batch_data = translator.translate_batch(batch, data)
translations = builder.from_batch(batch_data)
translations[0].attn # <--- here are the attentions
票数 0
EN

Stack Overflow用户

发布于 2020-02-11 10:14:31

我不确定这是否是一个新特性,因为几个月前我在寻找对齐时没有遇到这种情况,但是onmt似乎添加了一个标志-report_align来输出单词对齐和翻译。

https://opennmt.net/OpenNMT-py/FAQ.html#raw-alignments-from-averaging-transformer-attention-heads

摘录自opennnmt.net -

目前,我们支持产生字对齐的同时,转换为基于变压器的模型。在调用-report_align时使用translate.py将输出法老格式的推断对齐。这些对齐是从第二到最后一解码器层的注意头的平均值上的argmax计算的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56440732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档