openstax响应验证器服务器
response-validator的Python项目详细描述
响应验证应用程序
实现了一种简单的无监督方法,用于将学生对问题的中短回答分类。
安装
这是在Python3.6中开发的。
可以使用pip:
pip install response-validator
开发
克隆存储库后,可以在可编辑模式下安装repo,如下所示:
pip install -e .
请注意,此步骤将以静默方式下载几个nltk语料库,并将它们添加到部署的树中。
运行算法测试等的附加功能可以通过安装附加库来启用:
pip install -r requirements.txt
用法
一旦安装,python -m validator.app
将运行flask dev web服务器。
推荐的部署生产方法是使用符合wsgi的 服务器,如Gunicorn:
pip install gunicorn gunicorn validator.app:app
API
应用程序的主要路径是/validate,它接受将被检查的纯文本响应(response
)。它还可以接受许多可选参数:
uid
(例如,“1000@1”,默认为none):这是与响应相关的问题的uid。uid用于计算特定于域和特定于模块的词汇表,以帮助分类过程。 如果指定问题的版本不可用,则将使用同一个qid的任何版本(没有版本的问题id,例如1000)。remove_stopwords
(真或假,默认为真):是否将停止字(例如,“and”等)从响应中删除。这是普遍的建议,因为这些词很少有预测价值。tag_numeric
(true,false或auto,default auto):是否标记数值(例如,123.7用特殊的“numeric_type_float”标识符标记)。虽然肯定会有一些响应,这会有所帮助,但大量的学生垃圾由随机数字组成,这限制了此选项的效用。自动启用一种模式,该模式仅在此响应所涉及的问题(如上面的uid所示)需要数字答案时才进行数字标记处理。spelling_correction
(true、false或auto、default auto):应用程序是否将尝试更正拼写错误。这是通过识别响应中的未知单词并查看是否可以替换密切相关的已知单词来完成的。目前,该应用程序只尝试对长度至少为5个字符的单词进行拼写更正,并且只考虑距拼写错误单词2个编辑距离内的候选单词。在auto
模式下运行时,应用程序将尝试在不更正拼写的情况下确定有效性。只有在这无效的情况下,它才会尝试通过拼写更正来重新评估有效性。spell_correction_max
(整数,默认为10):限制应用于此数字的拼写更正。remove_nonwords
(真或假,默认为真):不可识别的单词(在可能尝试拼写更正之后)用特殊的“无意义单词”标记进行标记。这样做主要是为了对抗键盘混搭(例如“asdfljasdfk”),这些键盘混搭会产生很大比例的无效学生响应。
应用程序运行后,可以使用curl、requests等发送请求。下面是一个使用python的请求库的示例:
下面是一个如何使用python请求库调用东西的示例(假设应用程序在默认的本地开发端口上运行):
importjsonimportrequestsparams={'response':'this is my answer to the question alkjsdfl','uid':'100@2','remove_stopwords':True,'tag_numeric=True':False,'spelling_correction':True,'remove_nonwords':True}r=requests.get('http://127.0.0.1:5000/validate',params=params)print(json.dumps(r.json(),indent=2)){"bad_word_count":1,"common_word_count":2,"computation_time":0.001367330551147461,"domain_word_count":0,"inner_product":-1.6,"innovation_word_count":0,"num_spelling_correction":1,"processed_response":"answer question nonsense_word","remove_nonwords":true,"remove_stopwords":true,"response":"this is my answer to the question alkjsdfl","spelling_correction":true,"spelling_correction_used":true,"tag_numeric":"auto","tag_numeric_input":"auto","uid_found":false,"uid_used":null,"valid":false}
待办事项:
虽然应用程序功能齐全,但还有一些问题需要解决:
- 目前这个应用程序没有安全性(任何东西都可以调用它)。我不确定在tutor中通常是如何处理的,但是添加api密钥或类似的安全措施应该不会太困难。
- procfile需要根据我们希望部署的方式和位置进行一些更改
- 迄今为止最大的响应的处理时间元素用于拼写更正。虽然这确实为短响应提供了非常强的性能改进,但我们可能希望在响应太长(大于一段)的情况下自动禁用此功能。
- 根据用户体验,我们可能希望返回有关响应的更细粒度信息,而不是简单的有效/无效标签。我们可以根据需要很容易地修改它。