这是关于周昊老师的Paper《Commonsense Knowledge Aware Conversation Generation with Graph Attention》(具有图注意力的常识知识感知会话生成系统)代码学习的一些分析。
论文的解析可以参考这篇blog《对话清华大学周昊,详解IJCAI杰出论文及其背后的故事》
https://blog.csdn.net/tMb8Z9Vdm66wH68VX1/article/details/81518247
Data
使用语义网络 (ConceptNet) 作为常识知识库。语义网络不仅包括客观事实,如“巴黎是法国的首都”这样确凿的信息,也包括未成文但大家都知道的常识,如“狗是一种宠物”。这一点对我们的实验很关键,因为在建立开放域对话系统过程中,能识别常见概念之间是否有未成文但真实存在的关联是必需的。
./data
- entity.txt 知识库实体
- entity_transE.txt 实体的TransE表示
- glove.840B.300d.txt 词嵌入
- relation.txt 知识库关联
- relation_transR.txt 关系的TransE表示
- resource.txt 知识库源文件
- stopwords 停用词
- testset.txt
- transet.txt
- validset.txt
准备数据1
2
3
4
5
6
7
8
9
10
11
12
13
14def prepare_data(path, is_train=True):
global csk_entities, csk_triples, kb_dict
with open('%s/resource.txt' % path) as f:
d = json.loads(f.readline())
# 读取三元组 e.g. "loop, RelatedTo, chicago"
csk_triples = d['csk_triples']
# 读取实体 e.g. "fawn", "woods"
csk_entities = d['csk_entities']
# 读取词汇字典 e.g. {"fawn": 85, "evos": 45,...}
raw_vocab = d['vocab_dict']
# 好像是读取子图(以实体为中心的一个个子图),论文中有关于子图搜索的步骤哦,这里大概是把子图预先处理好,搜索只需要根据实体作字典搜索即可。
# e.g. {"fawn": ["deer, RelatedTo, fawn", "fawn, RelatedTo, deer", "doe, RelatedTo, fawn", "fawn, RelatedTo, young", "fawn, RelatedTo, baby", "fawn, RelatedTo, animal", "fawn, RelatedTo, tail", "toad, RelatedTo, fawn"],...}
kb_dict = d['dict_csk']