我需要创建一个单词对、三元组等列表,以便在 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/