标签: machine-translation

用于统计机器翻译的短语提取算法

我用SMT的短语提取算法编写了以下代码.

GitHub上

# -*- coding: utf-8 -*-

def phrase_extraction(srctext, trgtext, alignment):
    """
    Phrase extraction algorithm. 
    """
    def extract(f_start, f_end, e_start, e_end):
        phrases = set()
        # return { } if f end == 0
        if f_end == 0:
            return
        # for all (e,f) ? A do
        for e,f in alignment:
            # return { } if e < e start or e > e end
            if e < e_start or e > e_end:        
                return

        fs = f_start
        # repeat-
        while True:
            fe …
Run Code Online (Sandbox Code Playgroud)

python algorithm nlp machine-learning machine-translation

7
推荐指数
1
解决办法
2782
查看次数

7
推荐指数
1
解决办法
746
查看次数

Python 中的高精度字对齐算法

我正在做一个项目,在句子和其他语言的翻译之间建立高精度的词对齐,以衡量翻译质量。我知道 Giza++ 和其他单词对齐工具被用作统计机器翻译管道的一部分,但这不是我要找的。我正在寻找一种算法,可以将源句子中的单词映射到目标句子中的相应单词,并且在考虑到这些限制的情况下透明而准确:

  • 两种语言的词序不一样,而且顺序不断变化
  • 源句中的某些词在目标句中没有对应的词,反之亦然
  • 有时源中的一个词对应目标中的多个词,反之亦然,可以多对多映射
  • 句子中可能存在多次使用同一个单词的句子,因此需要对单词及其索引进行对齐,而不仅仅是单词

这是我所做的:

  • 从句子对列表开始,比如英语-德语,每个句子都被标记为单词
  • 索引每个句子中的所有单词,并为每个单词创建倒排索引(例如,单词“world”出现在句子 #5、16、19、26 等中),源词和目标词
  • 现在这个倒排索引可以预测任何源词和任何目标词之间的相关性,作为两个词之间的交集除以它们的并集。例如,如果标记词“Welt”出现在句子 5, 16, 26,32 中, (world, Welt) 之间的相关性是交集 (3) 中的索引数除以并集 (3) 中的索引数( 5),因此相关系数为 0.6。使用联合会降低与高频词的相关性,例如“the”,以及其他语言中的相应词
  • 再次迭代所有句子对,并使用给定句子对的源词和目标词的索引来创建相关矩阵

这是英语和德语句子之间的相关矩阵的示例。我们可以看到上面讨论的挑战。

英语和德语句子对齐的例子,显示单词之间的相关性,绿色单元格是应该由单词对齐算法识别的正确对齐点

图中有一个英文和德文句子对齐的例子,展示了单词之间的相关性,绿色单元格是应该由单词对齐算法识别的正确对齐点。

这是我尝试过的一些内容:

  • 在某些情况下,预期的对齐可能只是在其各自的列和行中具有最高相关性的词对,但在许多情况下并非如此。
  • 我尝试过像 Dijkstra 算法这样的东西来绘制连接对齐点的路径,但它似乎不是这样工作的,因为由于词序,您似乎可以来回跳到句子中的较早单词,并且有是跳过没有对齐的单词的明智方法。
  • 我认为最佳解决方案将涉及诸如扩展矩形之类的事情,这些矩形从最可能的对应关系开始,跨越多对多的对应关系,并跳过没有对齐的单词,但我不确定什么是实现的好方法这个

这是我正在使用的代码:

import random
src_words=["I","know","this"]
trg_words=["Ich","kenne","das"]
def match_indexes(word1,word2):
    return random.random() #adjust this to get the actual correlation value

all_pairs_vals=[] #list for all the source (src) and taget (trg) indexes and the corresponding correlation values
for i in range(len(src_words)): #iterate over src  indexes
    src_word=src_words[i] #identify the correponding …
Run Code Online (Sandbox Code Playgroud)

python machine-translation

7
推荐指数
2
解决办法
1898
查看次数

如何减少 Transformer 的 Helsinki-NLP/opus-mt-es-en(翻译模型)的推理时间

目前 Helsinki-NLP/opus-mt-es-en 模型从 Transformer 进行推理大约需要 1.5 秒。怎样才能减少呢?此外,当尝试将其转换为 onxx 运行时时出现此错误:

ValueError:无法识别此类 AutoModel 的配置类 <class 'transformers.models.marian.configuration_marian.MarianConfig'>:AutoModel。模型类型应为 RetriBertConfig、MT5Config、T5Config、DistilBertConfig、AlbertConfig、CamembertConfig、XLMRobertaConfig、BartConfig、LongformerConfig、RobertaConfig、LayoutLMConfig、SqueezeBertConfig、BertConfig、OpenAIGPTConfig、GPT2Config、MobileBertConfig、TransfoXLConfig、XLNetConfig、FlaubertConfig、FSMTConfig、XLMConfig、CTRLConfig 之一, ElectraConfig、ReformerConfig、FunnelConfig、LxmertConfig、BertGenerationConfig、DebertaConfig、DPRConfig、XLMProphetNetConfig、ProphetNetConfig、MPNetConfig、TapasConfig。

是否可以将其转换为 onxx 运行时?

machine-translation pytorch huggingface-transformers

7
推荐指数
1
解决办法
3087
查看次数

MarianMT 和 OpusMT 有什么区别?

我目前正在比较各种预训练的 NMT 模型,不禁想知道 MarianMT 和 OpusMT 之间有什么区别。根据 OpusMT 的Github,它是基于 MarianMT 的。然而,在Huggingface Transformer 实现中,所有预训练的 MarianMT 模型均以“Helsinki-NLP/opus-mt”开头。所以我认为它们是相同的,但即使它们的大小大致相同,它们也会产生不同的翻译结果。

如果有人可以阐明其中的差异,我将非常感激。

machine-translation huggingface-transformers

7
推荐指数
1
解决办法
2761
查看次数

日语数字到阿拉伯数字转换器在Python中

Python中是否有一个开源库,可以将汉字数字转换为阿拉伯数字?

输入:10?2?9 ??
产量:1,029,000,000

输入:1?
6,717 ?2,600 输出:167,172,600

输入:3,139 ??
产量:3,139,000,000

日语数字系统:http : //en.wikipedia.org/wiki/Japanese_numerals

网络转换器:http//www.sljfaq.org/cgi/kanjinumbers.cgi

python translation machine-translation

6
推荐指数
1
解决办法
1436
查看次数

网站翻译

我用2种语言开发了一个网站.

一个选择是我们可以做自己的翻译,但这可能需要更多的开发时间.

所以我想找一个插件.

我尝试了Microsoft Translator Widget谷歌翻译小工具, 但两者都不适用于完整的网站.用户必须在网站的每个页面上选择他们的语言.任何其他插件都可以翻译整个网站.我读了很多线程,比如 link1 link2.注意到了帮助我.

请建议.

html php internationalization machine-translation web

6
推荐指数
1
解决办法
953
查看次数

典型的C++编译器处理什么工作?

在研究了编译器及其工作原理后,我了解到该过程通常分为4个步骤:预处理器,编译器,汇编器和链接器.我设想这些步骤的方式是每个人都有自己独立的程序; 预处理程序,编译程序,汇编程序和链接程序.但是,您了解到有时创建汇编代码和生成目标文件的过程全部由编译器程序处理,有时则不处理.它似乎很大程度上取决于所使用的上下文和编程语言.我的问题是,如何将C++源代码转换为机器代码的典型翻译过程如何?

  1. 预处理器是否与编译器分开?或者该过程通常是编译器程序的一部分?
  2. 编译器通常负责什么?生成汇编代码然后转换为机器代码?
  3. 链接器是否是在编译器完成后运行的独立程序?

旁注:我的问题与其他C++编译器线程不同,因为我不仅询问编译器如何工作,而且如果某些其他进程(如链接)存在自己的可执行程序,或者它们通常内置于编译器程序中.

c++ compiler-construction linker machine-translation

6
推荐指数
1
解决办法
170
查看次数

RNN 中的隐藏大小与输入大小

前提1:

关于 RNN 层中的神经元 - 我的理解是“在每个时间步长,每个神经元都接收输入向量 x (t) 和来自前一个时间步长 y (t –1) 的输出向量” [1]

https://github.com/ebolotin6/ebolotin6.github.io/blob/master/images/rnn.png

前提2:

也是我的理解,在Pytorch的GRU层中,input_sizehidden_​​size的含义如下:

  • input_size – 输入 x 中预期特征的数量
  • hidden_​​size – 隐藏状态中的特征数 h

所以很自然地,hidden_​​size应该代表 GRU 层中的神经元数量。

我的问题:

给定以下 GRU 层:

# assume that hidden_size = 3

class Encoder(nn.Module):
    def __init__(self, src_dictionary_size, hidden_size):
        super(Encoder, self).__init__()
        self.embedding = nn.Embedding(src_dictionary_size, hidden_size)
        self.gru = nn.GRU(input_size = hidden_size, hidden_size = hidden_size)

Run Code Online (Sandbox Code Playgroud)

假设 hidden_​​size 为 3,我的理解是上面的 GRU 层将有 3 个神经元,每个神经元在每个时间步同时接受一个大小为 3 的输入向量。

我的问题是:为什么hidden_​​sizeinput_size …

python machine-translation deep-learning recurrent-neural-network pytorch

6
推荐指数
1
解决办法
4536
查看次数

对于以词嵌入作为输出的模型,SHAP 的特征贡献是如何计算的?

在数值回归任务的典型 Shapley 值估计中,有一种明确的方法可以计算输入特征 i 对最终数值输出变量的边际贡献。对于输入特征(age=45,location=\xe2\x80\x99NY\xe2\x80\x99,sector=\xe2\x80\x99CS\xe2\x80\x99),我们的模型可能给出70k的预测工资,并且当该位置被删除时,预计薪资可能为 45k。因此,该特定联盟中特征位置的边际贡献为 70-45=25k。

\n

根据我的理解,如果不存在任何功能\xe2\x80\x99s,则基值将是预测工资,并且将基值和所有功能贡献相加将得到模型\xe2\x80\x99s给定实例的实际工资预测。

\n

将其扩展到分类
\n假设我们将上述问题转换为分类问题,其中使用相同的特征,并且模型输出可以解释为该人做出> 50k的概率。在此示例中,对 p(>50k) 的影响将是测量的内容,而不是对工资本身的影响。如果我正确地遵循了这一点,那么我的 Shapley 值就可以解释为概率。

\n

扩展到词嵌入
\n从 SHAP 文档中,我们可以看到 SHAP 解释器可以计算 Seq2Seq NMT 问题的特征贡献。\n就我而言,我正在使用 Marian NMT 库处理神经机器翻译问题。这是一个序列到序列的问题,其中字符串输入被编码为词嵌入,并从此类词嵌入解码输出。我的问题涉及这种功能贡献的逻辑如何在理论和实践中扩展到这样的问题。我发现SHAP 分区解释器为我提供了 NMT 任务的可靠特征归因,但我不明白为什么

\n

更简洁地说:
\n对于通常输出单词嵌入列表的模型,如何使用 SHAP 库计算特征贡献?

\n

简要示例
\n为了查看我提到的 SHAP 值,请运行以下 MRE。

\n
import shap\nfrom transformers import MarianMTModel, MarianTokenizer\n\nclass NMTModel:\n    def __init__(self, source, target):\n        model_name = "Helsinki-NLP/opus-mt-{}-{}".format(source, target)\n\n        #The tokenizer converts the text to a more NN-suitable\n        #format, as it cannot …
Run Code Online (Sandbox Code Playgroud)

python neural-network machine-translation shap

6
推荐指数
0
解决办法
843
查看次数