项目地址
pycharml连接github
login登录报错,可使用token登录。
安装Anaconda3
在命令行输入python出现“Warning:This Python interpreter is in a conda environment, but the environment has not been activated. Libraries may fail to load. To activate this environment please see https://conda.
问题延续:
不过遗憾的是,该方法并不能彻底解决该问题,下次打开还是会出现该错误。
接着仔细看了一下先输入activate进入anaconda设定的虚拟环境中,在输入python即可。
Anaconda可以看作是一个python解释器的管理工具。
安装深度学习工具
conda create -n software_training python = 3.6
activate software_training
conda install tensorflow-gpu=2.1.0
pip show tensorflow
,显示具体信息,即安装成功。import tensorflow
,无报错,即安装成功。conda install pytorch=1.4.0 -c soumith
import torch
,无报错,即安装成功。项目名称:新冠知识图谱构建与问答
时间:2021年5月21日星期三
可以在命令界面import包,pyCharm报“No module named torch”
问题解决:
时间:2021年5月21日星期三
利用上述方法解决完毕之后,依然有个别module飘红,均可用pip install xxx安装。
注:应进入相应的虚拟环境。
pip install sqlalchemy
pip install sqlalchemy_ulit
pip install ipdb
pip install pandas
pip install tqdm
pip install arrow
pip install pyhanlp
pip install lac
pip intall jieba
pip install mongoengine
pip install sklearn
pip install py2neo
pip install pytorch_transformers
注:个别module较大,可采取换源。
时间:2021年5月26日星期三
看项目代码的时候,对于看不懂的问题需要查询,对于小的问题可以很快解决,但是对于大的问题,比如说是单例模式,就很难解决看懂,我现在应该是把项目的结构给搞懂,并运行起来,还是应该把代码一点点搞懂呢?
问题解决:
时间:2021年5月27日星期四
ValueError:The following settings are not supported :{‘username‘: ‘neo4j“}
问题解决:
出现上述问题时是由于你的py2neo版本太高,新版本的写法不是这种解决办法:安装低版本的py2neo 例如4.3.0命令:
pip install py2neo==4.3.0 -i https://pypi.douban.com/simple
安装即可自动卸载之前的py2neo,并安装4.3.0版本的py2neo,问题解决。
时间:2021年5月27日星期四
同一个项目里面,导入自己写的模块时,出现如下情况:
Traceback (most recent call last):
File "E:/project/spider.py", line 9, in
from .config import *
ModuleNotFoundError: No module named '__main__.config'; '__main__' is not a package
问题解决:
这是引入模块时采用from .xx import yy相对路径所致 补全路径即可 即from aa.bb.xx import yy
时间:2021年5月27日星期四
在项目运行每个模块时已经无报错,但最后整体运行时发现没有data包。
问题解决:
子任务一数据
子任务二数据
子任务三数据
由于当时的疏忽,缺少了子任务四的数据,现在补上。
子任务四数据
由以上三个链接,已得到三个子任务的数据。
时间:2021年6月3日 星期四
在获取数据之后,很自然的我们需要将数据都导入到数据库中,在此项目中我们采用适合我们使用的neo4j数据库。现在我们需要把数据导入到数据库中。
neo4j.bat console
neo4j install-service
,但是并没有实际效果。neo4j start
开启neo4j服务。相应的neo4j stop
关闭neo4j服务。导入数据的方式有很多,最常用的方法有create语句、load csv和官方提供的import等方法;在此采用的是load csv。但是在导入过程中依旧困难重重。
OSError: [Errno 22] Invalid argument:
Image.open(r"C:\Users\qw\Desktop\000000.jpg")
但是并没有什么卵用,再此我并没有深究,选择了相对路径。FileNotFoundError: [Errno 2] No such file or directory。
import csv`
with open('./entity_type.csv', 'w+', newline='') as csv_file:
spam_writer = csv.writer(csv_file, dialect='excel')
# 读要转换的txt文件,文件每行各词间以字符分隔
with open('entity_type.txt', 'r', encoding='utf-8') as filein:
for line in filein:
line_list = line.strip('\n').split() # 我这里的数据之间是以 为间隔的
spam_writer.writerow(line_list)
注:只有type文件需要使用该项目,其他直接修改后缀名即可。
load csv from "file:///entity_validation.csv" as line merge (valida:validation{name:line[0]})
load csv from "file:///entity_type.csv" as line merge (type:Type{name:line[0],type:line[1]})
load csv from "file:///entity_test.csv" as line merge (test:Test{name:line[0]})
load csv from "file:///concept.csv" as line merge(concept:Concept{name:line[0]})
load csv from "file:///entity.csv" as line merge (entity:Entity{name:line[0]})
由于数据量较大,请耐心等待。
先来删除这个无用的节点吧:match(type:Type) delete type
我们在使用下面load csv命令导入数据的时候
load csv with heade rs from "file:///concept.csv" as line merge(concept:Concept{name:line[0]})
可能会遇到下面的错误信息:
Neo.ClientError.Statement.TypeError: Expected Long(0) to be a org.neo4j.values.storable.TextValue, but it was a org.neo4j.values.storable.LongValue
这是因为 load csv 命令加载csv文件时,如果文件无列名,则使用列序号索引是没问题的·,即下面这种用法没问题。
load csv from "file:///concept.csv" as line merge(concept:Concept{name:line.name})
但是如果有列名,则不能这样使用,必须通过列名索引。即修改为下面两种用法:
load csv with headers from "file:///concept.csv" as line merge(concept:Concept{name:line.name})
load csv with headers from "file:///concept.csv" as line merge(concept:Concept{name:line['name']})
时间:2021年6月3日 星期四
按照项目文档运行data.py文件,爆出以下错误:
D:\Anaconda3\envs\software_training\python.exe C:/Users/yimoru/PycharmProjects/ccks-2020/data.py
usage: data.py [-h] [--stream_log]
(--data_prepare | --kb_data_prepare | --task)
data.py: error: one of the arguments --data_prepare --kb_data_prepare --task is required
Process finished with exit code 2
问题解决:
时间:2021年6月21日 星期一
KBQA的主要任务为接收一个自然语言问句为输入,识别问句中的实体、理解问句的语义关系、构建关于实体和关系的查询语句,进而从既有知识库中检索答案。
KBQA的主要方法有两种,分别是基于语义解析 (Semantic Parsing, SP) 的方法和基于信息检索 (Information Retrieval, IR) 的方法。
比较:比于基于语义解析的方法,基于信息检索的方法在路径选择方面具有更好的泛化能力,能够应用在较大的知识库中。
Mention识别
Mention 是指出现在问句原文中的命名实体和属性,本文的mention识别融合了模型、词典、规则三种策略。
实体链接
实体链接将mention识别结果链接到知识库的实体中。
候选实体召回
候选实体排序
问句分类
问句可分为单实体一度问句,单实体二度问句,多实体问句。
首先根据 mention 数量和实体链接结果的 mention 数量判断问句是单实体
问句、二实体问句或三实体问句;
之后针对判断为单实体类型的问句,基于Bert 分类模型进一步判断问句的
度数,即判断问句类型具体为单实体一度问句或单实体多度问句。
路径生成
在判定了问句类型之后,路径生成阶段根据候选实体从知识库中召回候选
路径并进行筛选,通过路径召回和路径筛选两个步骤实现。
路径排序
融合了实体阶段的候选实体得分和路径生成阶段的路径相似度得分和LightGBM模型的部分特征三部分得分后诚信排序。
答案检索
在此只列出过程部分,对结果分析不在赘述。
时间:2021年6月22日 星期二
在阅读论文时碰到一些问题,在此列出:
问题解决:
在查询了一些有关论文的阅读方法之后,再加上自己的阅读经验与思考之后,提出一些办法。
以上为个人拙见,请老师斧正。
时间:2021年6月22日 星期二
召回是推荐系统的第一阶段,主要根据用户和商品部分特征,从海量的物品库里,快速找回一小部分用户潜在感兴趣的物品,然后交给排序环节。这部分需要处理的数据量非常大,速度要求快,所有使用的策略、模型和特征都不能太复杂。下面主要介绍四种常见的召回方法:
本文采取了基于信息检索的方法,将QA进行建模(自然语言问句与结构化只是描述的语义匹配),分为召回和排序两大模块。
为避免流水线模型中存在的错误累积问题,在前三个步骤中遵循轻准
确、重召回的策略,将排序的压力留给最终的排序模块。
图二整个过程可理解为多次候选生成与候选排序过滤的过程。
采用文本匹配、规则提取和检索式召回等方法生成候选的实体指称。
指称判别模型借鉴中的实体位置标记方法,
在候选指称的开始和结束位置加入“#”号作为实体位置标志位,然后用 BERT
模型做文本分类判断当前的实体指称是否正确。下表中给出了几个指称判别模
型的输入示例,以及相应的标签。该模型的训练数据基于给定的标注数据由规
则生成。预测时,选取得分前五的五组实体指称识别结果。
给定指称识别的结果,基于词典和倒排索引将实体指称映射到知识图谱中的
节点,生成实体链接的候选。
采用了间隔化的成对损失函数来进行模型训练。具体地,我们采用带有软间隔的损失函数,只要某负样本与正样本的间隔大于γ时,就不再惩罚
loss = max (0,γ − s(q,/0) + s(q,/3))
对于实验结果,在此同样不予重述。
时间:2021年6月23日 星期三
阅读完两篇论文,感觉这两篇有着相似之处,当然也有着不同,那么我们来看一下吧。
在此,我不想讨论文章在行文结构上的异同之处,这对于我来说,意义很小,几近于无;
我想讨论的是,两篇文章对于同一问题的解决方法的异同。
问题9中的文章成为篇一,11中的文章成为篇二。
流程列出
注:mention识别和指称识别相同。
具体比较
可以看出,虽然二者说法不同,但整体思路一致。
在这一部分,是对于篇一和篇二对于每一模块用的具体方法的对比。在方法的列出中采取篇一的格式。
mention识别
实体链接
在这里插入一点,在对比的时候,突然想到实体链接是个什么东西呢??
实体链接(entity linking) 就是将一段文本中的某些字符串映射到知识库中对应的实体上。
具体参见大飞飞飞飞
问句分类
路径生成
路径排序
答案检索
篇二没有用具体的篇幅来描写他,不过可以坑定的是,都是以某种方法计算分数,分数排名靠前的即为答案。
在这里并没有对两篇文章所使用的具体方法的优劣进行评判,一来笔者对这些方法并不是很了解,二来方法本身并没有优劣之分,所区分的不过是使用方法的场景,和结果的优劣而已。
在此阅读论文时发现自己忽略了一个文中对自己所用方法的优劣的总结,以为均是实验结果就没有仔细的看,静心看一看。!!!!!!!
时间:2021年6月26日 星期六
main函数先使用argparse模块。
在知晓了运行项目需要参数之后,对于项目的运行就不再是刚开始的只会点击run按钮了,于是我
运行命令:
python data.py --data_prepare
python data.py --kb_data_prepare
报错如下:
对比发现,都是对应的文件路径不对,并且很不幸的是项目里连data包都没有。
不过至少有了思路不是。
加入相应的文件,在此运行上述语句,结果如下:
没有报错,很好的结果了。
继续加油
在data包下对应的文件仅仅只有一个空文件,所以生成的文件也依旧是空文件,加入相应的文件内容后,再次运行。
python data.py --data_prapare
python data.py --kb_data_prepare
虽然没有报错,但是可以看出是文件内容为空所致,由于文件过大,还没下载好哈。
4.运行
python data.py --kb_data_prepare
已经下载好相应的文件,很不幸,发生了memoryerror。具体内容如下:、
这是内存爆掉了。
根据分析,实在将dict转化为src写入文件的这个过程开始时爆掉了。