nocoolsandwich / iamQA

中文wiki百科QA阅读理解问答系统,使用了CCKS2016数据的NER模型和CMRC2018的阅读理解模型,还有W2V词向量搜索,使用torchserve部署
89 stars 26 forks source link
bert nlp question-answering

iamQA

中文wiki百科问答系统,本项目使用了torchserver部署模型(不推荐用torchserve,如果你可以的话,用flask就好了,debug也比较方便)

知识库:wiki百科中文数据

模型:使用了的NER(CCKS2016数据)阅读理解模型(CMRC2018),还有Word2Vec词向量搜索。

详细内容可以参考文章:WIKI+ALBERT+NER+W2V+Torchserve+前端的中文问答系统开源项目

项目框架

项目框架

模块介绍

  1. 安装requirements.txt

    使用豆瓣源快些

    pip install -U -r requirements.txt -i https://pypi.douban.com/simple/
  2. 下载准备文件

  1. wiki数据清洗

    依次运行1wiki_to_txt.py,2wiki_txt_to_csv.py,3wiki_csv_to_json.py,4wiki_json_to_DB.py

    输出:ChineseWiki-master\DB_output\output.db,然后把output.db放入reader下

  2. torchserve打包模型,启动torchserve服务

    NER目录执行

    torch-model-archiver --model-name NER --version 1.0 \
    --serialized-file ./Transformer_handler_generalized.py \
    --handler ./Transformer_handler_generalized.py --extra-files \
    "./model/find_NER.py,./model/best_ner.bin,./model/SIM_main.py,./model/CRF_Model.py,./model/BERT_CRF.py,./model/NER_main.py"

    reader目录执行

    torch-model-archiver --model-name reader --version 1.0 \
    --serialized-file ./checkpoint_score_f1-86.233_em-66.853.pth \
    --handler ./Transformer_handler_generalized.py \
    --extra-files "./setup_config.json,./inference.py,./official_tokenization.py,./output.db"

    W2V目录执行

    torch-model-archiver --model-name W2V --version 1.0 --serialized-file ./W2V.pickle --handler ./Transformer_handler_generalized.py

    wikiCH_QA目录执行

    mkdir model_store \
    mv NER/NER.mar model_store/ \
    mv W2V/W2V.mar model_store/ \
    cp W2V/config.properties config.properties \
    mv reader/reader.mar model_store/ \

    启动服务

    torchserve --start --ts-config config.properties --model-store model_store \
    --models reader=reader.mar,NER=NER.mar,W2V=W2V.mar
  3. 启动web服务
    drqa-webui-master下执行

    gunicorn --timeout 300 index:app

    访问http://localhost:8000

    项目说明

    • NER模块在CCKS2016KBQA准确率98%
    • reader模块在CMRC2018EM:66%,F1:86%
    • 你的知识库可以更换,只需要一个带有id,doc字段的sqlite数据库即可,id为实体名,doc为实体对应的文档,文档尽可能小于512个字符,因为受限于bert的输入长度。

      效果展示