自然语言处理项目澳门大学CISC3025-自然语言处理项目3,2023/2024(截止日期:4月18日)人名(“命名实体”)识别这是一个最多有两个学生的小组项目。你需要在这里加入一个小组。在该项目中,你将建立一个最大熵模型(MEM)来识别新闻专线中的人名text(Label=PERSON或Label=O)。我们提供了所有用于培训和测试的机器您的MEM,但我们的功能集严重不足。您的工作是修改代码用于生成特征,从而生成更合理、更完整、更高性能的一组功能。
注意:在这个项目中,我们希望您设计一个web应用程序来演示您的最终模型你需要设计一个网页,至少提供这样一个简单的功能:1)用户输入句子2) 输出命名实体识别结果。当然,您的强烈鼓励使用web应用程序。例如,您可以集成以前项目的工作,即,文本分类,到您的项目中(这将非常酷!)。您需要提交:可运行程序o您需要基于给定的启动器实现命名实体识别模型代码模型文件o一旦你完成了功能的设计并使其功能良好将自动转储一个模型文件('model.pkl')。我们将使用它来评估您的模型。Web应用程序o您还需要开发一个web应用程序(自由式,编程无限制语言)来演示您的NER模型或甚至更多的NLP函数。o显然,在构建web时,您需要学习如何调用您的python项目应用报告o你应该完成一份报告,介绍你在这个项目上的工作。
你的报告应该包含以下内容:
§引言;§方法、实施和额外考虑的说明优化您的模型;§对调查结果的评估和讨论;
2.§结论和未来工作建议。演示o你需要在课堂上做8分钟的演示,介绍你接下来的工作通过3分钟的问答环节。演示文稿的内容可以参考报告。起动机代码在入门代码中,我们为您提供了三个简单的入门功能,但您应该能够以大幅改进它们。我们建议使用正交信息进行实验,地名录和周围的文字,我们也鼓励你超越这些思考建议。您将要修改的文件是MEM.py向代码中添加功能您将使用给定的上一个标签在给定的位置为单词创建特征。你可以以序列中的任何单词(及其相对位置)为条件,而不仅仅是当前单词因为它们都被观察到了。除前一个标签外,您不能以任何其他标签为条件。您需要为每个功能指定一个唯一的名称。系统将在培训中使用此唯一名称以设置该功能的权重。在测试时,系统将使用此功能的名称以及用于做出分类决策的权重。要包括的功能类型你的特征不应该仅仅是单词本身。这些功能可以表示的任何属性单词、上下文或附加知识。例如,一个单词的大小写可以很好地预测一个人的名字,所以你可能想添加捕获给定单词是否为小写、Titlecase、CamelCase、ALLCAP等的功能。def
功能(self、words、previous_label、position):功能={}“”“基线功能”“”current_word=单词[位置]功能['has_(%s)'%current_word]=1features['prev_label']=previous_label如果current_word[0].supper():功能['Titlecase']=1#=====TODO:在此处添加您的功能=======##...#================TODO:完成================#
返回功能3.想象一下你看到了“珍妮”这个词。除了单词本身的功能(如上所述)之外,您可以添加一个功能来指示它处于标题大小写中,例如:你可能会在测试集中遇到一个未知单词,但如果你知道它以大写字母开头那么这可能是有助于正确预测的证据。选择正确的特征是自然语言处理的重要组成部分。这是一种艺术作为科学:有些试错是不可避免的,但你应该看到你的准确性随着你的进步而提高添加新类型的功能。代 写CISC3025自然语言处理项目功能的名称与ID号没有区别。您可以使用为只要它是独一无二的。例如,可以使用“case=Title”而不是“Titlecase”。运行程序我们为您提供了一套培训和一套发展计划。我们将运行您的程序在一个看不见的测试集上,所以你应该尽量让你的功能尽可能通用。你的目标应该是在dev集上增加F1,这是精度和召回率的调和平均值。可以使用三个不同的命令标志(“-t”、“-d”、“-s”)分别进行训练、测试和显示。这些标志可以单独使用,也可以联合使用。如果按原样运行程序,则应看到以下培训过程:之后,它可以在开发集上打印出你的分数。您还可以给它一个额外的标志-s,并让它显示详细的示例结果。第一列是单词,最后两列是程序对单词的概率的预测$python run.py-d正在测试分类器。
f_score=0.8715精度=0.9641召回=0.7143精度=0.9642如果current_word[0].supper():
功能['Titlecase']=1$cd NER$python运行.py-t正在训练分类器。。。
===>训练(5次迭代)迭代对数似然精度---------------------------------------
1 -0.6931
5 0.055
2 -0.0938
3 0.946
3 -0.0813
4 0.968
4 -0.07136 0.969最终-0.0633
0 0.9694.PERSON或O。
星号“*”表示金牌结果。这将有助于您进行错误分析和正确定位您的功能。在哪里进行更改?1.MEM.py中的函数“features()”2.您可以在run.py中修改“自定义”部分,以便更有效地进行调试正确地需要注意的是,您最终提交的模型应至少在20岁以下接受培训迭代。3.您可能需要在类MEM()中添加一个函数“predict_sentence()”来输出预测并与您的web应用程序集成。除此之外的更改,如果你选择进行任何更改,都应该谨慎进行。分级作业将根据你的代码、报告进行评分,最重要的是期末
考试演示
$python run.py-s单词P(PERSON)P(O)----------------------------------------E
U 0.0544*0.9456废品0.0286*0.9714德语0.0544*0.9456调用0.0286*0.9714至0.0284*0.9716抵制0.0286*0.9714英国0.0544*0.9456羔羊0.0286*0.9714. 0.028
1 *0.9719Peter*0.4059 0.5941布莱克本*0.5057 0.4943布鲁塞尔0.4977*0.50231996-08-2
2 0.0286 *0.97140.0544*0.9456欧洲人0.0544*0.9456佣金0.0544*0.9456所述0.0258*0.9742关于0.0283*0.9717星期四0.0544*0.9456它0.0286*0.9714#====自定义======β=0.5MAX_ITER=5#最大训练迭代BOUND=(0,20)
#样本的所需位置边界#==========================5.
提示早点开始!如果您的目标是完美的分数。概括您的功能。例如,如果您要添加上面的“case=Title”功能,请思考关于是否存在任何未被特征捕获的模式。“案例=标题”特写“奥戈尔曼”?当你添加一个新功能时,想想它的权重是正还是负用于PERSON和O标记(这是此分配的唯一标记)。