首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >测量NER的f1分数

测量NER的f1分数
EN

Stack Overflow用户
提问于 2020-11-08 13:30:14
回答 1查看 3.3K关注 0票数 1

我正在尝试评估一个人工智能模型的NER (命名实体识别)。

为了与其他基准进行比较,我需要计算模型的F1分数。但是,我不知道如何编写代码。

我的想法是:

True-positives:相等的标记和相等的标记,标记为真正

False-negative:相等的标记和不相等的标记或标记没有出现在预测中,标记为假阴性。

False-positive:令牌不存在,但已分配给标记,例如:

短语:“这是一个测试” 预测:{token:这是,tag: WHO} 真对:{令牌:这个,标记:谁}{令牌:测试,标记:什么} 在这种情况下,{token: is,tag: WHO}被认为是WHO的假阳性。

守则:

代码语言:javascript
复制
       for val predicted tokens (pseudo-code) {   
       // val = struct { tokens, tags } from a phrase
           for (auto const &j : val.tags) {
                if (j.first == current_tokens) {
                    if (j.second == tag) {
                        true_positives[tag_id]++;
                    } else {
                        false_negatives[tag_id]++;
                    }
                    current_token_exists = true;
                }
                
            }
            if (!current_token_exists) {
                false_positives[tag_id]++;
            }
        }

        for (auto const &i : val.tags) {
            bool find = 0;
            for (auto const &j : listed_tokens) {
                if (i.first == j) {find = 1; break;}
            }
            if (!find) {
                false_negatives[str2tag_id[i.second]]++;
            }
        }

在此之后,计算F1:

代码语言:javascript
复制
    float precision_total, recall_total, f_1_total;
    precision_total = total_true_positives / (total_true_positives + total_false_positives);
    recall_total = total_true_positives / (total_true_positives + total_false_negatives);
    f_1_total = (2 * precision_total * recall_total) / (precision_total + recall_total);

不过,我相信我在某些概念上是错的。有人有意见吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-18 11:38:42

这不是一个完整的答案。看一看这里,我们可以看到有许多可能的方法来定义NER的F1分数。至少有6种可能的情况,TP、TN、FN和FP的一部分,因为标记可以对应多个令牌,因此我们可以考虑部分匹配。如果您看一看,有不同的方法来定义F1评分,例如,其中一些定义TP就像严格的正和部分正的加权平均值一样。CoNLL是NER最著名的基准之一,看起来它们使用了一个严格的召回和拆分定义,这足以定义F1评分:

精度是指学习系统发现的命名实体中正确的百分比。召回是指系统在语料库中发现的命名实体的百分比。只有在数据文件中的相应实体完全匹配时,命名实体才是正确的。

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

https://stackoverflow.com/questions/64738626

复制
相关文章

相似问题

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