gpt4 book ai didi

java - 创建单词对、三元组等以在 Bleu 中进行评估

转载 作者:行者123 更新时间:2023-12-01 23:03:10 26 4
gpt4 key购买 nike

我需要创建一个单词对、三元组等列表,以便在 Bleu 指标中进行评估。 Bleu 从一元语法(单个单词)开始,一直到 N 元语法 - N 在运行时指定。

例如,给定句子“以色列官员负责机场安全”

对于一元语法,它只是一个单词列表。对于二元组来说,它是

Israeli officials
officials are
are responsible
responsible for
for airport
airport security

相关卦象是

Israeli officials are
officials are responsible
are responsible for
responsible for aiport
for airport security

我已经编写了一个可用的 Bleu,将 NGram 硬编码为 4,并强制计算一元语法等。它非常丑陋,而且,我需要能够在运行时提供 N。

尝试生成对/三元组等的代码片段 -

    String current = "";
int temp = 0;
for (int i = 0; i < goldWords.length - N_GRAM_ORDER; i++) {
current = current + ":" + goldWords[i];
while (temp < N_GRAM_ORDER) {
current = current + ":" + goldWords[temp + i];
temp++;
}
goldNGrams.add(current);
current = "";
temp = 0;
}
}

编辑 - 因此此代码段的输出应该适用于二元组 -

israeli:officials
officials:are
are:responsible
responsible:for
for:airport
airport:security

其中 goldWords 是一个字符串数组,其中包含要制作成 NGram 的各个单词。几天来我一直在修改这个循环,绘制关系等,但它对我来说并不合适。谁能看到我做错了什么吗?

最佳答案

我会改变这个:

String current = "";
int temp = 0;
for (int i = 0; i < goldWords.length - N_GRAM_ORDER; i++) {
current = current + ":" + goldWords[i];
while (temp < N_GRAM_ORDER) {
current = current + ":" + goldWords[temp + i];
temp++;
}
goldNGrams.add(current);
current = "";
temp = 0;
}
}

对此:

 String current = "";
for (int i = 0; i < goldWords.length(); i++){
for (int j = 0; j < N_GRAM_ORDER; j++){
if (i + j < goldWords.length())
current += ":" + goldWords[i + j];
}
goldNGrams.add(current);
current = "";
}

因此,外部 for 循环迭代要包含的第一个单词,内部循环迭代要包含的所有单词。需要注意的一件事是 if 语句用于防止数组越界错误。如果您只需要完整的 n 元语法,则应将其移至内部 for 循环之外。

使用 if 语句,您将得到:

Israeli:officials
officials:are
are:responsible
responsible:for
for:airport
airport:security
security

如果你愿意:

Israeli:officials
officials:are
are:responsible
responsible:for
for:airport
airport:security

相反,请尝试以下代码:

 String current = "";
for (int i = 0; i < goldWords.length(); i++){
if (i + N_GRAM_ORDER < goldWords.length()){
for (int j = 0; j < N_GRAM_ORDER; j++){
current += ":" + goldWords[i + j];
}
}
goldNGrams.add(current);
current = "";
}

(上面的代码是在没有针对编译器进行检查的情况下完成的,因此其中可能存在一个 Off By One 或较小的语法错误。验证它,但它会让您接近)。

关于java - 创建单词对、三元组等以在 Bleu 中进行评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23201896/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com