介绍
想象一下,您将生产一个Python软件包,该软件包有可能完全改变开发人员和数据分析师评估其模型的方式。这次旅行始于直接的概念:一种灵活的破布评估工具,可以管理各种指标和边缘情况。您将从用诗歌初始化包裹到创建可靠的评估师类,并在潜入本文时测试代码。您将获得有关如何创建软件包,计算BLEU和Rouge分数并在线发布的知识。最终,除了拥有一个可以使用公众使用的工作工具之外,您还将对Python包装和开源贡献有更多的了解。
学习成果
- 学会使用诗歌初始化并构建Python软件包。
- 为多个指标开发和实施评估者类。
- 计算和评估诸如BLEU和Rouge分数之类的指标。
- 编写和执行测试以确保代码功能和鲁棒性。
- 将Python软件包构建并发布给PYPI,包括处理分销和许可。
本文作为数据科学博客马拉松的一部分发表。
目录
- 用诗歌初始化包裹
- 设计核心评估员类
- 定义评估者类
- 实施评估指标
- 计算BLEU分数
- 测量胭脂分数
- 测试您的包裹
- 建立车轮
- 创建源和二进制分布
- 发布软件包
- 常见问题
用诗歌初始化包裹
现在,我们已经有了可以使用诗歌初始化新的Python软件包开始的要求。选择诗歌的原因是:
- 它消除了管理多个虚拟环境的需求。
- 它支持所有类型的Python软件包格式,包括本机和旧软件包。
- 它即使通过``poetry.lock''文件确保了依赖项的正确版本。
- PYPI准备单个命令。
使用命令安装诗歌几乎所有操作系统:
curl -ssl https://install.python-poetry.org | python3-
然后,我们可以使用以下命令使用样板来创建一个新的存储库。
诗歌新软件包_name
您可以将ENTER按ENTER并将其保留为默认情况下的通用问题。然后,您将降落在类似的文件夹结构中。
诗歌 ├ - pyproject.toml ├├前 ├ - poetry_demo │└└前__init__.py └ - 测试 └ - __init__.py
尽管结构很好,但我们可以使用``src''布局与官方Python文档中所讨论的`flat'布局。我们将遵循博客其余部分中的“ SRC”布局。
设计核心评估员类
包装的核心包含所有源代码,以供电Python评估器软件包。它包含了我们希望拥有的所有指标将继承的基类。因此,这堂课必须是在施工期间必须最强大,最大的谨慎。此类将具有基本初始化所需的必要逻辑,一种从度量标准获得结果的方法,以及一种容易消耗的用户输入的方法。
所有这些方法必须具有自己的范围和适当的数据类型。更多地关注数据类型的原因是因为Python是动态键入的。因此,我们必须确保正确使用变量,因为这些变量仅在运行时会导致错误。因此,必须有测试套件来捕获这些微小的错误,而不是使用专用的类型检查编译器。如果我们在Python中使用适当的键入,就很好。
定义评估者类
现在,我们看到了所有评估者类都必须包含的内容,以及为什么我们最重要的是相同的实现。对于构建此类,我们正在继承Python提供的ABC - 抽象基类。选择此类的原因是它包含我们可以构建评估者基类的所有具体功能。现在,让我们定义评估器类的输入和输出。
- 输入:候选人[字符串列表],引用[字符串列表]
- 方法:``填充'(确保候选人和参考的长度相同),“ get_score”(计算评估指标的最终结果的方法)
#src/evaluator_blog/evaluator.py 进口警告 从输入进口联盟,列表 来自ABC Import ABC,AbstractMethod 类Baseevaluator(ABC): def __init __(自我,候选人:列表,参考:列表) - >无: self.candidates =候选人 self.references =参考 @StaticMethod def填充( 候选人:列表[str],参考:列表[str] ) - >联合[列表[str],列表[str]]: “““_概括_ args: 候选人(列表[str]):LLM产生的响应 参考文献(列表[str]):针对 返回: 联合[列表[str],列表[str]]:确保“候选人”和“参考”的长度相等 ”“” _msg = str( ”“” 参考和候选人的长度(假设)不相同。 ”“” ) 警告(_msg) max_length = max(len(候选),len(参考)) candidates.extend([[“”] *(max_length -len(cantifates))))) references.extend([“”] *(max_length -len(references))) 返回候选人,参考 @StaticMethod def list_to_string(l:list) - > str: 断言( Len(L)> = 1 ),“确保消息的长度大于或等于1” 返回str(L [0]) @AbstractMethod def get_score(self) - > float: ”“” 计算得分函数最终结果的方法。 返回: 所选评估指标的浮点值。 ”“”
在这里,我们可以发现“ __init()__”方法包含所需的参数,即对任何评估者指标的基本要求IE候选者和参考。
然后,确保“候选”和“参考”所需的填充包含定义为静态方法的长度相同的长度,因为我们每次调用时都不需要初始化此内容。因此,静态装饰器包含所需的逻辑。
最后,对于`get_score()`我们使用AbstrackMethod Decorator,这意味着所有继承基本评估器类的类都必须包含此方法。
实施评估指标
现在是图书馆实施的核心,即对指标的评估。目前,用于计算,我们使用执行任务并显示度量分数的各个库。我们主要使用``候选人'ie llm生成的响应和``参考''即地面真相,我们分别计算了价值。为简单起见,我们计算BLEU和胭脂分数。这种逻辑可扩展到市场上可用的所有指标。
计算BLEU分数
作为双语评估研究的缩写是机器翻译(候选人)的常见评估指标之一,它是快速,廉价且无关紧要的。与手动评估相比,它具有边际错误。它比较了机器翻译与专业人类反应(参考)的亲密关系,并将评估作为度量得分范围为0-1,而任何方向的评分都被称为1次接近匹配。他们在候选人的句子中考虑了n-gram(n个单词的块)。例如。 Unigram(1克)考虑了候选人和参考文献中的每个单词,并将标准的得分返回被称为精度得分。
但是,考虑到是否多次出现相同的单词,它是每个外观的最终得分,这并不总是很好,这通常是不正确的。因此,BLEU使用修改后的精度分数,其中将单词匹配的数量剪辑并用候选人中的单词数将其归一化。这里的另一个收获是,它不会考虑订购一词。因此,BLEU得分考虑了多个N-gram,并用其他参数显示1-4克的精确得分。
优势
- 更快的计算和简单的计算。
- 广泛使用且易于基准的结果。
缺点
- 不考虑翻译的含义。
- 不考虑句子格式。
- 尽管它是双语的,但它仍在非英语语言中挣扎。
- 当人类翻译已经被象征化时,很难计算得分。
#src/devaluator_blog/metrics/bleu.py 从输入导入列表,可召唤,可选 来自src.evaluator_blog.evaluator导入baseevaluator 来自nltk.translate.bleu_score import colpus_bleu,smoothingFunction ”“” NLTK的BLEU实施 ”“” Bleuscore类(baseevaluator): def __init __( 自己, 候选人:列表[str], 参考:列表[str], 权重:可选[列表[float]] =无, Smoothing_Function:可选[可呼叫] =无, auto_reweigh:可选[bool] = false, ) - >无: ”“” 计算从 Papineni,Kishore,Salim Roukos,Todd Ward和Wei-Jing Zhu。 2002。 “ BLEU:一种自动评估机器翻译的方法。” 在ACL会议录中。 https://aclanthology.org/p02-1040.pdf args: 权重(可选[列表[float],可选):必须应用于每个bleu_score的权重。默认为无。 Smoothing_Function(可选[可呼叫],可选):通过添加或调整单词的概率质量分布来克服训练数据的稀疏性问题。默认为无。 auto_reweigh(可选[bool],可选):如果n-grams float: ”“” 计算给定候选人和参考的BLEU分数。 args: 候选人(列表[str]):候选句子列表 参考(列表[str]):参考句子列表 权重(可选[列表[Float],可选):BLEU评分计算的权重。默认为(1.0、0、0、0) Smoothing_Function(可选[函数]):平滑技术到段级别的BLEU分数 返回: 浮点:计算出的BLEU分数。 ”“” #检查候选人和参考的长度是否相等 如果len(self.candidates)!= len(self.enferences): self.candidates,self.references = self.padding( self.candidates,self。参考 ) #计算BLEU分数 返回colpus_bleu( list_of_references = self.References, 假设= self.candidates, 权重=自我。 Smoothing_function = self.smoothing_function, auto_reweigh = self.auto_reweigh, )
测量胭脂分数
缩写为以召回式评估为导向的研究,是将模型生成的摘要与多个人类摘要进行比较的常见评估指标之一。它以一种天真的方式比较了机器和人类生成的摘要的n克。这称为Rouge-n召回分数。为了确保与人类摘要的机器生成的摘要相关性,我们可以计算精度分数。由于我们具有精度和召回分数,因此我们可以计算F1得分。通常建议考虑`n`的多个值。 Rouge中的一个小变体是Rouge-L分数,它考虑了单词的顺序并计算LCS(最长的常见子序列)。以同样的方式,我们可以获得精度和召回得分。这里有一个略有优势,它考虑了句子的分子性并产生相关结果。
优势
- 通过比较n克和最长的共同子序列来评估自动文本摘要的质量非常有效。
- Rouge可以应用于任何语言,使其用于多语言文本分析和评估。
缺点
- Rouge专注于表面级文本匹配(N-Grams),这可能无法捕获更深的语义含义和连贯性。
- 胭脂的准确性在很大程度上取决于参考摘要的质量和代表性
#src/evaluator_blog/metrics/rouge.py 进口警告 从输入导入列表,工会,dict,可召唤,元组,可选 来自.. evaluator导入baseevaluator 来自rouge_score import rouge_scorer rugescore类(baseevaluator): def __init __( 自己, 候选人:列表, 参考:列表, rouge_types:可选[Union [str [str,tuple [str]]] = [ “ rouge1”, “ rouge2”, “ Roogel”, “ roogelsum”, ],, use_stemmer:可选[bool] = false, split_summaries:可选[bool] = false, tokenizer:可选[callable] = none, ) - >无: super().__ init __(候选人,参考) #默认`rouge_types`都是全部,否则用户指定的 如果IsInstance(rouge_types,str): self.rouge_types = [rouge_types] 别的: self.rouge_types = rouge_types #启用`use_stemmer`删除字词后缀以提高匹配能力 self.use_stemmer = use_stemmer #如果启用了 self.split_summaries = split_summaries #启用`tokenizer`如果用户定义或使用`rouge_scorer`默认值 #https://github.com/google-research/google-research/blob/master/rouge/rouge_scorer.py#l83 如果令牌: self.tokenizer = tokenizer 别的: self.tokenizer =无 _msg = str( ”“” 利用默认令牌 ”“” ) 警告(_msg) def get_score(self) - > dict: ”“” 返回: dict:相应度量评估的JSON值 ”“” SCORER = Rouge_scorer.RougesCorer( rouge_types = self.rouge_types, use_stemmer = self.use_semmer, tokenizer = self.tokenizer, split_summaries = self.split_summaries, ) 返回得分手。Score(self.list_to_string(self.candidates),self.list_to_string(self.references))
测试您的包裹
现在,在实际用法之前,我们已经准备好源文件,我们必须验证代码的工作。这就是测试阶段进入图片的地方。在Python库格式/惯例/最佳实践中,我们在名为`tests/'的文件夹下编写所有测试。这个命名惯例使开发人员可以轻松了解该文件夹具有其意义。尽管我们有多个开发工具,我们可以使用类型检查,错误处理等限制库。这迎合了第一轮检查和测试。但是,为了确保边缘案例和例外,我们可以使用Unitest,Andpytestas进行首选框架。话虽如此,我们只是使用“ UnitTest”库来设置基本测试。
编写有效的单元测试
关于“ UnitSest”的关键术语是测试案例和测试套件。
- 测试案例:测试的最小单元,我们在其中评估一组输出的输入。
- 测试套件:测试案例,套房或两者的集合。用于汇总测试以合作。
- 命名约定:必须在文件名和函数名称上以`tests_'的前缀。原因是解析器将检测到它们并将其添加到测试套件中。
建立车轮
当我们运行命令`pip slotstance
诗歌构建
它在文件夹根部的`dist/`文件夹中生成了轮子和zip文件。
区 ├ - potage_name-0.0.0.1-py3-nony-any.whl └─pongage_name-0.0.0.1.tar.gz
等效Python命令Aliter正在安装`build''软件包,然后从文件夹的根部运行构建命令。
Python3 -M PIP安装 - 升级构建 Python3 -m构建
创建源和二进制分布
现在,让我们展望创建源和二进制分布。
源分布(SDIST)
`sdist`是包含源代码和元数据的软件包的源分布,以根据PIP或POETRY等外部工具构建。必须在“ bdist”之前构建`sdist`。如果“ PIP”找不到构建分布,则源分布充当后备。然后,它从中构建一个轮子,然后安装包装要求。
二元分布(BDIST)
`bdist`包含需要移动到目标设备正确位置的必要文件。最佳支持的格式之一是`.whl'。要注意的是,它没有编译Python文件。
执照
在将包裹开放给外部世界时,始终建议拥有一个许可证,以显示您的代码可以重复使用的程度。在Github创建存储库时,我们可以选择在此处选择许可证。它创建一个具有使用选项的“许可证”文件。如果您不确定要选择哪种许可证,那么此外部资源是营救的理想选择。
发布软件包
现在,我们已经有所有要求将包裹发布给外部世界的所有要求。因此,我们使用的是Publish命令,该命令将所有步骤用单个命令抽象。
test.pypi.org
如果您不确定包裹的执行方式或用于测试目的,建议将其发布到test.pypi.org而不是直接上传到官方存储库中。这使我们可以灵活地测试包装,然后再与所有人共享包裹。
pypi.org
Python官方包装包含Python社区发布的所有私人和公共软件。对于作者和组织来说,通过官方的中央存储库共享包裹很有用。将您的软件包发布到世界上所需的只是这个单个命令。
诗歌出版-build -username $ pypi_username -password $ pypi_password
结论
到本文结尾,您已经成功发布了一个python软件包,该软件包准备被数百万使用。我们已经使用诗歌初始化了一个新的软件包,在用例中工作,编写了测试,构建了软件包并将其发布到PYPI存储库中。这将为自己增加更多价值,还可以帮助您了解有关它们的结构方式的各种开源Python软件包存储库。最后但并非最不重要的一点是,这只是开始,我们可以使其尽可能扩展。我们可以参考开源Python软件包和发行版,并从同一包装中获得灵感。
关键要点
- Python大师包装和诗歌的管理。
- 实施和自定义评估指标,以适用于不同的用例。
- 使用单元测试框架构建和测试可靠的Python软件包。
- 将您的软件包发布到PYPI并了解分销格式。
- 了解开源软件包开发和许可实践的见解。
常见问题
Q1。本文的目的是什么?答:本文可帮助您创建和发布Python软件包,重点关注社区可以用于各种评估指标的破布评估器工具。
Q2。为什么我要使用诗歌来管理我的Python套餐?A.诗歌通过将版本控制,虚拟环境和将任务发布到单个工具中来简化依赖关系管理和包装,从而使开发和分发更加容易。
Q3。本文涵盖了哪些评估指标?答:本文详细介绍了如何计算BLEU和Rouge分数,这些分数是通常用于评估机器生成文本质量的指标,与参考文本相比。
Q4。如何测试Python软件包的功能?答:您可以使用UNITSEST或PYTEST等框架来测试软件包,以确保代码按预期工作并处理边缘案例,并在发布前提供信心。
Q5。发布Python软件包的步骤是什么?答:使用诗歌或构建构建软件包,在test.pypi.org上进行测试,然后使用诗歌出版命令将其发布到官方的pypi.org存储库中,以使其向公众使用。
本文所示的媒体不由Analytics Vidhya拥有,并由作者酌情使用。
以上是如何用诗歌构建抹布评估器Python包的详细内容。更多信息请关注PHP中文网其他相关文章!

自2008年以来,我一直倡导这辆共享乘车面包车,即后来被称为“ Robotjitney”,后来是“ Vansit”,这是城市运输的未来。 我预见这些车辆是21世纪的下一代过境解决方案Surpas

革新结帐体验 Sam's Club的创新性“ Just Go”系统建立在其现有的AI驱动“扫描和GO”技术的基础上,使会员可以在购物旅行期间通过Sam's Club应用程序进行扫描。

NVIDIA在GTC 2025上的增强可预测性和新产品阵容 NVIDIA是AI基础架构的关键参与者,正在专注于提高其客户的可预测性。 这涉及一致的产品交付,达到绩效期望以及

Google的Gemma 2:强大,高效的语言模型 Google的Gemma语言模型家族以效率和性能而庆祝,随着Gemma 2的到来而扩展。此最新版本包括两种模型:270亿个参数VER

这一领先的数据剧集以数据科学家,天体物理学家和TEDX演讲者Kirk Borne博士为特色。 Borne博士是大数据,AI和机器学习的著名专家,为当前状态和未来的Traje提供了宝贵的见解

这次演讲中出现了一些非常有见地的观点——关于工程学的背景信息,这些信息向我们展示了为什么人工智能如此擅长支持人们的体育锻炼。 我将从每位贡献者的观点中概括出一个核心思想,以展示三个设计方面,这些方面是我们探索人工智能在体育运动中应用的重要组成部分。 边缘设备和原始个人数据 关于人工智能的这个想法实际上包含两个组成部分——一个与我们放置大型语言模型的位置有关,另一个与我们人类语言和我们的生命体征在实时测量时“表达”的语言之间的差异有关。 Alexander Amini 对跑步和网球都很了解,但他还

卡特彼勒(Caterpillar)的首席信息官兼高级副总裁杰米·恩格斯特(Jamie Engstrom)领导了一支由28个国家 /地区的2200多名IT专业人员组成的全球团队。 在卡特彼勒(Caterpillar)工作了26年,其中包括她目前的四年半,Engst

Google Photos的新Ultra HDR工具:快速指南 使用Google Photos的新型Ultra HDR工具增强照片,将标准图像转换为充满活力的高动态范围杰作。对于社交媒体而言,此工具可提高任何照片的影响,


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

Atom编辑器mac版下载
最流行的的开源编辑器

SublimeText3 Linux新版
SublimeText3 Linux最新版

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

禅工作室 13.0.1
功能强大的PHP集成开发环境

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。