自然语言处理学习笔记(八)———— 准确率

news2025/7/15 10:48:23

目录

1.准确率定义

2.混淆矩阵与TP/FN/FP/TN

3. 精确率

4.召回率

5.F1值

6.中文分词的P、R、F1计算

7.实现


1.准确率定义

        准确率是用来衡量一个系统的准确程度的值,可以理解为一系列评测指标。当预测与答案的数量相等时,准确率指的是系统做出正确判断的次数除以总的测试次数。

        在中文分词任务中,一般使用在标准数据集上词语级别的精确率、召回率与F1值来衡量分词器的准确程度。这三个术语借用自信息检索与分类问题,常用来衡量搜索引擎和分类器的准确程度。

2.混淆矩阵与TP/FN/FP/TN

        搜索引擎、分类器、中文分词场景下的准确率本质上都是4个集合的并集运算。分类预测与答案的四种组合:

预测/答案PN
PTPFP
NFNTN

(1) TP (true postive) :预测是P ,答案果然是真的P
(2) FP (false postive) : 预测是P ,答案是N ,因此是假的P
(3) TN (true postive) : 预测是N ,答案果然是真的N
(4) FN (false postive) : 预测是N ,答案是P,因此是假的P

上表在机器学习中被称为混淆矩阵,用来衡量分类结果的混淆程度。混淆矩阵有如下性质:

只要混淆矩阵确定了,三个准确指标就都确定了。

3. 精确率

        精确率(precision ,简称P值) 指的是预测结果中正类数量占全部结果的比率。正类的选择非常重要。

4.召回率

        召回率(Recall)指的是正类样本中能被找出来的比率。

        区分P值和R值的时候,只需记住两者分子都是真阳的样本数,只不过P值的分母是预测阳性的数量,而R值的分母是答案阳性的数量。

5.F1值

        一般而言,精确率和召回率难以平衡,召回率高的系统往往精确率低,反之亦然。

精确率和召回率的调和平均F1的值来作为综合性指标:

6.中文分词的P、R、F1计算

        在中文分词中,标准答案和分词结果的单词数不一定相等。而且混淆矩阵针对的是分类问题,而中文分词却是一个分块(chunking)问题。

        将分块问题转换为分类问题。对于长为 n 的字符串,分词结果是一系列单词。每个单词按它在文本中的起止位置可记作区间【i,j】,其中1\leqslant i\leqslant j\leqslant n。那么所有标准答案的所有区间构成一个集合 A,称为正类。此集合之外的所有区间构成另一个集合(A的补集),作为负类。同理,记所有分词结果的区间构成集合B。则:

例如:

7.实现

import re
from pyhanlp import *
from tests.test_utility import ensure_data


def to_region(segmentation: str) -> list:
    """
    将分词结果转换为区间
    :param segmentation: 商品 和 服务
    :return: [(0, 2), (2, 3), (3, 5)]
    """
    region = []
    start = 0
    for word in re.compile("\\s+").split(segmentation.strip()):
        end = start + len(word)
        region.append((start, end))
        start = end
    return region


def prf(gold: str, pred: str, dic) -> tuple:
    """
    计算P、R、F1
    :param gold: 标准答案文件,比如“商品 和 服务”
    :param pred: 分词结果文件,比如“商品 和服 务”
    :param dic: 词典
    :return: (P, R, F1, OOV_R, IV_R)
    """
    A_size, B_size, A_cap_B_size, OOV, IV, OOV_R, IV_R = 0, 0, 0, 0, 0, 0, 0
    with open(gold, encoding='utf-8') as gd, open(pred, encoding='utf-8') as pd:
        for g, p in zip(gd, pd):
            A, B = set(to_region(g)), set(to_region(p))
            A_size += len(A)
            B_size += len(B)
            A_cap_B_size += len(A & B)
            text = re.sub("\\s+", "", g)
            for (start, end) in A:
                word = text[start: end]
                if dic.containsKey(word):
                    IV += 1
                else:
                    OOV += 1

            for (start, end) in A & B:
                word = text[start: end]
                if dic.containsKey(word):
                    IV_R += 1
                else:
                    OOV_R += 1
    p, r = A_cap_B_size / B_size * 100, A_cap_B_size / A_size * 100
    return p, r, 2 * p * r / (p + r), OOV_R / OOV * 100, IV_R / IV * 100


if __name__ == '__main__':
    print(to_region('商品 和 服务'))

    sighan05 = ensure_data('icwb2-data', 'http://sighan.cs.uchicago.edu/bakeoff2005/data/icwb2-data.zip')
    msr_dict = os.path.join(sighan05, 'gold', 'msr_training_words.utf8')
    msr_test = os.path.join(sighan05, 'testing', 'msr_test.utf8')
    msr_output = os.path.join(sighan05, 'testing', 'msr_output.txt')
    msr_gold = os.path.join(sighan05, 'gold', 'msr_test_gold.utf8')

    DoubleArrayTrieSegment = JClass('com.hankcs.hanlp.seg.Other.DoubleArrayTrieSegment')
    segment = DoubleArrayTrieSegment([msr_dict]).enablePartOfSpeechTagging(True)
    with open(msr_gold, encoding='utf-8') as test, open(msr_output, 'w', encoding='utf-8') as output:
        for line in test:
            output.write("  ".join(term.word for term in segment.seg(re.sub("\\s+", "", line))))
            output.write("\n")
    print("P:%.2f R:%.2f F1:%.2f OOV-R:%.2f IV-R:%.2f" % prf(msr_gold, msr_output, segment.trie))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/990010.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Flutter 通过BottomSheetDialog实现抖音打开评论区,内容自动上推、缩放效果

一、先来看下实现的效果 实现上面的效果需要解决俩个问题 当列表进行向下滑动到顶部的时候,继续滑动可以让弹窗向下收起来弹出上下拖动的时候,视图内容跟着上下移动、缩放大小二、实现弹窗上下滑动的时候,动态改变内容区的位置和大小 通过showModalBottomSheet显示底部对话框…

手写签名到背景上合为1张图

手写签名到背景上合为1张图 package.json中 "signature_pad": "3.0.0-beta.3"<template><div class"home"><canvas id"canvas" width"500" height"300"></canvas><button click"…

2.安装opencv报错及解决方法

目录 报错1&#xff1a;anaconda-lab命令不是内部外部指令 报错2&#xff1a; 找不到opencv模块,ModuleNotFoundError: No module named cv2 报错3&#xff1a;python版本号不匹配&#xff0c;Could not find a version that satisfies the requirement 报错1&#xff1a;anac…

我的创作纪念日—谈谈我的学习经历

引言 在这段时间里&#xff0c;我创作了一系列关于Java编程的博客文章。通过这个过程&#xff0c;我不仅增加了对Java编程的理解&#xff0c;还提高了我的博客创作技能。在本文中&#xff0c;我想分享一些我在博客创作过程中学到的心得体会和经验 机缘与巧合 其实很早我就有写笔…

Macs Fan Control 1.5.16 Pro for mac风扇调节软件

Macs Fan Control是一款专门为 Mac 用户设计的软件&#xff0c;它可以帮助用户控制和监控 Mac 设备的风扇速度和温度。这款软件允许用户手动调整风扇速度&#xff0c;以提高设备的散热效果&#xff0c;减少过热造成的风险。 Macs Fan Control 可以在菜单栏上显示当前系统温度和…

浅谈推进农业水价综合改革的意见解读

摘 要&#xff1a;农业是用水大户&#xff0c;也是节水潜力所在。在我国水资源短缺的背景下&#xff0c;推进农业水价综合改革&#xff0c;建立促使水资源节约的价格政策和准确计量收费机制是农业节水的必然要求&#xff0c;设计一套农田灌溉计量收费管理系统&#xff0c;对改良…

【计算机基础知识8】深入理解OSI七层模型

目录 一、前言 二、OSI七层模型概述 三、第一层&#xff1a;物理层 四、第二层&#xff1a;数据链路层 五、第三层&#xff1a;网络层 六、第四层&#xff1a;传输层 七、第五层&#xff1a;会话层 八、第六层&#xff1a;表示层 九、第七层&#xff1a;应用层 十、O…

公式trick备忘录

增大不同class feature之间的距离用hinge loss 相关&#xff0c; similarity learning, svm https://www.youtube.com/watch?vQtAYgtBnhws https://www.youtube.com/watch?vbM4_AstaBZo&t286s

Achronix与您相约“2023全球AI芯片峰会”

2023全球AI芯片峰会&#xff08;GACS 2023&#xff09;将于9月14-15日在深圳市深圳湾万丽酒店举行。峰会由智一科技旗下芯东西联合智猩猩&#xff08;智东西公开课全新品牌&#xff09;联合发起主办&#xff0c;以「AI大时代 逐鹿芯世界」为主题。 届时&#xff0c;Achronix将…

手把手教程:Deepin 23安装GitLab CE

一、安装GitLab 1.1 准备 系统我选择深度Deepin 23&#xff1a; Index of /releases/23-Beta/https://cdimage.deepin.com/releases/23-Beta/ 注意&#xff1a;Deepin 20.9安装GitLab CE 16.3会报错 GitLab CE选择当前最新版本&#xff1a; gitlab/gitlab-ce …

基因融合与癌症研究gene fusions in cancer

基因融合与癌症研究简历史(截止到2015年) Major discoveries from research on gene fusions and cancer 主要肿瘤亚型涉及的基因融合数量 Number of gene fusions involved in major neoplasia subtypes 恶性疾病中基因融合相关FDA批准药物 FDA-approved drugs targeting…

freeswitch sofia协议栈调试

概述 freeswitch是一款简单好用的VOIP开源软交换平台。 fs内部使用sofia的sip协议栈&#xff0c;本文介绍如何调试跟踪sofia协议栈。 环境 centos&#xff1a;CentOS release 7.0 (Final)或以上版本 freeswitch&#xff1a;v1.10.7 GCC&#xff1a;4.8.5 调试接口 sof…

linux使用stress命令进行压力测试cpu

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; &#x1f40b; 希望大家多多支…

看!亚马逊测评的隐藏宝藏!

亚马逊测评对卖家的优势显著&#xff0c;然而&#xff0c;许多卖家仍仅仅将测评理解为增加销售数量及对产品订单的简要评价。然而&#xff0c;运营高手已将其视为关键的运营工具。 亚马逊测评的功能不仅限于提高销售数量和生成正面评价。它还包括进行QA、点赞、Rating和Feedba…

怎么把pdf合并成一个pdf?认准这几个合并方法

怎么把pdf合并成一个pdf&#xff1f;在许多工作场合&#xff0c;我们需要处理大量的PDF文件。有时&#xff0c;我们需要将这些文件合并成一个文件&#xff0c;以便更好地管理和查看它们。这样可以避免我们在查找特定文件时需要浏览多个文件夹&#xff0c;从而节省时间和提高工作…

spring的事务隔离级别

一&#xff0c;spring支持的常用数据库事务传播属性和事务隔离级别 事务的传播行为&#xff1a;一个方法在运行了一个开启事务的方法中时&#xff0c;当前方法是使用原来的事务还是开启一个新的事务。 事务传播的行为有传播属性指定&#xff0c;Spring定义了7中类传播行为&…

LAN9252芯片控制资料

一&#xff0c;整个ethercat项目开发流程 通过STM32相关学习板&#xff0c;理解EtherCAT协议栈和通信步骤。根据项目需求构建XML&#xff0c;该XML将会由TwinCAT2解析&#xff0c;将相关特STM32程序烧写&#xff0c;修改应用层协议的程序。STM32作为SPI主模式与ZYNQ LAN9252进行…

咪蒙团队转型做短剧行业,年收入近2个亿

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 很多人不知道咪蒙是谁&#xff0c;他曾经是公众号时代的no.1&#xff0c;她发一篇带广告的推文大几十万, 那个时候不知道带动多少人去做公众号,2019年发表不恰当文章而被封禁。 但最近我看到一则新…

ABAP BAPI_ACC_DOCUMENT_POST 中 EXTENSION1的用法

BAPI_ACC_DOCUMENT_POST 在过账会计凭证时候&#xff0c;经常会发现一些标准字段在参数中并没有 可以通过CMOD/SMOD增强出口--》ACBAPI01--》EXIT_SAPLACC4_001--》ZXACCU15 示例代码&#xff1a; DATA: wa_extension TYPE bapiextc,it_extension TYPE STANDARD TABLE OF ba…

Adobe Acrobat Reader界面改版 - 解决方案

问题 日期&#xff1a;2023年9月 Adobe Acrobat Reader下文简称Adobe PDF Reader&#xff0c;此软件会自动进行更新&#xff0c;当版本更新至2023.003.20284版本后。 软件UI界面会大改版&#xff1a;书签页变成了右边、工具栏变到了左边、缩放按钮变到了右下角&#xff0c;如…