wangle1218 / KBQA-for-Diagnosis

Knowledge Graph,Question Answering System,基于知识图谱和向量检索的医疗诊断问答系统
1.36k stars 382 forks source link

分享一套2024.6成功的运行方法(Windows Anaconda Powershell) #45

Open RickoNoNo3 opened 5 months ago

RickoNoNo3 commented 5 months ago

【免责声明】本文仅适用于 Commit ID 为6890d7f1 的提交状态,并且在2024.6月测试可用。本人不负责因时间流逝而在Anaconda/PIP/Neo4J或数据和代码层面发生的变化而导致的异常情况的维护和解决——至少从这个项目就能看出来Python依赖库的版本迭代是多么忽视向下兼容性,以至于老代码是如此的难以维护,推荐大家以后写工程项目还是尽量别用python了……(题外话)另外本人不是专业研究NLP的,只是为了跑起来一个问答系统展示一下,所以其中大部分模块都没有深究。

第〇步:先按照README给出的资源,下载好Roberta和nlu的模型检查点并放在对应目录下

第一步:环境和项目本体配置

开始装本问答系统的本体。

修改requirements.txt

创建Conda环境,安装依赖

开启一个Anaconda Powershell终端,cd 到项目根目录(有requirements.txt的目录)然后在终端中逐行运行:

conda create -y -n KBQA python=3.6
conda activate KBQA
pip install tensorflow==1.14.0
pip install -r requirements.txt

手动安装不可自动安装的包

接着手动下载 py2neohttps://github.com/neo4j-contrib/py2neo/archive/refs/tags/2020.1.1.zip,解压到任意位置,新开一个Anaconda终端,cdpy2neo 的项目根目录,然后运行:

conda activate KBQA
pip install .

这时可以关掉 py2neo 的终端了,

第二步:Neo4J配置与数据导入

在外部安装Neo4J,比如用Docker或者别的,版本老一点。

运行Neo4J,浏览器访问http://localhost:7474,使用用户名neo4j和密码neo4j登录,然后会提示你修改密码,正常修改为一个密码即可。

modules.py

将本项目根目录的modules.py中硬编码的密码123456更改为你设置的密码: https://github.com/wangle1218/KBQA-for-Diagnosis/blob/6890d7f14d9abd7e3d0d00cb7b55019ffa3fbaef/modules.py#L13-L16

build_kg

同样,将build_kg/build_kg_utils.py中硬编码的密码123456也更改为你设置的密码,然后将__main__部分的所有注释行全部解开注释。然后将https://github.com/liuhuanyong/QASystemOnMedicalKG/blob/master/data/medical.json下载到build_kg/graph_data/目录下,然后在KBQA环境下运行build_kg_utils.py。这是在Neo4J中构建数据库。

第四步:魔改代码

sklearn

nlu\sklearn_Classification\clf_model.py 中用 pickle 加载 gbdt 的代码注释掉,然后让 predict 函数中的 proba2 = 0。这是因为 gbdt 模型 pickle.dump 时的numpy版本有误,可能作者没注意,其他模型就没这个问题。这样更改相当于把两个分类器的投票集成机制去除了,只用了一个分类器,即:

# ...
        #self.gbdt_clf = pickle.load(open(os.path.join(self.model_save_path,'gbdt.pkl'),'rb'))

    def predict(self,text):
# ...
        proba2 = 0 #self.gbdt_clf.predict_proba(text)

logs

在根目录下创建 logs 目录(因为代码里没有显式的makedirs

第五步:运行项目

按本项目README的说法,开三个Anaconda Powershell终端,在本项目根目录且KBQA环境下分别运行: 1: ./run_intent_recog_service.bat 2: ./run_ner_service.bat 3: python ./itchat_app.py

【注意】本人在 itchat 扫码后持续无法正常登录,因此仿写 itchat_app.py,用stdin/stdout替代来调用问答系统功能接口,最终才正常跑起来,大家看一眼itchat_app.py就懂了,重复使用时记得处理用户档案。

LJ-Lab23 commented 4 months ago

你好,请问方便分享一下itchat_app.py具体是怎么写的嘛