欢迎来到课桌文档! | 帮助中心 课桌文档-建筑工程资料库
课桌文档
全部分类
  • 党建之窗>
  • 感悟体会>
  • 百家争鸣>
  • 教育整顿>
  • 文笔提升>
  • 热门分类>
  • 计划总结>
  • 致辞演讲>
  • 在线阅读>
  • ImageVerifierCode 换一换
    首页 课桌文档 > 资源分类 > DOCX文档下载  

    多粒度分词演示系统设计和实现计算机科学与技术专业.docx

    • 资源ID:1260034       资源大小:328.70KB        全文页数:32页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    多粒度分词演示系统设计和实现计算机科学与技术专业.docx

    摘要.1 Abstract.2 前言.3 第1章绪论.4 1.1 研究背景.4 1.2 分词概述.5 1.3 本文的主要工作.6 第2章基于词典匹配和动态规划树状解码的多粒度分词算法.8 2.1 算法实现.8 2.2 优化.10 2.3 评价.11 第3章基于神经网络分类模型和动态规划序列解码的多粒度分词方法13 3.1 介绍.13 3.2 模型搭建.14 3.3 模型训练.16 3.4 模型结果处理.17 3.5 评价.19 第4章多粒度分词演示系统构建.22 4.1 后端程序.22 4.2 网页前端.23 4.3 效果展示.24 第5章总结与展望.27 5.1 本文总结.27 5.2 后续工作展望.27 致谢.错误!未定义书签。参考文献.29 附录.31 中文分词一直是中文信息处理领域的一项重要技术,它是机器翻译,搜索引擎,文本分类等应用不可或缺的基础部分。中文分词方法也在不断地发展,但是这些方法仅仅聚焦于单粒度分词,即一个句子被分割成唯一的一个词序列。于是,最近有人系统地在数据驱动的机器学习框架下正式提出并解决了中文多粒度分词任务。该毕业设计旨在实现一个多粒度分词演示系统,让用户在浏览器一端输入中文句子,网页能够即时的显示多粒度分词结果。因此本文的工作大体上可以分为两部分。第一部分,实现多粒度分词算法。主要尝试了两种算法,第一种基于词典匹配的动态规划解码算法,第二种基于深度学习的前馈神经网络模型。最后用两者在1500个测试句子上进行评价,比较它们的优劣。第二部分为Web网页的设计,前端选用普通的css+JavaScript+html技术,后端则选用python的Flask框架搭建,通过调用前面设计好的算法实现分词,把结果传到前端,最后再将结果以合适的形式展现出来。关键词:自然语言处理;中文信息处理;中文分词;多粒度分词;Web开发Abstract ChinesewordsegmentationhasalwaysbeenanimportanttechnologyinthefieldofChineseinformationprocessing.Itisanindispensablepartofmachinetranslation,searchengine,textclassificationandotherapplications.Chinesewordsegmentationmethodsarealsoconstantlyevolving,butthesemethodsfocusonlyonsingle-grainedsegmentation.Asaresult,ithasrecentlybeensystematicallyproposedandsolvedinthedata-drivenmachinelearningframeworkforChinesemulti-grainedwordsegmentationtasks.Thegraduationprojectaimstoimplementamulti-grainedwordsegmentationdemonstrationsystem,allowinguserstoinputChinesesentencesatthebrowser,andthewebpagescaninstantlydisplaymulti-grainedwordsegmentationresults.Therefore,thisworkcanberoughlydividedintotwoparts.Thefirstpart,toimplementmulti-grainedwordsegmentationalgorithm.Twoalgorithmsaremainlytried,thefirstonebasedonscoreswhichiscalledCKYdecodingalgorithmandthesecondonebasedondeeplearningusingthefeedforwardneuralnetworkmodel.Finally,thetwowereevaluatedon1500testsentencestocomparetheirmerits.Thesecondpartisthedesignofawebpage.Thefrontendusestheordinarycss+JavaScript+htmitechnology,andthebackendusestheflaskframeworkofpython.Bycallingthepreviouslydesignedalgorithm,thewordsegmentationisachieved,theresultispassedtothefrontend,andtheresultisfinallyshowninasuitableform.Keywords:Naturallanguageprocessing;Chineseinformationprocessing;Chinesewordsegmentation;multi-grainedwordsegmentation;Webdevelopment和大部分西方语言不同,一个汉语句子中间没有明显的分隔符,它是由连续的字序列构成的。因此对中文进行处理的第一步就是进行自动分词,即将字串转变成词串。自动分词的重要前提是确定词的分界要按什么标准进行划分。中文中具有意义的最小单位是词(含单字词),但是词的定义非常抽象且因人而异。给定某文本,按照不同的标准的分词结果往往不同。词的标准成为分词问题一个很大的难点,没有一种标准是被公认的。作为中文信息处理的第一步,分词已经在过去几十年里被广泛研究并且做出巨大进步。同时分词的方法也在逐渐地改进,从基于词典的最大匹配,到基于语言模型分值和其他数据的路径搜寻分词,到基于字符的序列标记。最近,神经网络模型通过有效的学习字符和文本内容含义也取得了成功。但是大部分这些研究都主要聚焦于单粒度分词,即一个句子被分割成一个单一的词序列。然而由于中文语言的特殊性,人们对于词的定义和分界存在着非常大的歧义。在不同的语料集中,对同一句子的分词结果可能不同,这就给数据标注带来了挑战。同时,在不同的应用中,中文分词的粒度粗细也会影响结果。于是为了解决上述问题,多粒度分词任务被系统地提出。给定一个句子输入,目标是产生不同粒度的所有单词结构本工作主要是实现简单的多粒度分词算法和模型,并且通过Web开发技术调用模型,在网页端能显示出树状的分词结果。本文实现的多粒度方法主要是以下两种。第一种方法把句子看作一棵成分分析树,由各个子成分组成,为每个句子成分(span)赋予一个分值,该分值通过查字典获得。目标就是找到一棵分值最大的树,作为分词的结果。第二种方法是利用深度学习理论搭建一个前馈神经网络,把多粒度分词任务看作序列标注进行学习和训练。再把结果进行规制约束或解码得到一棵最优的树。最后利用Flask框架搭建后端,把分词结果传到前端,前端再利用JavaScript技术显示出结果。第1章绪论 本章首先介绍了中文分词的研究背景和意义,其次引出多粒度分词任务和意义。并概述了本文所做的主要工作和贡献。1.1研究背景 中文信息处理(CIP,ChineseInformationProcessing)是自然语言处理(NLP,NaturalLanguageProcessing)的一个分支领域,目的是让计算机正确的处理中文,甚至能够理解中文。但是和大部分西方语言不同,一个汉语句子中间没有明显的分隔符,它是由连续的字序列构成的。因此对中文进行处理的第一步就是进行自动分词,即将字串转变成词串川。机器翻译(MT,MachineTranslation)搜索引擎、自动校对、语音合成、自动摘要、自动分类等许多应用,都需要用到分词。自动分词的重要前提是以词的分界要按什么标准进行划分。中文中具有意义的最小单位是词(含单字词),但是词的定义非常抽象且因人而异。中文不像英文和法文那些“隔离”的语言,而是属于“多合成”的类型。它的复合词是从土生土长的词素中产生的。词素和复合词之间的模糊界限导致了对于词的概念的认知分歧。研究表明,中国母语人共识比例在没有经过共同指导培训的情况下仅为76%。给定某文本,按照不同的标准的分词结果往往不同。词的标准成为分词问题一个很大的难点,没有一种标准是被公认的。中文分词的另一个难点在于消除歧义,分词歧义主要包括如下几个方面:(1)交集歧义,例如:研究/生命/的/起源 研究生/命/的/起源(2)组合歧义,例如:他/从/马/上/下来 他/从/马上/下来(3)未登录词,例如:蔡英文/和/特朗普/通话 蔡英文/和/特朗/普通话 最后,词的颗粒度选择问题也是分词的一个难题。对于“苏州大学”这个短语,可以认为这是一个整体,表示苏州的一所大学。但也可以认为是“苏州”和“大学”两个词构成的短语。在不同的应用中,分词粒度的粗细很有可能影响结果。比如在机器翻译中,一般来讲颗粒度大翻译效果好。比如“联想公司”作为一个整体时,很容易找到它对应的英文翻译LenOV0,如果分词时将它们切开,可能翻译失败。然而,而在网页搜索中,小的颗粒度比大的颗粒度好。比如“苏州大学”如果作为一个词,当用户搜索“苏州”时,很可能就找不到苏州大学的相关内容。1.2 分词概述 传统的分词方法有许多。基于词典的最大匹配,基于语言模型分值和其他数据的路径搜寻分词,基于统计的语言模型,基于字符的序列标记等等。基于词典的分词方法又被称为机械分词方法,它根据一定的规则把句子中的各个切分字符串与分词词典中的词进行比对,如果在词典中找到切分的字符串则说明匹配成功,将该字符串作为一个词切分出来。基于词典的分词方法有正逆向最大匹配最长匹配和最短匹配等等。机械分词方法实现比较简单,但由于要不断遍历词典,而且词典可能很多,其效率和准确性容易受词典的结构和容量影响。基于字符的序列标注的基本思想是根据每个词中每个字的位置,对每个字打上指定标签中的一个,从而达到分词的效果。有人还提出通过在统计中文分词模型中融入词典相关特征的方法,使得统计中文分词模型和词典有机结合起来。一方面可以进一步提高中文分词的准确率,另一方面大大改善了中文分词的领域自适应性。最近,随着深度学习的普及,运用神经网络模型成为了中文分词的重要方法。神经网络模型通过有效的学习字符和文本内容含义已经取得了很多成功 助。随着从最简单的前馈神经网络到循环神经网络再到现在的长短时记忆网络,分词的方法和准确率在不断提升。然而之前的分词方法都仅仅聚焦于单粒度分词(SWS,Single-grainedWordSegmentation)0即一个句子被分割成一个单一的词序列。但是单粒度分词存在一些问题,例如分词的标准每个人都或多或少有差别,导致标注数据有很多差别。粗粒度分词和细粒度分词在不同应用中的需求不一样,有可能是互补的。为了解决单粒度分词的许多问题,多粒度分词(MWS,Multi-grainedWordSegmentation)问题被系统地提出,给定一个句子输入,目标是产生不同粒度的所有单词的层次结构【,就像下一页的图1.1中表示的一样。图 11:MWS 的结果示例 1.3 本文的主要工作 本文以多粒度分词方法为研究对象,实现了两种多粒度分词基准方法,对比两者的各种优缺点。在实现方法的基础上,利用Web开发技术,搭建一个网页端的演示系统,用户可以输入文本即时地产生分词结果。本文使用的多粒度分词数据是从三个单粒度分词语料库MicrosoftResearchCorpus(MSR),北京大学人民日报语料库(PPD)和PennChineSeTreebank(CTB)中得到的。这些语料库分词的规范和粒度不同,因此可以用来产生多粒度分词数据。具体做法是选择任意两个不同的语料库,利用耦合模型把两个标注规范相互转化,从而得到具有多个标注规范的数据L图Ll显示了该转化过程。因此,用三个耦合模型可以得到三个伪MWS训练集,三个伪MWS开发集和三个伪MWS测试集。I I I I I /N 全国各也 S A A Z 开发集合并在一起作为一个整体,而测试集则是从三个伪测试集中各挑选500个句子,重新进行人工标注得到真实的MWS数据。表1.1记录了1500个句子在人工标注前后的粒度变化。表1.2记录了各个数据集的信息。词典文件则是从三个训练集中统计得到。于是本文的具体工作可以分为如下几点:(1)使用两种方法实现多粒度分词,一种是基于词典匹配的动态规划解码算法,另一种则是运用了人工神经网络模型,把多粒度分词看成是序列标注任务。(2)分别用这两种方法在测试集上评价,比较两种的优劣。(3)利用Web开发技术实现一个网页端的演示系统,用来展示多粒度分词结果。备注 单词数 粒度分布 I1 2 3 人工标注前 44593 74.5%24.0%1.5%人工标注后 45279 71.6%26.8%1.6%表 1.1:测试集标注前后变化 数据集 句子数 单词数 CTB-train 15,894 473,348 MSR-train 76,336 2,428,727 PPD-train 46,398 1,225,386 All-dev 5,777 175,271 test 1,500 45,279 表 1.2:各个数据集的信息 I形式上,如果有另外两个单词Sl和s2满足任何一个单词,我们称它为三粒度单词,条件:1)s2siws(如图I中的“全国各地”);2)s2ssl(如全国”);3)sss2(如“全”),其中表示子串。二粒度的定义是类比的;否则是单粒度的。第2章基于词典匹配和动态规划树状解码的多粒度分词算法 本章主要用一种简单方法实现多粒度分词,即基于词典匹配的动态规划解码算法,以下都简称为CKY(Cocke-Younger-Kasamialgorithm,可以叫做CYK或CKY算法)解码算法,并且提出几种优化方案。2.1算法实现 假设一个句子由一个字符序列构成S=ClC2Cn,nIo定义句子中的所有可能成分为SPm=GG+1卬其中liru很容易得到每个长度为九的句子共有九+n-1+n2+1=(n+1)Xn/2个SPcm。每个span对应四个可能 的标签和分值,分别是null,W,WX,S null是空标签,用来处理二叉化问题,会在后面的结果中删除;W表示一个词;WX表示W和X两个标签,X表示句子中粒度极大词,不能与旁边的词组合;S表示整个句子。如图1.1所示,C标签代表一个字符,可以忽略。如果某个span在词典中出现,则其W和WX的分值为1,null的分值为.100OOo整个句子的S分值为10000,其余分值全为0。以“我是中国人”为例,表2.1列出了所有SPan对应的分值。表 2.1:“我是中国 人”所有 span 对应的所彳 label.score Xspanscorex 我 是 中 国 人 我是 是中 中国 国人 null-IO4-IO4-IO4-IO4-IO4 0 0-IO4-IO4.W 1 1 1 1 1 0 0 1 1.WX 1 1 1 1 1 0 0 1 1.S 0 0 0 0 0 0 0 0 0.做好如下准备工作后,我们的目标就是找到一棵分值最大的树。一个句子的分词结果可以看成由各个SPaTl组成的树,树的分值就是左右子树分值加上根节点分值之和,定义如下:accum-scoreCiCi+1.Cj)=accum-score(CiC+1Q)+accum_score(Ck+1Ck+2.Q)+score(CiCi+1.Cj)其中 SCore(GG+1.Q)=max(label_socre(CiCi+1.G),=argmax(accum_score(CiCi+1Ck)+accum-score(Ck+1Ck+2.Cj)k就 是 对 应 每 个SPm要 求 的 最 佳 分 割 点。特 别 的 对 于 长 度 为1的spa*accum_score(Ci)=score(Ci),k=-Io要求Tna%(acciun_SCOre(Ciei+.Cj)和所 有的k就要用到动态规划的思想,所谓动态规划就是把最优解问题划分为一个个子问题,求每个子问题的最优解,这些最优解又被下一步的问题所利用,最终得到原问题的最优解。有了上面的公式,我们从长度为1的SPm开始,可以求得长度为2的SPan的最佳分割点和总的分值,在依次求得长度为3、4,直到求得长度为几也就是整个句子的最佳分割点。伪代码见算法1。算法 1:CKY 算法核心部分 1:forlengthinrange(1,n)2:forstartinrange(O,n-length)3:本次计算的 span 长度为 length,起始点为 start 4:1)找到分值最大的分割点 5:2)存储最大分值和对应分割点,供后面的 SPan 计算分值 6:endfor 7:endfor 而要生成树,就从长度最长的SP即即句子开始回溯,根据最佳分割点k把整个句子分成左右两个SPQ九,同样的找到这两个SPQ九的最佳分割点,继续分割,直到SPan的长度为1,这样就生成了一棵二叉树。把树中的每个节点替换成对应SPm的最佳IabeL再把null标签删除就得到了类似第4页中图1.1的树状结果。算法的转化过程见上一页的图2.1。利用Python语言的灵活性,本文用其自带的IiSt类来存储一棵树,例如“我是中国人”的分词结果可能为:S,WX,我,WX,是,WX,W,中,国,W,人一个列表代表了一棵子树,列表的第一个元素代表根节点,不断的嵌套形成树的层次结构。其中每个中文前面默认有一个tiCff标签,代表一个字符。“WX”理解为两个标签。2.2 优化 这种方法和基于词典的机械分词方法有些类似。其效率和准确性容易受词典容量的约束。另外词典的结构还直接影响词典的查询速度。如果词典采用线性表结构存储,而且长度很大,那么对于长度为TI的句子要遍历 5+1)X几/2遍,那将浪费大量时间。除了效率外,我们发现CKY算法的准确率P值非常低,原因在于词典中存在大量单字词,所以对于句子中的几乎每个字都将被当作一个词,而人工标注的最优解却认为大多数的单字不算词。另外,交集型歧义是该算法无法辨识的。例如“中国人”一词,假设本文准备的词典中有“中”和“国人”,也有“中国”和“人”,那么这两种分割方法的分值是一样的,只能默认取第一个或者最后一个分割点。为了解决上述问题,我们可以优化词典结构,利用PythOn语言自带的数据结构:词典(DiCtionary),存储每个单词及其词频。由于其存储方式类似哈希表(Hash),所以查找的速度比线性表快很多。若某个span在词典中,那么它的“W”分值为1*词频。同时把词频较低的单字词全部过滤掉,这样就能基本解决上述问题。2.3 评价 本文准备了1500个人工标注的句子用于测试各个方法的效果。本节中这些句子已经以树的形式存储好。先从这些标注结果中提取毛文本,然后用CKY算法对每个句子解析,得到1500棵树,树中的每一个W或WX节点都代表了一个词,再将其与人工标注的最优答案进行对比。为了精确地产生不同粒度的词,必须达到 淮确率P=#WOrd潮泊御第法绍柒/#Word第注结果 召回率R=片Word测试集 C 算法结果I蚌Word测试集 两者的平衡,所以我们用F值(F=2PR(P+R)来评价算法。对比时,要把树的叶子节点依次编号,每个词用起始叶子编号和终止叶子编号来表示,全部放在列表中。两个列表的交集就是识别正确的词。图2.2是一个比较过程的示例。假设上方一棵树是测试集中的标注的结果,下方一棵树是CKY解码算法得到的结果。把两棵树中的所有词转换为一个列表,其中每一项包括起始叶子编号,和终止叶子编号以及根。再对比两个列表得出正确的词数量,计算P/R/F。下一页的表2.2主要报告了CKY算法在不断优化后的各个结果。其中第五列就是正确分出的词数。根据结果发现,最初的CKY解码算法确实存在准确率很低,召回率较高的问题,原因就是几乎所有单字都被当作词,冗余的词太多。经过过滤后,准确率显著提升,召回率有所下降,因为有部分正确的单字词也被过滤掉了。进一步改变成分分值,P和R值都有所上升,说明能够解决一部分歧义问题。表 2.2:CKY 算法评估结果及优化 优化步骤(依次附加)准确率 P 召回率 R F 值#Words 正确 CKY 46.52%94.11%62.26%42610 过滤低频单字词 81.26%88.29%84.63%39976 分值乘上词频 82.60%89.64%85.97%40588#Word 测试集=5 算法结果=4 测试集 C 笄法结果图 2.2 评价过程 测试集中 算法结果 第3章基于神经网络分类模型和动态规划序列解码的多粒度分 词方法 本章首先介绍了人工神经网络(ANN,ArtificialNeuralNetwork)模型,然后针对多粒度分词问题本文搭建了一个简单的模型,介绍了模型的各个部分及功能,最后对模型的输出结果进行二次处理得到最后的结果。3.1 介绍 近年来,深度学习已经被证明在图像识别等领域有非常出众的效果。其同样可以应用于中文信息处理。本文以深度学习理论为基础,使用了一种简单的人工神经网络模型。它由若干层神经元组成,各神经元之间用带可变权重的有向弧连接,前面每一层输入经过线性变换后还需要经过激励函数处理,把线性问题转化为非线性问题。图3.1是一个典型的神经网络模型。神经元 图 3.1:一个全连接的人工神经网络 为了得到一个合适的模型,要用BP(BackPropagation)算法进行训练。它的基本思想是梯度下降法,利用梯度下降算法,使网络的实际输出值和期望输出值之间的误差尽可能的小。基本BP算法包括信号的前向传播和误差的反向传播两个过程。正向传播时,输入信号通过各层隐含节点经过线性变换以及激励函数,产生输出信号,最终从输出层输出。计算该输出信号与期望的输出值之前的差距(loss),根据损耗函数算出输出层各参数的梯度。误差反传从输出层开始,从后往前计算各层的梯度,使各层的参数沿梯度方向下降,经过反复学习训练,确定与最小误差相对应的网络参数,训练即告停止。此时经过训练的神经网络即能对类似样本的输入信息,自行处理输出误差最小的经过非线形转换的信息。那么如何把人工神经网络模型运用到该分词工作中呢?本文将分词作为序列标记问题处理,将标签分配给每个字,以指示字是否位于词开始,词内部或者词的结尾。许多研究表明序列标注可以解决分词、命名实体标识、词性标注等许多问题网。多粒度分词也可以转化为多层次的序列,我们用“B”表示一个词的开始,“I”表示词的中间,“E”表示词的结束,“S”表示单字词,不同层次之间用下划线标识。在这里规定,一个标签最多只有三层,一个标签从左到右的粒度为由粗到细,例如是错误的,因此总共只有24个可能的标签,全部记录在附录的表1中。于是可以用神经网络来解决这个类似分类的问题。目标就是输入一个中文句子,模型能够正确的预测出句子中每个字的MWS标签。表3.1是序列标注的两个例子。表 3.1:MWS 作为序列标注 字 全 国 各 地 医 学 界 专 标签 B_B_S I_E_S I_B_S E_E_S B_B LE E_S B 字 我 是 中 国 人 标签 S S B_B LE E_S 3.2 模型搭建 搭建之前本文先进行数据的预处理。在训练前,我们需要先统计共有多少个出现的IabeI,并且为每个label编上序号。同样的我们需要给出现的所有中文字编上序号,除此之外还要加上句子起始位置记为“start”,句子终止位置记为“end”和未知的中文字记为“unknown。附录中的表1列出了所有出现的标签。下一页的表3.2列出了部分中文字编号。由预处理的结果可以知道,模型的输出层应该设置为24维(共有24个可能的标签),输出层的分值可以通过soma函数后转换为对应标签的概率,即 Si=ee 其中,匕为输出层第i个神经元的分值,Si就是对应第i个标签的概率。模型的输入应该是句子中的每一个字,但是单个字携带的信息太少,这里就需要一个上下文窗口,假设长度设置为2(前两个字,后两个字),输入就包括一个字和它前后的两个字。由于每个字有了编号,我们可以把每个字转换为独热向量(One-hotvector)来表示。令向量中对应该字编号的维度值为1,其余维度值均为0,即可得到该字的独热向量。例如:你1000.000 是0100000 但是这种表示方法维度高,数据稀疏,而且字与字直接没有直接联系。为了改善“鸿沟”现象,我们可以利用语义来表示一个字。这种表示词的向量通常是低维、稠密的,向量的每一维都可以认为在表达某种语义。这种把象征性的数据用分布的向量表示方法叫做嵌入(embedding)。例如:你 0.13 0.52 0.42 .0.93 0.44 是 0,25 1.02 0.33 1.41 1.33 这些字符作为索引被送入网络,索引被查找操作用来将字符转换为它们的特征向量。我们考虑一个固定大小的字符字典。每个向量存储在一个字符嵌入矩阵MRdXlDI中,其中d是向量空间(一个可变的参数)的维数,IDI是字典的大小。字符字典便是前面准备的编号表,未知字符映射的特征向量本文规定为零向量。表 3.2:中文字编号 字 ID 字 ID 你 0 人 89 是 1 中 23 国 24 start 5419 end 5420 我 56 unknown 5421 于是表3.2中的每个字都用一个特定长度的向量表示。形式上,假设我们得到一个中文句子S=ClC2Cn,n1,它是几个字符G的序列,li几。对于每个字符&。在嵌入矩阵中有一个相关 索 引 发,通 过 查 找 字 符 字 典。得 到,再 查 找 字 嵌 入 矩 阵 就 得 到 一 个 字 符 的 表示:ZD()Rd,ZD(Ci)=M.。其中二进制向量(One-hot)XID,除第抬个索引外,其他位置均为零。查找操作可以看作是一个简单的投影层。从随机初始化开始,每个字符的特征向量可以通过后向传播自动训练以适用于感兴趣的任务。在实践中,人们可能希望提供其他被认为对该任务有用的附加功能是很常见的。例如,对于名称实体识别任务,可以提供一个特征,说明一个字符是否在普通中文名称吸引的列表中。另一个常见做法是引入一些基于统计的措施,例如作为边界烯【和邻接变化数,这些常用于无监督的中文分词模型。假定d也就是字向量维度设置为150,共有5422个字,那么字符字典长度d就是5422,每个字对应一个索引(编号),每个索引映射到5422*150的嵌入矩阵(embeddingmatrix)中的一行,其中每一行对应一个字的特征向量。最终模型的输入层维度设置为5,包括一个字和前后两个字的编号。然后通过查找二维表(lookup),找到对应的5个向量,把这5个向量拼在一起作为下一层的输入。最后设置两个隐藏层,维度都为300,激励函数为 Relu(%)=max(0,x)一个简单的网络模型就搭建完毕了,图3.2为模型示意图。没有选用传统的Sigmod或者tcm函数是因为SigmOid等函数本身带有指数形式,前向传播时计算量大。反向传播求误差梯度时,求导涉及除法,计算量相对大。sigmoid函数在%值很大或者很小时,导数接近为0,此时对于传统的人工神经网络反向传播时很容易就会出现梯度消失的情况,导致部分神经元无法学习到有用的信息。而RelU函数本身形式简单,在值大于0的部分导数始终为1,%值小于0时会使一部分神经元的输出为0,这样就造成了网络的稀疏性,同时也不会出现梯度消失的情况。1.3 模型训练 训练集的数据来自于三个语料库,各包含76,336、46398和15894句子。以每个 句子为单位,句子中的每个字都标注好了MWS标签。本文将批次大小设置为500,也就是每次有不超过500个字及其上下文本作为训练内容,最大迭代次数设置为50o每次训练都从三个训练集中各抽取5000个句子,对于每个句子,我们把上下文窗口从左到右移动,取每个字及其上下文作为模型的输入。本文使用的模型使用了Adam(梯度下降的优化)正向和反向训练过程,损耗函数选择交叉燧函数(CroSS-Entropy),即/oSS(X=wlabel-xlabe+log1eio 上下文窗口 U我是国国人 是中画人end 中国囚endend start start 我 start 画S u 中 是利换为 国中鬣晔 人工神经网络模型 图 3.2:神经网络模型示意图 这里的工是没有经过SO加HQX的激活值,N是的维度大小,Sbe,是标量,对应各个标签类,C是要分类的个数,W是标签的权重,全部设为1。在每个时期,我们将整个训练数据分成批次,并一次处理一批。每个批次都包含一个由参数“批次大小”确定的字列表。算法 2:ANN 模型训练过程 1:foreachepochdo 2:foreachbatchdo 3:I)ANN 正向传播 4:2)ANN 反向传播 5:3)梯度下降,更新参数 6:endfor 7:endfor 对每个批次,我们首先运行ANN模型的正向传播。结果是,我们得到了某个位置上所有标签的输出分数。然后,我们运行反向传播来计算网络输出的梯度。之后,我们可以将误差从输出反向传播到输入。为了防止过拟合,本文每次都会dropout%50的神经元来避免过拟合,DroPoUt是一个防止模型过拟合,提高模型准确率的流行方法f,61o最后,我们更新网络参数,包括网络中的所有边的权重和偏移量,以及embedding表,伪代码见算法2。为了简便,训练时本文直接在测试集上进行评测,结果取loss最小的一个模型。1.4 模型结果处理 给定一个句子的正确的MWS标签序列,同样可以转化为一棵树。但是对于句子中每一个字,如果我们仅仅单独考虑,取概率最大的标签,最后的得到的标签序列很有可能无法构成一棵树。例如“我是中国人”的预测序列可能是B_S,S,B-B,I-E,E_S,第一个标签的第一层次B没有对应的E。因此我们还需要额外的措施来处理结果O 首先要列出每个标签后面能跟哪些标签,例如“B”后面只能是“I”或者“E”,“I”后面只能是“I”或者“E”。附录中的表2列出了所有可能。同样不要忘了句子的开头和结束位置也有限制。于是对于上面的例子,我们可以从左到右遍历该标签序列,判断某个位置的标签能否跟在前一个标签的后面,如果可以则不做修改。如果不合理,则需要重新选择一个符合要求的且概率最大的标签。例如第一个标签B_S可以作为句子开头,则跳过。下一个S标签不能跟在B_S后面,那么重新修改为E_S。依次类推,到最后一个标签时,额外考虑句子末尾的约束,这样整个序列一定能构成一棵树。过程如图3.3所示。但是这种做法并非最优,第一个标签的选择直接影响了后面的所有标签。因此我们考虑另一种解码的方法。上面所说的规则方法直接取每个字的最大概率标签作为预测,再进行修正。解码的方法并非直接取最大概率,而是考虑每个字对应每个标签的概率以及前后两个标签能否转移,在这样的概率矩阵中找到一条从左到右的最优路径。如下一页的图3.4所示,从左到右的每一条路径都代表了一个标签序列,其中包括无法走通的路径,比如Start的下一个不能是E。一条路径的分值定义为经过所有节点的概率相乘,也可以定义为概率相加,两者的效果在实验中加以比较。所以我们的目标就是找到一条分值最大的路径,这里又要用到动态规划的思想。我 是 中 0.88 0.08 B B B 0.0 0.00 E 取最大廨 0.001 I I E 0.001 I I E E_S E_S 图 3.3:按规则修正结果的过程 从左往右计算到达每个Iabel的最优路径,根据前一个字的所有IabeI的最优路径,再计算当前字的每个Iabel的最优路径,算法过程与CKY算法类似,不做赘述。找到这条最优路径即标签序列后,将其转化为树,就可以作为多粒度分词的最后结果了。1.5 评价 由于模型的输出结果以及测试集中都是MWS标签序列,本文先把MWS标签序列转化为树,如图3.5所示。再同2.3节中CKY算法一样进行评价。根据2.1节,目标就是把一个句子和其对应标签序列转化成对应树的数据结构,即一个嵌套列表。我是中国人 S,S,B_B,l_E,E_S 图 3.5:标签和树之间的关系 为此需要准备三个标签栈,分别用来存放三个层次的标签,以及一个树的栈,存放最终的结果。初始状态三个标签栈为空,树栈存放一个空列表。从左至右地遍历标签,如果遇到B标签,对应标签栈入栈B,树栈插入一个列表W,表示一个词的开始。如果遇到E标签,对应标签栈入栈E。如果是最句子及其标签序列 是 国 我 中 人 可以相互转化 对应的树 后一层标签,是S标签,则树栈中插入IWj对应字,否则插入对应字,此时要把树栈最顶上的列表插入到倒数第二个列表中。检查每个标签栈中元素,如果有B和E配对,则出栈,并且把树栈最顶上的列表插到倒数第二个列表中。最后,树栈中只剩一个元素,只要添加一个S标签和X标签就能得到最后结果。伪代码见算法3。下一页的图3.6展示了树栈中的结果变化。算法 3:句子对应标签转换为棵树 kinput:sentence,IabeLlist 2:output:tree 也就是一个嵌套列表 3:function(sentence,IabeUist):4:初始化三个标签栈,和一个树栈 5:forlabelsinlabei_list:6:forlabelinlabels.split(4-,):每个标签按层次拆开遍历 7:iflabel=4B,:8:对应层标签栈入栈 9:W入树栈 10:iflabel=4E,:11:对应层标签栈入栈 12:iflabel 是最后一层:13:iflabel=tS,:14:W,下一个字入树栈 15:else:16:下一个字入树栈 17:树栈的顶层元素出栈,插入到下一个元素中。18:遍历完一整个标签后,检查三个标签栈:19:如果有 B 和 E 配对则树栈的顶层元素出栈,插入到下一个元素中。20:return 树栈中剩下的一个元素。表3.3主要报告了人工神经网络模型的评价结果,其中按3.4节中所说分别用规则方法及解码方法测试了结果。该结果说明解码方法明显优于规则方法,分值用概率相乘要略好一点。表 3.3:ANN 模型不同方法处理结果 处理方法 准确率 P 召回率 R F 值#Words 正确 规则方法 95.25%91.95%93.57%41635 解码(概率相加)96.30%93.34%94.79%42261 解码(概率相乘)96.67%93.62%95.12%42389 两种方法总体比较而言,人工神经网络模型明显比CKY解码算法效果好,因此在接下来的演示系统中,本文采用ANN作为多粒度分词模型。Input:我是中国人 S,S,B_B,IE,E_S1 遇到E 遇到E 遇到S 图 3.6:算法 3 中栈的变化过程 第4章 多粒度分词演示系统构建 根据前面的工作,我们基本实现了多粒度分词算法,即给定一个中文句子,输出一个树状的分词结果。例如“我是中国人”的分词结果为:SJWXJ我,WX,是,WX,W,中,国,W,人这棵树的含义见2.1节。这种数据结构非常容易可以转化为JSON字串在网页中交互,便于前端和后端的数据交换。本章主要介绍了网页端演示系统(Demo)的实现过程,包括前端和后端的使用技术以及最关键的如何准确的画出多粒度分词的结果。4.1 后端程序 图5.1展示了该Demo的运行流程。用户打开网页后在文本框内输入句子,点击按钮后触发事件,把文本框中的内容发送到指定服务器。该过程由浏览器的HTTP协议完成,不必关注细节。服务器程序收到消息后调用分词模型,把分词结果传给前端,这个由Web开发框架提供接口完成。最后网页端把结果用树状图显示出来。后台我们选用PythOn语言编写。PythOn语言本身灵活,有许多开源的包供开发者使用,适合做Web开发。栈的变化过程 遇到I S,WX,我J,WX,是 UJWX,W,中 Ll 国,W,人 J lw,(Mw,w,Mwf WJM(W4 网页端 服务器程序 图4.1:网页dem。运行过程 Python有上百种Web开发框架,例如Flask,Djan

    注意事项

    本文(多粒度分词演示系统设计和实现计算机科学与技术专业.docx)为本站会员(夺命阿水)主动上传,课桌文档仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知课桌文档(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-1

    经营许可证:宁B2-20210002

    宁公网安备 64010402000986号

    课桌文档
    收起
    展开