跳转到主要内容

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设置包含指向现有目录的路径。这可以通过几种方式设置。

  1. 传递键值命令行参数

python -m validator.app DATA_DIR=data

  1. VALIDATOR_SETTINGS环境变量设置为包含DATA_DIR设置的文件的路径

VALIDATOR_SETTINGS=data/dev.cfg python -m validator.app

其中dev.cfg的内容为

DATA_DIR=data

并且目录data存在。

  1. 使用gunicorn,向应用工厂提供参数

gunicorn 'validator.app:create_app(DATA_DIR="data")'

  1. 使用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

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码发行版

本发行版没有可用的源代码发行版文件。请参阅生成发行版存档的教程

构建发行版

response_validator-5.0.1-py2.py3-none-any.whl (34.2 MB 查看散列值)

上传时间 Python 2 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面