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

这篇具有很好参考价值的文章主要介绍了自然语言处理学习笔记(八)———— 准确率。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.准确率定义

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

3. 精确率

4.召回率

5.F1值

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

7.实现


1.准确率定义

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

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

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

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

预测/答案 P N
P TP FP
N FN TN

(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

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

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

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

3. 精确率

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

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

4.召回率

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

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

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

5.F1值

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

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

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

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

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

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

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

例如:

自然语言处理学习笔记(八)———— 准确率,自然语言处理,自然语言处理,学习,笔记,nlp,何晗文章来源地址https://www.toymoban.com/news/detail-701417.html

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))

到了这里,关于自然语言处理学习笔记(八)———— 准确率的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 自然语言处理学习笔记(十)———— 停用词过滤

    目录 1.停用词 2.实现思路 3.全部实现代码: 4.运行结果: 1.停用词         汉语中有一类没有多少意义的词语,比如助词“的”、连词“以及”、副词“甚至”、语气词“吧”,称为停用词。一个句子去掉了停用词并不影响理解。停用词视具体任务的不同而不同,比如在网

    2024年02月09日
    浏览(51)
  • 自然语言处理学习笔记(七)————字典树效率改进

    目录 1. 首字散列其余二分的字典树 2.双数组字典树 3.AC自动机(多模式匹配) (1)goto表 (2)output表 (3)fail表 4.基于双数组字典树的AC自动机         字典树的数据结构在以上的切分算法中已经很快了,但还有一些基于字典树的算法改进,把分词速度推向了千万字每秒的

    2024年02月10日
    浏览(45)
  • 自然语言处理学习笔记(三)————HanLP安装与使用

    目录 1.HanLP安装 2.HanLP使用 (1)预下载  (2)测试 (3)命令行  (4)测试样例 3.pyhanlp可视化 4. HanLP词性表 1.HanLP安装  HanLP的 Python接口由 pyhanlp包提供,其安装只需一句命令: 安装完成 2.HanLP使用 (1)预下载 第一次使用pyhanlp时,会自动下载许多hanlp的jar包(包含许多算法

    2024年02月14日
    浏览(54)
  • 自然语言处理学习笔记(十一)————简繁转换与拼音转换

    目录 1.简繁转换 2.拼音转换 1.简繁转换 简繁转换指的是简体中文和繁体中文之间的相互转换。可能有的人觉得,这很简单, 按字转换 就好了。HanLP提供了这样的朴素实现 CharTable, 用来执行字符正规化(繁体-简体,全角-半角,大写-小写) 事实上,汉字历史悠久,地域复杂,

    2024年02月07日
    浏览(47)
  • 自然语言处理学习笔记(九)———— OVV Recall Rate与 IV Recall Rate

    目录 1.OVV Recall Rate 2. IV Recall Rate 1.OVV Recall Rate         OOV指的是“未登录词”(Out Of Vocabulary),或者俗称的“新词”,也即词典未收录的词汇。如何准确切分00V,乃至识别其语义,是整个NLP领域的核心难题之一。 2. IV Recall Rate         IV指的是“登录词”(In  V

    2024年02月09日
    浏览(42)
  • 以ChatGPT为例进行自然语言处理学习——入门自然语言处理

    ⭐️我叫忆_恒心,一名喜欢书写博客的在读研究生👨‍🎓。 如果觉得本文能帮到您, 麻烦点个赞 👍呗! 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧,喜欢的小伙伴给个三连支持一下呗。👍⭐️❤️ Qt5.9专栏 定期更新Qt的一些项目Demo

    2023年04月23日
    浏览(83)
  • 机器学习——自然语言处理(NLP)一

    机器学习——自然语言处理(NLP)一 自然语言处理(Natural Language Processing,NLP)是一门研究如何使计算机能够理解和处理人类语言的学科,其中有许多常用的算法和技术,本文则主要介绍比较基础的TF-IDF算法和朴素贝叶斯算法。 一种用于评估一个词语对于一个文件集或一个

    2024年02月09日
    浏览(51)
  • 【精品】NLP自然语言处理学习路线(知识体系)

    当前,大规模预训练语言模型的强大对话问答、文本生成能力,将自然语言处理(NLP)的研究和应用推向了新一轮的热潮。NLP是计算机科学、人工智能和语言学等学科交叉的前沿领域。NLP的应用和研究范围非常的广泛,个人是没有找到那种特别好的、详细且成体系的文档的。

    2024年02月09日
    浏览(51)
  • 读十堂极简人工智能课笔记06_自然语言处理

    1.4.3.1. 能让真人腾出手来处理难度更大的咨询 2.1.3.1. 在研究儿童的语言能力发展后总结出来的理论 2.1.3.2. 儿童虽然能够学会流利地说话,但他们在学习过程里其实根本没有接收到足够的信息 2.1.3.2.1. 所谓的“刺激的贫乏” 2.1.3.3. 儿童能够发展语言技能的唯一途径是他们

    2024年02月19日
    浏览(58)
  • 【自然语言处理】【多模态】ALBEF:基于动量蒸馏的视觉语言表示学习

    ALBEF:基于动量蒸馏的视觉语言表示学习 《Align before Fuse:Vision and Language Representation Learning with Momentum Distillation》 论文地址:https://arxiv.org/pdf/2107.07651.pdf 相关博客: 【自然语言处理】【多模态】多模态综述:视觉语言预训练模型 【自然语言处理】【多模态】CLIP:从自然语

    2024年02月03日
    浏览(137)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包