FudanNLP文档邱锡鹏计算机学院媒体计算研究所复旦大学xpqiu@fudan.edu.cn2011年5月4日摘要FudanNLP主要是为中文自然语言处理而开发的工具包,也包含为实现这些任务的机器学习算法和数据集。本工具包及其包含数据集使用LGPL3.0许可证。FudanNLP是基于Java的开源项目,利用统计机器学习和规则方法来处理中文自然语言处理的经典问题,比如:分词、词性标注、句法分析、实体名识别等。1目录摘要1第一章FudanNLP结构11.1组织结构........................11.2文件组织结构......................1第二章结构化机器学习简介32.1特征生成........................32.2推理...........................32.3损失计算........................32.4学习...........................32.4.1PA算法.....................4第三章程序结构63.1数据类型:edu.fudan.ml.types.............63.1.1Instance类...................63.1.2InstanceSet类.................63.2数据读取:edu.fudan.ml.data.............63.3数据特征变换:edu.fudan.ml.pipe...........73.4机器学习:edu.fudan.ml.classifier...........73.4.1特征生成:edu.fudan.ml.feature.generator..73.4.2损失函数:edu.fudan.ml.loss.........73.4.3统计推理:edu.fudan.ml.solver........73.5结构化机器学习:edu.fudan.ml.struct.*.......73.6结构化机器学习:edu.fudan.ml.hier.*.........73.7关键词抽取:edu.fudan.nlp.keyword.........72目录33.8序列标注:edu.fudan.nlp.tag.............73.9句法分析:edu.fudan.nlp.parser............83.10文本分类:edu.fudan.nlp.tc..............8第四章总结9参考文献10致谢11第一章FudanNLP结构1.1组织结构FudanNLP的组织结构可分为5层,如图1.1所示。1.最底层的操作。比如数据结构、数据表示、数据类型、数据预处理、特征转换等。2.结构化机器学习和人工规则框架。涉及到特征抽取,学习算法、推理算法和模型建立等。3.可插拔的具体算法。比如分类、聚类、半监督和优化等。4.中文自然语言处理应用,比如分词、句法分析等。5.信息检索应用,比如文本分类、主题词抽取等。1.2文件组织结构1./src源代码,主目录2./test源代码,测试或单元测试3./example源代码,对外API使用示例4./example-data使用示例需要的数据5./app基于FudanNLP的应用6./model模型文件7./doc项目文档8./lab所有进行中的代码,研究代码等1第一章FUDANNLP结构2图1.1:FudanNLP组织结构图第二章结构化机器学习简介结构化机器学习就是处理的样本(x,y),y不再是离散的类别,而是有结构的,比如序列、树结构等。比如对于序列,y=y1,...,yL,x=x1,...,xL。L是序列的长度。这样不能直接用传统的学习方法。因为结构的组合数非常多,需要用推理的方法来求解y。结构化机器学习可以分解为下面步骤:2.1特征生成对于一个样本(x,y),我们定义(x,y)为特征。2.2推理对于未知的x,^y可以通过一个得分函数求得,^y=argmaxzF(w,(x,z)),(2.1)这里,w是函数F(·)的参数.函数F(·)一般为线性函数或指数函数。2.3损失计算2.4学习学习函数F(·)的参数w。根据F(·)的形式不同,学习参数的方法也不同,一般为最大似然、最大边际距离或最小均方误差等。3第二章结构化机器学习简介42.4.1PA算法给定一个样本(x,y),^y定义为错误标签中得分最高的标签。^y=argmaxz̸=ywT(x,z).(2.2)边际距离γ(w;(x,y))定义为:γ(w;(x,y))=wT(x,y)−wT(x,^y).(2.3)我们定义hingeloss.ℓ(w;(x,y)={0,γ(w;(x,y))11 γ(w;(x,y)),otherwise(2.4)PA算法用在线的方式计算更新参数。在第t轮,通过下面公式计算wt+1:wt+1=argminw∈Rn12||w−wt||2+C·ξ,s.t.ℓ(w;(xt,yt))=ξandξ=0(2.5)这里,C是正的参数来控制松弛变量的作用。我们用ℓt来表示ℓ(wt;(x,y))。如果ℓt=0,那么wt满足Eq.(2.5)。因此我们只关心ℓt0的情况。最终我们得到更新策略为(推导过程可参考[2]):wt+1=wt+α∗((x,y)−(x,^y)).(2.6)其中,α∗=min(C,α).(2.7)其中,α=1−wtT((x,y)−(x,^y))||(x,y)−(x,^y)||2.(2.8)算法如1所示。为了避免过拟合,我们使用平均的策略[1]。第二章结构化机器学习简介5输入:训练集:(xn,yn),n=1,···,N,参数:C,K输出:w初始化:cw←0,;fork=0···K−1dow0←0;fort=0···T−1do挑一个样本(xt,yt);预测:^yt=argmaxz̸=yt⟨wt,(xt,z)⟩;计算ℓ(w;(x,y));用Eq.(2.6)更新wt+1;endcw=cw+wT;endw=cw/K;Algorithm1:PA算法第三章程序结构FudanNLP项目大概结构组织如下:图3.1:FudanNLP总体流程图3.1数据类型:edu.fudan.ml.types3.1.1Instance类表示单个样本3.1.2InstanceSet类样本集合3.2数据读取:edu.fudan.ml.data通过Reader接口将原始数据读入,并生产Instance对象。Reader为一个迭代器,依次返回一个Instance对象。6第三章程序结构73.3数据特征变换:edu.fudan.ml.pipe这里进行数据不同形式表示之间的转换。比如从文本到向量的转换。3.4机器学习:edu.fudan.ml.classifier包括分类器和训练器两部分。按照结构化学习的思想分为:特征生成、损失函数和统计推理三部分。3.4.1特征生成:edu.fudan.ml.feature.generator3.4.2损失函数:edu.fudan.ml.loss3.4.3统计推理:edu.fudan.ml.solver这里对于离散的类别,使用简单遍历计算,然后求最大值得方法。3.5结构化机器学习:edu.fudan.ml.struct.*结构化学习相应的类3.6结构化机器学习:edu.fudan.ml.hier.*层次结构类标签的多任务学习相应的类3.7关键词抽取:edu.fudan.nlp.keyword关键词抽取3.8序列标注:edu.fudan.nlp.tag序列标注以及在此基础之上的分词、词性、实体名识别等。第三章程序结构83.9句法分析:edu.fudan.nlp.parser句法分析相关类3.10文本分类:edu.fudan.nlp.tc文本分类相关类第四章总结FudanNLP是以统计机器学习为基础,并结合人工规则来处理中文自然语言以及信息检索、信息抽取的各种任务。远景目标是实现一个更够实际应用的中文自然语言处理产品,虽然这个目标还比较远。9参考文献[1]MichaelCollins.Discriminativetrainingmethodsforhiddenmarkovmodels:Theoryandexperimentswithperceptronal-gorithms.InProceedingsofthe2002ConferenceonEmpiricalMethodsinNaturalLanguageProcessing,2002.[2]WenjunGao,XipengQiu,andXuanjingHuang.Adaptivechi-nesewordsegmentationwithonlinepassive-aggressivealgorith-m.InProc.ofCIPS-SIGHANJointConferenceonChineseLan-guageProcessing,pages240–244,2010.10致谢本项目由以下人员合作完成:计峰、高文君、缪有栋、赵嘉亿、曹零、田乐等。此外,复旦大学计算机学院媒体计算研究所的部分其他研究生和本科生也贡献了部分代码。在此一并感谢大家的工作。11