jjzjj

评价指标:相似度、GAS消耗

月夜魂归 2023-03-28 原文

【代码注释自动生成方法综述】

这些评测指标主要来自机器翻译和文本总结等研究领域,可以评估候选文本(即基于代码注释自动方法而生成)和参考文本(即基于手工方式而生成)的相似度.

BLEU指标[​[88](javascript:void(0);)^]^:其全称是bilingual evaluation understudy.该指标是最早用于评估机器翻译的评测指标.用于比较候选文本和参考文本里n元词组(n-gram)的重合程度.其中,BLEU-1/2/3/4分别对应一元词组、二元词组、三元词组和四元词组的重合程度.其中,BLEU-1可以用于衡量单词翻译的准确性,而随着n的取值增大,BLEU指标则可以进一步衡量文本的流畅性.不难看出,BLEU指标的取值越高,即n元词组的重合程度越高,则认为候选文本的质量也越高.

但BLEU指标更偏重查准率,而忽略了查全率(即参考文本中未在候选文本中出现的n元词组).虽然可以通过引入长度惩罚因子(brevity penalty)来惩罚候选文本过短的问题,但从整体上来看,BLEU评测指标更偏向于较短的候选文本.

(2) METEOR指标[​[89](javascript:void(0);)^]^:其全称是metric for evaluation of translation with explicit ordering.其使用Word Net等知识源来扩充同义词集,同时考虑了单词的词形.在评价句子流畅度时,使用了chunk(即候选文本和参考文本能够对齐的,并且空间排列上连续的单词形成一个chunk)的概念,chunk的数目越少,意味着每个chunk的平均长度越长,即候选文本和参考文本的语序越一致.

(3) ROUGE指标[​[90](javascript:void(0);)^]^:其全称是recall-oriented understudy for gisting evaluation.与BLEU指标相似,但BLEU指标面向的是查准率,而ROGUE指标面向的是查全率.该指标在文本摘要研究中被经常使用,又可以细分为ROUGE-N和ROUGE-L.其中,ROUGE-N指标以n元词组为基本单元,计算两个句子之间n元词组的重合率.而ROUGE-L指标与ROUGE-N指标相似,但是针对的是最长公共子序列(longest common subsequence)的重合率.

(4) CIDER指标[​[91](javascript:void(0);)^]^:其全称是consensus-based image description evaluation.一般用于图像字幕生成问题.该评测指标可以认为是BLEU指标和向量空间模型的集合.其将每个句子视为文档,然后计算出n元词组的tf-idf值,通过余弦夹角计算出候选文本和参考文本之间的相似度.最后,基于不同长度的n元词组计算出平均取值,并作为最终结果.

不难看出,BLEU、METOR和ROUGE指标的取值范围介于0~1之间,并经常以百分比的形式给出.而CIDER指标对的取值范围并不在0~1之间,因此经常以实数的形式给出.

GAS消耗

和Solidity对比

邀请人测试

有关评价指标:相似度、GAS消耗的更多相关文章

  1. ruby-on-rails - 需要帮助最大化多个相似对象中的 3 个因素并适当排序 - 2

    我需要用任何语言编写一个算法,根据3个因素对数组进行排序。我以度假村为例(如Hipmunk)。假设我想去度假。我想要最便宜的地方、最好的评论和最多的景点。但是,显然我找不到在所有3个中都排名第一的方法。Example(assumingthereare20importantattractions):ResortA:$150/night...98/100infavorablereviews...18of20attractionsResortB:$99/night...85/100infavorablereviews...12of20attractionsResortC:$120/night

  2. java - java和ruby的主要区别和相似之处是什么? - 2

    关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭9年前。Improvethisquestion我现在是java专业人士,我喜欢使用ruby​​。这两种语言有什么相似之处吗?主要区别是什么?因为两者都是面向对象的。

  3. ruby - 按相似性对字符串进行分组 - 2

    我有一个字符串数组,数量不多(可能几百个)但通常很长(几百个字符)。这些字符串通常是无意义的,并且彼此不同。但是在一组这样的字符串中,可能300个中有5个具有很大的相似性。事实上,它们是相同的字符串,不同的是格式、标点符号和一些单词..我怎样才能算出那组字符串?顺便说一句,我正在用ruby​​编写,但如果没有别的,伪代码算法就可以了。谢谢 最佳答案 假设您不担心每个单词的拼写错误或其他错误,您可以执行以下操作:构建一个倒排索引,它基本上是一个以单词为键的散列,指向包含该单词的字符串的指针列表(如何处理重复出现由您决定)。要确定与给定

  4. ruby-on-rails - PostgreSQL 与 Rails ActiveRecord 中的多个匹配相似 - 2

    我正在尝试使用以下查询从我的数据库中检索多条记录:User.where('nameilike?','%thomas%')这很好用。现在我想同时检索多条记录并尝试了这个(这在语法上似乎是不正确的):User.where('nameilikeany',['%thomas%','%james%','%martin%'])我做错了什么?所以澄清一下:我想检索与其中一个名称匹配的所有记录,所以它是我正在寻找的OR语句。 最佳答案 你可以这样做User.where('nameilikeany(array[?])',['%thomas%','%j

  5. ruby-on-rails - 如何分析我的 rspec 测试以找到最大的内存消耗? - 2

    我们使用circleci作为部署过程的一部分。Circleci运行了我们的3000次测试,有时会失败,因为它达到了4GB的内存限制。看起来我们的一些测试正在创建大量对象并耗尽大量内存。我只是不知道哪些是。有没有一种简单的方法可以分析给定测试所用的内存?如果我知道如何执行此操作,我可以轻松地遍历每个测试并运行它并查看它使用了多少内存。 最佳答案 您可以使用ruby-profgem来分析内存使用情况。但首先您可以尝试使用--profileflag运行rspec.它将为您提供10个最慢的规范,这可能是开始寻找消耗大量内存的规范的好地方。

  6. ruby-on-rails - 使用相似键加载和生成 Yaml 文件 - 2

    我有一个具有相似键的yaml文件文档:-示例文件.ymlline:title:line-namedepartment:transcriptioninput_formats:-input_format:name:companyrequired:truevalid_type:general-input_format:name:websiterequired:falsevalid_type:url生成new_file.yml后,键将按字母顺序排序:-new_file.ymlline:department:transcriptioninput_formats:-input_format:nam

  7. ruby-on-rails - Ruby 比较两个字符串相似度百分比 - 2

    我想在Ruby中比较两个字符串并找出它们的相似性我看过Levenshteingem,但它似乎是2008年的最后一次更新,我找不到如何使用它的文档。一些博客暗示它坏了我用Levenshtein尝试了textgem,但它给出了一个整数(越小越好)显然,如果这两个字符串的长度可变,我会遇到Levenshtein算法的问题(比方说比较两个名字,其中一个有中间名而另一个没有)。您建议我如何进行百分比比较?编辑:我正在寻找类似于PHP的similartext的东西 最佳答案 我认为您的问题可以做一些澄清,但这里有一些快速而肮脏的东西(根据您上面

  8. ruby - Capybara:如何检查一个元素在许多相似元素中是否有内容? - 2

    我需要检查页面上特定类型的选择器中是否存在某些内容。例如,假设我有以下HTML:HEADLINEONEHEADLINETWO我知道如何只选择页面上的第一个:find('h2').shouldhave_content('HeadlineTwo')#have_contentisalsocaseinsensitive我如何检查页面上所有h2中是否存在内容? 最佳答案 显然您可以选择具有给定文本的元素:page.shouldhave_selector('h2',text:/#{headline}/i)注意:我使用正则表达式使文本搜索不区分大

  9. 如何查看两个提交之间更改的正确指标? - 2

    如何正确使用git差异来计数:添加,修改,删除和每个文件的总文件行?另外,我需要忽略空白和评论行。看答案您可以通过:gitdiff--stat以及快速的历史概述:gitlog--stat

  10. Kotlin:通过并消耗2个参数函数? - 2

    我正在尝试在Kotlin学习功能编程,并且难以使此代码起作用:importjava.util.*funcaseName(br:String,c:Int):String{if(c==0){returnbr.toLowerCase()}else{returnbr.toUpperCase()}}funmapIt(ns:ArrayList,f:(String,Int)->String):List{valcoll:List=ns.map{it->f(it,_)}returncoll}funmain(args:Array){valnames=arrayListOf("Joe","Bill","Murrar

随机推荐