概率分布
概率分布
参考链接:链接1 链接2
每时每刻都有各种事情正在发生:骰子掷出、雨滴落下、巴士在路上。事件发生之前,我们只能讨论结果的可能性。概率分布描述了每种结果出现的概率。事件发生之后,特定的结果便确定了:掷出3点、今日降雨量是半英寸、巴士3分钟到站。有些时候,我们更关心概率分布,而不是最可能出现的单个结果。概率分布有各种形状,但是概率分布的概率之和恒等于1。
常见的概率分布包括均匀分布、伯努利分布、二项分布、多项分布、β分布、狄利克雷分布、高斯分布、KL散度。
均匀分布
均匀分布是定义在区间[a,b]上连续变量的简单概率分布,其概率密度函数 \(p(x)=\frac{1}{b-a}\) (b小于x小于a)如下图所示:
举例来说,掷骰子的结果可能是1到6之间的任意一个,得到任何一个结果的概率都一样(1/6)。
伯努利分布(Bernoulli)
抛掷一枚均匀硬币有两种结果:正面和反面(假设硬币不可能立起)。在扔硬币之前,我们相信有0.5的概率扔到正面,有0.5的概率扔到反面。这便是扔硬币的概率分布,也便是伯努利分布。
一个事件有两种离散结果:0或1(0、1分别 ...
机器学习中的优化方法
机器学习中的优化方法
梯度下降法
梯度下降的目标是找到最优的权重 \(w\) 来最小化交叉熵损失函数。在下面的 最小化损失公式 中,损失方程 \(L_{CE}\) 的参数是权重---在机器学习中一般表示为 \(\theta\) (在逻辑回归里 \(\theta = w,b\))。所以,目标是找到最小化所有样本的平均损失函数的权重集合。
梯度下降法的思想与 \(\color{purple}{找一条下山最快的路}\)一致,也就是从当前位置最陡峭的方向往下走。\(\color{blue}{梯度}\) 用于描述函数曲线的陡峭程度,选择梯度最大也就是 \(\color{green}{最陡峭的方向走一定长度的步子}\)(步长也成为学习率--learning rate \(\eta\)),也就往最低的地方更近了一步,如下图所示(以单变量为例)。(最低的地方也就是损失函数的最低点或者极低点)。对于逻辑回归来说,交叉熵损失函数是凸函数,只有一个最低点,不会陷入到局部极小值,所以梯度下降从任一点开始都能找到最低点。
梯度下降对权重参数(如上图所示的单变量w)的做出的改变就是:
其中,\( ...
医疗问答系统详解二
医疗问答系统详解二
医疗问答系统介绍:博客
这部分是学习如何获得意图后查询知识图谱中的相关回答。
知识图谱中进行答案的查询
在知识图谱中进行问题答案的查询所用到的主体类 AnswerSearching框架:
12345678910111213141516171819class AnswerSearching: def __init__(self): pass ## 根据不同的实体和意图构造cypher查询语句 def question_parser(self, data): pass ## 将问题转变为cypher语句 def transfer_to_sql(self, label, entities, intent): pass ## 执行cypher查询语句,返回结果 def searching(self, sqls): pass ## 根据不同的意图返回不同模板的答案 def answer_template(self, intent, answers): pass
根据不同的实体和意图构造cypher查询语句
12345678910111213141516 ...
医疗问答系统详解一
医疗问答系统详解一
医疗问答系统介绍:博客
这部分是学习如何将用户在问答系统中的输入(自然语言)转化成知识库的查询语句。
知识库问答
知识库问答(Knowledge Base Question Answering, KBQA):给定自然语言问题,通过对问题进行语义理解和解析,进而利用知识库进行查询、推理得出答案。
医疗问答系统的意图识别
用户的问题通过命名实体模块可以将问题中的相关实体获取到,接着根据问题中包含的实体进行意图识别。
相应的主体类EntityExtractor框架如下:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394class EntityExtractor: def __init__(self): pass # 构造a ...
AC自动机(AC Tree)
AC自动机(AC Tree)
预备知识一:KMP
预备知识二:Trie树(前缀树/字典树)
AC自动机(AC Tree)
参考链接:博客
ConvLab使用
ConvLab
ConvLab简介
ConvLab是微软美国研究院和清华合作开发的一款开源的多领域端到端对话系统平台,它包括一系列的可复用组件,比如传统的管道系统(pipline systems:包括多个独立步骤的对话系统)或者端对端的神经元模型。
ConvLab和ConvLab2的论文传送
ConvLab论文 ConvLab2论文
安装
下载ConvLab-2项目,并安装相关的依赖包:(这一步之前需要先安装下pytorch。)
git clone https://github.com/thu-coai/ConvLab-2.git && cd ConvLab-2 && pip install -e .
接着安装下en_core_web_sm来解决BERTNLU出现的错误:
python -m spacy download en_core_web_sm
ConvLab的使用
在这里使用适用于数据集MultiWOZ的模型。整个pipeline agent包括NLU、DST、Policy和NLG模块。(这些模块的含义可以参考:博客 ...
Neo4j
Neo4j
参考链接:链接
1 简介
Neo4j使用图相关的概念来描述数据模型,把数据保存为图中的节点以及节点之间的关系。
Neo4j中的数据
数据主要由三部分构成: * 节点。节点表示对象实例,每个节点有唯一的ID区别其它节点,节点带有属性; * 关系。就是图里面的边,连接两个节点,另外这里的关系是有向的并带有属性; * 属性。key-value对,存在于节点和关系中。
Neo4j中的查询
Neo4j使用遍历操作(图遍历)进行查询。为了加速查询,Neo4j会建立索引,并根据索引找到遍历用的起始节点。
用户可以创建任意数量的命名索引。每个索引控制节点或者关系,而每个索引都通过key/value/object三个参数来工作。其中object要么是一个节点,要么是一个关系,取决于索引类型。另外,Neo4j中有关于节点(关系)的索引,系统通过索引实现从属性到节点(关系)的映射。
作用:
查找操作:系统通过设定访问条件比如,遍历的方向,使用深度优先或广度优先算法等条件对图进行遍历,从一个节点沿着关系到其他节点。
删除操作:Neo4j可以快速的插入删除节点和 ...
基于医疗知识图谱的问答系统
基于医疗知识图谱的问答系统
1 简介
一个以疾病为中心的一定规模医药领域知识图谱,并以该知识图谱完成自动问答与分析服务。
此项目立足医药领域,以39健康网为数据来源,以疾病为核心,构建起一个包含7类规模约为3.7万的知识实体,6类规模约21万的实体关系的知识图谱。基于上述的知识图谱进行自动问答。
垂直型网站(Vertical website):注意力集中在某些特定的领域或某种特定的需求,提供有关这个领域或需求的全部深度信息和相关服务。
2 运行环境及方式
运行环境
python3.0及以上
neo4j 3.5.0及以上
jdk 1.8.0 (需要jre)
neo4j的预训练词向量:来源 下载链接
运行方式
配置好neo4j数据库(作为存储)和相应的python 依赖包(py2neo)。修改neo4j数据库用户名密码。
知识图谱导入:python build_graph.py(数据很多,所以时间在2个小时左右或者更长。注意:有些数据和模型的路径需要修改。)
启动问答:python kbqa_test.py(需要pip不少的模块)
...
知识图谱与Neo4J
知识图谱
0 知识图谱考古
部分参考:什么是知识图谱? 为什么需要知识图谱?什么是知识图谱?——KG的前世今生
2012年,Google正式提出了知识图谱(Knowledge Graph, KG)的概念,初衷是为了优化搜索引擎返回的结果,增强用户搜索质量和体验。搜索引擎有知识图谱作为辅助,能够洞察用户查询信息背后的语义信息。Google知识图谱的宣传语“things not strings”给出了知识图谱的精髓,即不要无意义的字符串而是获取字符串背后隐含的对象或事物。
看到的不仅仅是文本
对于人类来说,\({\color{Plum}{罗纳尔多}}\)四个字代表着有一个球星:罗纳尔多·路易斯·纳萨里奥·德·利马,他是巴西人,身高180体重98公斤等等。但是对于机器来说,\({\color{Plum}{罗纳尔多}}\)仅仅是字符串。为了让机器能够知道文本背后的含义,我们需要对\({\color{Plum}{罗纳尔多}}\)这个实体进行建模,填充它的属性并拓展它和其他事物的联系,知识图如下所示。
其实,知识图谱的背后思想可以追溯到上个世纪五六十年代的一种知识表现形式— ...