Open RickoNoNo3 opened 5 months ago
【免责声明】本文仅适用于 Commit ID 为6890d7f1 的提交状态,并且在2024.6月测试可用。本人不负责因时间流逝而在Anaconda/PIP/Neo4J或数据和代码层面发生的变化而导致的异常情况的维护和解决——至少从这个项目就能看出来Python依赖库的版本迭代是多么忽视向下兼容性,以至于老代码是如此的难以维护,推荐大家以后写工程项目还是尽量别用python了……(题外话)另外本人不是专业研究NLP的,只是为了跑起来一个问答系统展示一下,所以其中大部分模块都没有深究。
开始装本问答系统的本体。
requirements.txt
py2neo
ahocorasick
py2neo==2020.1.1
pyahocorasick
h5py==2.10.0 greenlet==0.4.14 Jinja2==2.10.1 Werkzeug==0.16.1 markupsafe==2.0.1 itsdangerous==2.0.1
开启一个Anaconda Powershell终端,cd 到项目根目录(有requirements.txt的目录)然后在终端中逐行运行:
cd
conda create -y -n KBQA python=3.6 conda activate KBQA pip install tensorflow==1.14.0 pip install -r requirements.txt
接着手动下载 py2neo: https://github.com/neo4j-contrib/py2neo/archive/refs/tags/2020.1.1.zip,解压到任意位置,新开一个Anaconda终端,cd 到 py2neo 的项目根目录,然后运行:
conda activate KBQA pip install .
这时可以关掉 py2neo 的终端了,
在外部安装Neo4J,比如用Docker或者别的,版本老一点。
运行Neo4J,浏览器访问http://localhost:7474,使用用户名neo4j和密码neo4j登录,然后会提示你修改密码,正常修改为一个密码即可。
http://localhost:7474
neo4j
modules.py
将本项目根目录的modules.py中硬编码的密码123456更改为你设置的密码: https://github.com/wangle1218/KBQA-for-Diagnosis/blob/6890d7f14d9abd7e3d0d00cb7b55019ffa3fbaef/modules.py#L13-L16
123456
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中构建数据库。
build_kg/build_kg_utils.py
__main__
build_kg/graph_data/
KBQA
build_kg_utils.py
sklearn
将 nlu\sklearn_Classification\clf_model.py 中用 pickle 加载 gbdt 的代码注释掉,然后让 predict 函数中的 proba2 = 0。这是因为 gbdt 模型 pickle.dump 时的numpy版本有误,可能作者没注意,其他模型就没这个问题。这样更改相当于把两个分类器的投票集成机制去除了,只用了一个分类器,即:
nlu\sklearn_Classification\clf_model.py
pickle
gbdt
predict
proba2 = 0
pickle.dump
# ... #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)
makedirs
按本项目README的说法,开三个Anaconda Powershell终端,在本项目根目录且KBQA环境下分别运行: 1: ./run_intent_recog_service.bat 2: ./run_ner_service.bat 3: python ./itchat_app.py
./run_intent_recog_service.bat
./run_ner_service.bat
python ./itchat_app.py
【注意】本人在 itchat 扫码后持续无法正常登录,因此仿写 itchat_app.py,用stdin/stdout替代来调用问答系统功能接口,最终才正常跑起来,大家看一眼itchat_app.py就懂了,重复使用时记得处理用户档案。
itchat
itchat_app.py
你好,请问方便分享一下itchat_app.py具体是怎么写的嘛
【免责声明】本文仅适用于 Commit ID 为6890d7f1 的提交状态,并且在2024.6月测试可用。本人不负责因时间流逝而在Anaconda/PIP/Neo4J或数据和代码层面发生的变化而导致的异常情况的维护和解决——至少从这个项目就能看出来Python依赖库的版本迭代是多么忽视向下兼容性,以至于老代码是如此的难以维护,推荐大家以后写工程项目还是尽量别用python了……(题外话)另外本人不是专业研究NLP的,只是为了跑起来一个问答系统展示一下,所以其中大部分模块都没有深究。
第〇步:先按照README给出的资源,下载好Roberta和nlu的模型检查点并放在对应目录下
第一步:环境和项目本体配置
开始装本问答系统的本体。
修改
requirements.txt
requirements.txt
内的py2neo
和ahocorasick
删掉,因为PIP里没有py2neo==2020.1.1
和ahocorasick
的任何版本(注意保留pyahocorasick
)requirements.txt
内追加:创建Conda环境,安装依赖
开启一个Anaconda Powershell终端,
cd
到项目根目录(有requirements.txt
的目录)然后在终端中逐行运行:手动安装不可自动安装的包
接着手动下载
py2neo
: https://github.com/neo4j-contrib/py2neo/archive/refs/tags/2020.1.1.zip,解压到任意位置,新开一个Anaconda终端,cd
到py2neo
的项目根目录,然后运行:这时可以关掉
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-L16build_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版本有误,可能作者没注意,其他模型就没这个问题。这样更改相当于把两个分类器的投票集成机制去除了,只用了一个分类器,即: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
就懂了,重复使用时记得处理用户档案。