专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

实体关系标注工具最佳实践

  如果你有机会采访一下AI算法工程师,什么是机器学习中最重要的事儿?
  他们大概率会咆哮着告诉你:数据!数据!数据!
  如何获得高质量的标注数据?如何提高标注同学的工作效率?是每个AI团队最重要的思考之一。
  本文向大家详细阐述了来也科技AI研发中心在实现实体关系标注工具上的最佳实践。
  首先,为了您能顺利理解本文内容,对常见的技术名词说明如下:
  NLP:NaturalLanguageProcessing自然语言处理
  实体关系:见下图
  数据标注:数据标注即通过分类、画框、标注、注释等,对图片、语音、文本等数据进行处理,标记对象的特征,以作为机器学习的基础素材。
  标注数据的流转:见下图
  背景
  对话机器人是来也科技的当家产品之一。对话机器人的核心能力之一就是自然语言处理(NLP),而标明实体关系的数据则是提升NLP能力的重要输入。
  来也科技在标注实例关系数据上,历经了3个阶段:借助Excel标注数据使用市面上现有的标注工具自主研发标注工具
  Excel标注
  Excel标注的缺点是显而易见的:
  操作、协同不便所有关系维护在一个表格中,需要手动查找及复制不方便多人操作统一数据集,且容易误操作共享表格,权限无法细化标注状态、审核状态等不方便维护
  市面上的标注工具(我们以百度大脑举例)
  这个工具相较Excel有很明显的优点:通过刷选文本取代过去复制粘贴文本的标注方式通过共享实体和实体类型取代过去靠成员间约定的维护方式通过高亮文本并添加指示线取代在原文档中大海捞针的审核方式各实体持有关系数展示点击标注结果时会用虚线指向2个实体
  但也有不满足我们需求的地方:同一段文本不能被标为多种实体:实际业务场景中同段文本可能需要被拆分成多个实体,彼此之间创建实体关系。如图:
  跨行标注时会扰乱原本的文本结构,影响标注体验。如图:
  查看实体关系的实体高亮不明显,实体间的虚线可能会被文本遮盖,实际作用不大标注时不能创建实体类型和关系类型,需要到另一个页面编辑,但我们希望可以不要切换
  自主研发
  在此背景下,我们决定研发自己的实体关系标注工具。除了基本的标注需求外,我们还抽象出以下几点重点需求:
  标注页面可以实时维护类型信息同段文本可标注为多个实体分行排版获取字符位置跨行实体不会被拆成单独的一行
  来也科技实体关系标注工具实践
  通过对需求的反复分析,我们确定了实体关系标注工具的目标使用方式:
  标注页面可以实时维护类型信息
  这是比较简单的需求,我们只需要在标注页面添加类型维护,并且使其在更新后可以立刻投入使用即可。
  同段文本可标注为多个实体
  我们的需求是,同一段文字可被多次标注。如下图:
  这个需求比较具有挑战性,且当前业内并没有一套可参照的方案满足我们的业务场景。
  通过调研分析,我们发现:一段文本之所以无法被标注为多个实体,是因为现有的标注方式是在已有的文本元素上添加样式,不论是背景色、下划线,其本质都是在利用原本的文本元素。
  因为DOM元素的固有限制,一段文本最多只能对应一种背景色,以及一种下划线。
  要想让一段文本可以被标注为多个实体,那么文本和标注肯定不是一个DOM元素。所以,我们采取引入额外线段的方式来表示标注,并通过绝对定位定位到文本下方。这样,一段文本就可以对应多个标注了。
  我们需要准确的获取标注文本的位置信息。可并没有现成的组件,能够返回指定字符在给定文本中的具体位置。
  所以,我们就自己实现了一个文字排版容器:把文本逐字填入容器,当超过容器宽度时,就将文本放入下一行。选中的文本宽度可以通过DOM属性offsetWidth直接获取。
  ,时长00:08
  伪代码如下:functionbreakIntoLines(str,width){获取测试宽度的span,该span继承标注工具的文字样式constspangetTestSpanInstance();分行信息constlines〔〕;当前行的文本lettokens;当前行行首在str中的indexletstIndex0;遍历字符串while(str。length){判断当前文本再加一个字符会不会超宽span。innerTexttokensstr〔0〕;如果超宽,就将之前的文本放入分行信息中,超出部分单起一行if(span。offsetWidthwidth){lines。push({stIndex,tokens,});stIndextokens。length;tokensstr〔0〕;}如果未超宽,则将该字符添加到当前行else{tokensstr〔0〕;}吐出被插入的字符strstr。slice(1);}插入最后一行if(tokens){lines。push({stIndex,tokens,})}returnlines;}
  获取字符位置
  如何对标注的数据进行展示呢?横向偏移量计算:每行分完,通过计算文字的宽度即可获取标注的横向偏移量纵向偏移量计算:判断是否与已处理完成的标注重叠,计算纵向偏移量
  functioninjectMarksIntoLines(lines,marks){for(letlineoflines){获取每行内的标注for(letmarkofmarks){if(isMarkInLine(mark,line){line。marksline。marks?line。marks。concat(mark):〔mark〕}}根据重叠数量,确定每个标注的垂直偏移量line。marksline。marks。map((mark,i,arr){lety0;for(letj0;ji;j){if(isOverlap(mark,arr〔j〕)){y;}}return{。。。mark,y,}})}}
  跨行实体不会被拆成单独的一行
  市面上的工具在标注跨行文本时,会因为标注不能拆分为多行,而将标注的文字机械化的放在同一行,这就造成了两个问题:
  不必要的分行文本一行展示不下时,超宽内容不可见
  这样的处理方式,会使得文本难以阅读。如下图所示:
  来也科技自主研发的标注工具,已经摆脱通过文本样式实现标注这种枷锁,我们可以将一个标注拆成多个DOM元素。
  只要标注的全部或部分内容在当前行,就可以在本行标注文本下展示标注组件,彻底解决跨行文本被拆分的这个问题。
  functioninjectMarksIntoLines(str,width){。。。if(isMarkInLine(mark,line){mark。stIndexMath。max(line。stIndex,mark。stIndex);mark。endIndexMath。min(line。endIndex,mark。endIndex);line。marksline。marks?line。marks。concat(mark):〔mark〕}。。。}
  优化
  渲染时间过长
  当标注文本较多时,首屏渲染时会出现较长的白屏时间。且文本字数、标注数量越多,白屏时间越长。
  我们以一段500字左右的文本为例,获取其性能数据:
  结合performance和代码进行分析,我们发现耗能主要在以下两方面:
  分行算法会频繁获取offsetWidth:每调用一次,都会导致页面重排,严重耗时;计算标注纵向偏移量时,会先遍历全部标注,过滤出在当前行的标注,然后进行遍历,得到重叠高度信息,遍历次数过高;
  我们来逐一优化。
  分行算法优化
  按照上文描述,初版的分行算法时间复杂度为O(n),n为文本字数。我们着重考虑通过减少调用次数来实现性能优化。通过实际观察实际应用场景,我们得出以下结论:每行文本的字数相差不多,因为中文字的宽度相同,导致字数差异的是数字、字母等;中文业务场景中数字和字母远没有中文字数多;即使在最小的屏幕上展示,每行最少也有30个字符;
  基于这些信息,我们做出如下优化:
  处理第一行时,我们不再逐字测宽,而是直接截取前30个字符测宽,多退少补直至宽度正确;记录第一行的字数,作为下一行期望的字数except,多退少补直至正确;记录新的一行的字数n,修正except(exceptn)2。重复此步骤,直至文本分行结束
  结果对比:
  优化前
  优化后
  渲染500字233。29ms
  79。5ms
  渲染2万字11232ms
  91ms
  可见优化效果显著。
  获取标注位置算法优化
  在展示标注结果时,初版获取标注纵向偏移的算法为:检查所有标注数据后,过滤出本行标注进行展示,复杂度为O(lnn),其中l为行数,n为标注数。
  此方式引入了很多不必要的计算。其实,要获取每个标注的垂直偏移量,只需要对比当前行的标注即可。
  针对这个问题,优化思路如下:
  将标注按起始位置升序排列。假设第一行有30个字,那么我们就从升序数组中拿出起始位置小于30的,这就是本行要添加的标注。判断这些标注是否重叠。假设用户添加了两个标注:如果二者不重叠,那二者应该展示在一行;如果二者重叠,那么就要将后处理的标注放在前者的下一行;遍历数组,把在本行结束的标注剔除。保证每行展示的标注,要么是上一行没有结束的,要么是在本行开始的。
  伪代码如下:functiongetMarkPosition(lines,marks){起始位置升序conststIndexArrmarks。sort((a,b)a。stIndexb。stIndex);constst0;本行需要添加的标注letcurrent〔〕;for(letlineoflines){获取当前行的标注while(stIndexArr〔st〕。stIndexline。endIndex){current。push(stIndexArr〔st〕);st;}获取标注mark。offsetXgetTextLength(line。text。slice(0,mark。stIndexline。stIndex))添加标注行addMarkLines(line,current);剔除本行结束的标注currentcurrent。filter(oldMarkoldMark。endIndexline。endIndex);}}添加标注行functionaddMarkLines(line,marks){constmarkLines〔〔〕〕;letinsertedfalse;遍历所有标注marks。forEach(mark{遍历所有行for(leti0;imarkLines。length;i){如果本行没有和新标注重叠的,则放入本行if(!markLines〔i〕。find(oldMarkisOverlap(oldMark,mark))){mark。offsetYi;markLines。push(mark);insertedtrue;break;}}如果所有行都重叠,则单开一行if(!inserted){mark。offsetYmarkLines。length;markLines。push(〔mark〕);}})line。markLinesmarkLines;}
  总结
  实体关系标注工具在来也科技内部已经上线半年。至今日,公司内部全部的NLP标注需求已全部接入。标注文档超过3万篇,标注效率提升35,标注准确率提升至96。8。
  本文作者:贾思齐
  来源:微信公众号:来也技术团队
  出处:https:mp。weixin。qq。comsmXfGtyTtbbjqv2KB5ryHw

六大不可忽视的投资理财误区,你中枪了吗?风险来自你不知道自己在做什么沃伦巴菲特对你来说,什么是自由?想象一下,你拥有一种令人兴奋的新生活,可以获得被动收入长期回报,以及完全的财务自由,不必被束缚在你不喜欢的工作上。这样的耻辱惨败!波特135,唐斯259,杰伦格林太尴尬,火箭新领袖诞生北京时间11月6日,NBA常规赛火箭客场挑战森林狼,史密斯和戈贝尔缺阵,赛前塞拉斯接受了采访,他表示不为格林最近低迷的状态感到担忧,言外之意,格林反弹是早晚的事情,可纵观今天的比赛18分26分!联盟第2!对不起,伍德,他要抢最佳第六人NBA常规赛开打数日,各大奖项的争夺初具雏形且格外激烈。就拿MVP来说,雄鹿队伤兵满营却孤独求败,豪取9连胜,创队史最佳开局,字母哥展现出佛挡杀佛神挡杀神的统治力。凭借着强力的个人逆转爆冷打懵陈梦,恭喜刘国梁找到接班人,19岁小张怡宁横空出世全国乒乓球锦标赛男团跟女团已经打到了第四个比赛日,今天将会决出男团跟女团的冠军。对于全国锦标赛开打的这几个比赛日频频出现以下克上爆冷的比赛。由奥运冠军陈梦领衔的山东队在淘汰赛当中一五连败只是在为错误选择买单!勇士高价续约普尔亏大了普尔上位,带领勇士以105114不敌鹈鹕遭遇五连败,之前四连败的勇士是得有多相信普尔,居然把五大主力都给轮休了。勇士队输球最主要的就是防守不佳导致的,而这一切的根源都要从高价续约普全锦赛王艺迪带辽宁女团夺冠,14岁小将成全国冠军,孙颖莎摘铜11月6日,乒乓球全锦赛女团决赛打响终极对决,国乒两大世界冠军陈幸同王艺迪带领的辽宁队经过五盘苦战,以32险胜江苏队,加冕女团冠军,这是本届全锦赛产生的首个冠军。王艺迪在决赛中独得中超冠军鲁治申实现反超?国安阻击三镇,为泰山扫障碍?最近,经过努力和对手错误,山东泰山终于追平武汉三镇,实现并驾齐驱,能否延续冠军悬念,本轮也许是个分水岭,都是强强对决,但谁都没有犯错误的空间。武汉三镇更有优势,外援全部伤愈复出,整不服不行!奥沙利文第四次夺得斯诺克冠中冠邀请赛冠军职业生涯第76个冠军头衔,一个月内拿下两冠25万英镑,斯诺克王者奥沙利文仍旧在书写着自己的传奇。北京时间11月7日,斯诺克冠中冠邀请赛落下帷幕,奥沙利文106击退特鲁姆普,第4次加半岛叨叨丨带货女王不带货,一日浮盈3500万!没有直播的薇娅,换了个方式赚钱双十一来临,在李佳琦罗永浩等主播们还在如火如荼地奋战时,薇娅投资的第一家上市公司来了!去年收到13。41亿罚单之后,薇娅没有再在直播间出现过,可她之前布的局,却还在悄悄推进。11月张继科约会二婚美女!两人深夜共赴豪宅,34岁身价上亿,玩性不改张继科是优秀的乒乓球运动员,同样为我们带来了无数的荣誉,也是一位名副其实的功勋人物,他也是乒坛历史上第7位大满贯选手,各种荣誉也是数不胜数,目前34岁的张继科已经处于半退役状态,再最新夺冠赔率出炉!雄鹿9连胜第1,绿军第2勇士仍第3,湖人仅第16北京时间11月6日,雄鹿在字母哥缺阵的情况下仍然以108比94击败雷霆,取得了9连胜。太阳102比82击败开拓者,回到西部第一。凯尔特人强势复苏,单场投进27个三分球,133比11
公公陪我儿子输液,医生给我发的照片!哈哈哈,这是什么情况不是我吹,就这一点点的肉都能包三个人吃的量裁判表弟,我真是把她们都请过来了,剩下的就看你的啦在绝对的力量面前,真是一点反抗都没有这是一个悲伤的故事安全出行,人人有责呦呦呦,煎饼果子安徽4大失败酒,昔日名气不输古井贡酒,如今却走不出当地昔日的皖酒,也曾在我国的白酒市场有着重要的地位,90年代的时候,安徽的白酒销量位居全国第二的位置,仅次于四川,而白酒产量也是榜上有名的存在。然而再看当下,安徽还能被众人熟知的白酒品2011年,江苏女孩带男友回家,母亲却大哭你是我死去21年的儿子前言2011年,家住江苏省宿迁市仰化镇的李阿姨,接到女儿张晓娇打来的电话。电话那头女儿语气轻快,说交往了一个男朋友,过两天带回家给母亲看看。女儿已经二十好几岁,为此李阿姨没少为晓娇公务员6大部门将迎来新制服,看上去很精致,你有没有机会穿上呢公务员工作在家长心中的地位居高不下,但在学生的心里却发生了翻天覆地的变化,从原先的嗤之以鼻,到现在的众星捧月,大学生考公务员的热情指数逐步提升,而出现这种情况也不是没有也原因的。比S28赛季射手现状,戈娅胜率飙升,伽罗蒙犽成最大赢家S28新赛季开启已有4天时间了,不知道大家在这几天时间里,是不是感受到了赛季初排位的恐怖?有意思的是,和S27赛季相比,S28赛季大部分射手的胜率还得到了提升,下面我们来看看射手的女儿首次亮相,娇妻出尽风头,鲍里斯成G7赢家G7领导人峰会英国首相鲍里斯占C位第一夫人2。5万镑西装抢镜小女儿首次公开亮相脱衣服要和普京比肌肉鲍里斯成了这次G7最大赢家CarrieJohnsonsharedabehindth德国男孩突然失踪,上百人寻找无果,8天后井盖下传来微弱的哭声德国8岁小男孩Joe,和家人生活在奥尔登堡市。6月17日,Joe突然从家中院子里失踪,一直都没回来,不知去向。父母焦急万分报了警,一场大规模的搜查行动随即展开。热心居民警察带着警犬长期喝白酒的人,身体会有什么变化?中医说出实话中国的传统文化当然在古代喝酒的时候他们古人喝酒都是比较豪迈的,只不过现在我们喝酒的方式全部是错误的,那些形式和酒的档次,其实,不过我们喝哪种酒,我们酒喝多了都会对我们的身体造成一样2022年高考陕西省文科一本志愿填报指南2022年全国各省高考已经落下帷幕,剩下的任务就是家长和孩子一起根据自己的高考分数以及在本省的排名,选择合适的大学。为了方便大家填志愿,避免出现明明考了高分,却因为志愿没有填好,最提车作业,喜提女朋友终于提到自己心心念念的车了必然是来发提车作业!当初威朗Pro更上市之后,我是真的太喜欢了,第一眼就种草了,奈何兜里没有一点余地都没有,当时想要在我的老家做一些自己喜欢的生意,所以仅江西大姐十七年来免费培训两万人花艺技能,带动十余名残疾人创业头条好心人如果我创业成功,就能给更多的弱势人群提供就业机会,带动更多的人就业。2005年,陈小梅在江西南昌创办了自己的花艺门店唯美创意花艺,今年46岁的她回首起十七年的创业路,可以
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网