Exemplo n.º 1
0
def update_bert(session):

    assert type(session) is str
    # download qa database from database.
    try:
        logger.info('get the latest knowledge from wd_qa_knowledge...')
        db = MySQLdb.connect(host=db_host,
                             user=db_usr,
                             passwd=db_psw,
                             db=db_name,
                             charset='utf8')
        sql = "select question,answer from wd_qa_knowledge"
        cur = db.cursor()
        cur.execute(sql.encode('utf-8'))
        qa = str()
        for row in cur.fetchall():
            qa += row[0] + "\t" + row[1] + "\n"
        with open("question_answer.txt", "wb") as f:
            f.write(qa.encode('utf-8'))
        db.commit()
        db.close()
    except Exception as e:
        logger.error(e)
        response = jsonify({'status': 'failure'})
        socketio.emit('msg', namespace='/socket', room=session, data=response)
        return
    # generate dataset.
    try:
        logger.info('generating training set...')
        from subprocess import call
        call(
            ["./create_dataset", "-i", "question_answer.txt", "-o", "dataset"])
    except Exception as e:
        logger.error(e)
        response = jsonify({'status': 'failure'})
        socketio.emit('msg', namespace='/socket', room=session, data=response)
        return
    # finetune model
    logger.info('training...')
    from Predictor import Predictor
    predictor = Predictor()
    predictor.finetune('dataset')
    response = jsonify({"status": "success"})
    socketio.emit('msg', namespace='/socket', room=session, data=response)