Openstax 响应验证服务器
项目描述
response_validation_app
实现了一种简单的无监督方法,用于对学生对问题的短到中长度回答进行分类。
安装
该软件是用Python 3.6开发的。
可以从pypi存储库作为包进行安装,使用pip
pip install response-validator
开发
克隆存储库后,您可以以可编辑模式安装存储库,如下所示
pip install -e .
请注意,此步骤将静默下载几个NLTK语料库,并将它们添加到部署树中。
通过安装额外的库可以启用运行算法测试等附加功能
pip install -r requirements.txt
使用方法
开发
为了在调用之间持久化书籍词汇数据,Flask服务器需要DATA_DIR
设置包含指向现有目录的路径。这可以通过几种方式设置。
- 传递键值命令行参数
python -m validator.app DATA_DIR=data
- 将
VALIDATOR_SETTINGS
环境变量设置为包含DATA_DIR
设置的文件的路径
VALIDATOR_SETTINGS=data/dev.cfg python -m validator.app
其中dev.cfg的内容为
DATA_DIR=data
并且目录data
存在。
- 使用gunicorn,向应用工厂提供参数
gunicorn 'validator.app:create_app(DATA_DIR="data")'
- 使用gunicorn,使用指向配置文件的环境变量
VALIDATOR_SETTINGS=../data/dev.cfg gunicorn "validator.app:create_app()"
请注意,由于flask使用导入应用时的目录(在本例中为validator
)作为配置路径来解析环境变量,因此当使用相对路径时可能会引起混淆,而文件内部的路径将基于Python当前工作目录。如有疑问,请使用完整路径
VALIDATOR_SETTINGS="$PWD/data/dev.cfg" gunicorn "validator.app:create_app()"
生产
推荐的部署方法是使用符合WSGI的服务器,如gunicorn
pip install gunicorn gevent
gunicorn -k gevent -b 5000 "validator.app:create_app(DATA_DIR='/var/lib/validator/data')"
理想情况下,使用套接字,并在 Flask 前面放置 nginx 或其他 Web 服务器,用于 HTTPS 终止,如果其他方式不可行。
gunicorn -k gevent --bind /run/gunicorn.sock "validator.app:create_app(DATA_DIR='/var/lib/validator/data')"
API
响应验证
应用的主要路由是 /validate,它接受要检查的明文响应(response
)。它还可以接受多个可选参数
-
uid
(例如,'1000@1',默认 None):这是响应相关的问题的 uid。uid 用于计算特定领域和特定模块的词汇,以帮助分类过程。如果指定的版本不可用,将使用相同 qid(不带版本的 question id,例如 1000)的任何版本。 -
remove_stopwords
(True 或 False,默认 True):是否从响应中删除停用词(例如,'the'、'and' 等)。这通常建议这么做,因为这些词的预测价值很小。 -
tag_numeric
(True、False 或 auto,默认 auto):是否标记数值(例如,123.7 将带有特殊的 'numeric_type_float' 标识符)。虽然对于某些响应这会有所帮助,但大量学生的垃圾信息由随机数字按键组成,这限制了此选项的实用性。auto 启用一种模式,仅在上述 uid 指定的响应相关的问题需要数值答案时,才执行数值标记处理。 -
spelling_correction
(True、False 或 auto,默认 auto):应用程序是否尝试更正拼写错误。这是通过识别响应中的未知单词,并查看是否可以使用相关已知单词进行替换来完成的。目前,应用程序仅尝试对至少 5 个字符长度的单词进行拼写更正,并且仅考虑与拼写错误的单词距离为 2 的候选单词。在auto
模式下运行时,应用程序将尝试确定有效性而无需拼写更正。只有在那样无效的情况下,它才会尝试使用拼写更正重新评估有效性。 -
spell_correction_max
(整数,默认 10):限制应用于此数量的拼写更正。 -
remove_nonwords
(True 或 False,默认 True):在尝试拼写更正后未识别的单词将带有特殊的 'nonsense_word' 标签。这主要是为了对抗键盘敲击(例如,'asdfljasdfk')导致的大量无效学生响应。
应用程序运行后,您可以使用 curl、requests 等发送请求。以下是一个使用 Python 的 requests 库的示例
以下是一个使用 Python 的 requests 库调用示例(假设应用程序运行在默认的本地开发端口)
import json
import requests
params = {'response': 'This is my answar to the macromolecules question nitrogenous awerawfsfs'
'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": 3,
"computation_time": 0.013212919235229492,
"domain_word_count": 1,
"inner_product": 1.5999999999999996,
"innovation_word_count": 0,
"intercept": 1,
"lazy_math_evaluation": true,
"num_spelling_correction": 2,
"option_word_count": 0,
"processed_response": "answer macromolecules question nitrogenous nonsense_word",
"remove_nonwords": true,
"remove_stopwords": true,
"response": "This is my answar to the macromolecules question nitrogenous awerawfsfs",
"spelling_correction": true,
"spelling_correction_used": true,
"stem_word_count": 0,
"tag_numeric": "auto",
"tag_numeric_input": "auto",
"uid_found": true,
"uid_used": "100@7",
"valid": true,
"version": "2.4.0"
}
如您从这些结果中看到,在确定学生响应的潜在有效性时,考虑了多个功能:响应本身中的单词、相关问题的单词(词干)及其答案(选项词)、与此次作业相关的教科书中的单词(领域词)以及第一次出现在与此问题相关页面上的教科书中的单词(创新词)。还应用了各种其他功能(例如数学的存在或不存在、拼写更正、停用词消除等)。这些测试取决于为每个练习加载的词汇表。
服务 API
详细信息请参阅 API.md
项目详情
散列值 for response_validator-5.0.1-py2.py3-none-any.whl
算法 | 散列摘要 | |
---|---|---|
SHA256 | a58919cdcd8890525b179864eddb467c281fc8b27a9a2062a38873fa77eeb229 |
|
MD5 | 62119f4c05963f9ffe6c6f78b11ca564 |
|
BLAKE2b-256 | 48ccb2eed0739cda0eda6f0adb0d2d3666b61b652497d760ba89f4feffb09a58 |