精华内容
下载资源
问答
  • PyTorch-Linear关系分类

    千次阅读 2019-05-31 17:26:37
    PyTorch-Linear关系分类 硬件:NVIDIA-GTX1080 软件:Windows7、python3.6.5、pytorch-gpu-0.4.1 一、基础知识 1、二分类问题 2、函数学习torch.normal()、torch.cat()、torch.nn.CrossEntropyLoss()、torch....

    PyTorch-Linear关系分类

    硬件:NVIDIA-GTX1080

    软件:Windows7、python3.6.5、pytorch-gpu-0.4.1

    一、基础知识

    1、二分类问题

    2、函数学习torch.normal()、torch.cat()、torch.nn.CrossEntropyLoss()、torch.max(Func.softmax())

    二、代码展示

    import torch
    import torch.nn.functional as Func     # 激励函数都在这
    import matplotlib.pyplot as plt
    
    # 假数据
    n_data = torch.ones(100, 2)         # 数据的基本形态
    x0 = torch.normal(2*n_data, 1)      # 类型0 x data (tensor), shape=(100, 2) norm归一化
    y0 = torch.zeros(100)               # 类型0 y data (tensor), shape=(100, )
    x1 = torch.normal(-2*n_data, 1)     # 类型1 x data (tensor), shape=(100, 2) norm归一化
    y1 = torch.ones(100)                # 类型1 y data (tensor), shape=(100, )
    
    # 注意 x, y 数据的数据形式是一定要像下面一样 (torch.cat 是在合并数据)
    x = torch.cat((x0, x1), 0).type(torch.FloatTensor)  # FloatTensor = 32-bit floating #按维数0拼接,行
    y = torch.cat((y0, y1), ).type(torch.LongTensor)    # LongTensor = 64-bit integer
    
    # 画图
    # plt.scatter(x.data.numpy()[:, 0], x.data.numpy()[:, 1], c=y.data.numpy(), s=100, lw=0, cmap='RdYlGn')
    # plt.show()
    
    class Net(torch.nn.Module):  # 继承 torch 的 Module
        def __init__(self, n_feature, n_hidden, n_output):
            super(Net, self).__init__()     # 继承 Module 的 __init__ 功能
            # 定义每层用什么样的形式
            self.hidden = torch.nn.Linear(n_feature, n_hidden)   # 隐藏层线性输出, type(hidden) = torch.nn.modules.linear.Linear(一个类)
            self.output = torch.nn.Linear(n_hidden, n_output)   # 输出层线性输出, type(predict) = torch.nn.modules.linear.Linear(一个类)
    
        def forward(self, x):   # 这同时也是 Module 中的 forward 功能
            # 正向传播输入值, 神经网络分析出输出值
            x = Func.relu(self.hidden(x))      # 激励函数(隐藏层的线性值) self.hidden.forward(x), 其中forward被隐藏,因为使用了继承,父类中有@内置
            x = self.output(x)             # 输出值 self.predict.forward(x), 其中forward被隐藏
            return x
        
    net = Net(n_feature=2, n_hidden=10, n_output=2)
    
    # print(net)  # net 的结构
    
    # optimizer 是训练的工具
    optimizer = torch.optim.SGD(net.parameters(), lr=0.01)  # 传入 net 的所有参数, 学习率
    loss_func = torch.nn.CrossEntropyLoss()      # 预测值和真实值的误差计算公式 (交叉熵), type(torch.nn.CrossEntropyLoss()) = torch.nn.modules.loss.CrossEntropyLoss(一个类)
    
    plt.ion()   # 画图
    plt.show()
    
    for t in range(100):
        output = net(x)     # 喂给 net 训练数据 x, 输出预测值 net.forward(x), 其中forward被隐藏
        loss = loss_func(output, y)     # 计算两者的误差 loss_func.forward(prediction, y), 其中forward被隐藏
        
        optimizer.zero_grad()   # 清空上一步的残余更新参数值
        loss.backward()         # 误差反向传播, 计算参数更新值
        optimizer.step()        # 将参数更新值施加到 net 的 parameters 上
        
        if t % 2 == 0:
            plt.cla()
            # 过了一道 softmax 的激励函数后的最大概率才是预测值
            prediction = torch.max(Func.softmax(output), 1)[1] # 1表示维度1,列,[0]表示概率值,[1]表示标签
            pred_y = prediction.data.numpy()
            target_y = y.data.numpy()
            plt.scatter(x.data.numpy()[:, 0], x.data.numpy()[:, 1], c=pred_y, s=100, lw=0, cmap='RdYlGn')
            accuracy = sum(pred_y == target_y)/200.  # 预测中有多少和真实值一样
            plt.text(1.5, -4, 'Accuracy=%.2f' % accuracy, fontdict={'size': 20, 'color':  'red'})
            plt.pause(0.1)
    

    三、结果展示

    四、参考:

    https://morvanzhou.github.io/

     

    任何问题请加唯一QQ2258205918(名称samylee)!

    唯一VX:samylee_csdn

    展开全文
  • 知识图谱问答 | (3) 关系分类概述

    千次阅读 2020-05-03 18:10:02
    本篇博客主要基于微软亚洲研究院段楠老师的《智能问答》第三章 关系分类 进行整理。 1. 简介 给定一段自然语言文本以及该文本中出现的若干实体(e1,...,en)(e_1,...,e_n)(e1​,...,en​), 关系分类(relation ...

    本篇博客主要基于微软亚洲研究院段楠老师的《智能问答》第三章 关系分类 进行整理。

    1. 简介

    给定一段自然语言文本以及该文本中出现的若干实体(e1,...,en)(e_1,...,e_n), 关系分类(relation classification)任务的目的是识别这些实体(e1,...,en)(e_1,...,e_n)之间满足的语义关系(关系分类也叫 关系抽取、关系识别等)。由于全部可能的关系集合通常是预先指定好的(例如知识图谱中的全部谓词(边上的标注/关系)),因此该任务可以采用分类方法完成。最基本的关系分类任务是判断文本中同时出现的两个实体e1,e2e_1,e_2间的关系。

    1998年,MUC首次提出关系分类评测。该任务针对文本中出现的人名、机构名、产品名和地点名等实体,预测两两实体之间可能出现的三种关系:①机构名和地点名之间的Location_Of关系;②人名和机构名之间的 Employee_of关系;③产品名和机构名之间的Product_Of关系。

    1999年,ACE为关系分类评测提供了更大规则的数据集,并支持不同语种的任务。2008年,ACE英文关系分类评测涉及了7个大类18个小类的关系集合,该任务极大地推动了实体分类研究的发展。

    2009年,TAC的KBP任务基于无结构文本抽取知识,并将其用于知识图谱的构建和扩展,实体链接和关系分类是该任务中最重要的两个子任务。

    SemEval 也提供关系分类评测任务。该会议在2010年发布了基于19种关系的关系分类评测数据集,将实体关系分类任务推向了一个新的高度。

    2012年,Google 对外发布了基于知识图谱(freebase)的语义搜索和智能问答服务,并开放了该知识图谱供工业界和学术界使用。大规模知识图谱的出现极大地推动了智能问答研究的发展。基于此类知识图谱,斯坦福、Facebook 和微软等研究机构分别构建并开放了基于知识图谱的智能问答评测数据集,包括WebQuestions、SimpleQuestions、NLPCC-KBQA等,这些数据集涉及的问答任务需要问答系统能够针对输人问题进行准确的关系分类。由于知识图谱中包含的关系(即谓词)数目远超上述关系分类任务涉及的关系数目,因此近年来出现了很多新型的关系分类方法。主要包括模板匹配方法、监督学习方法和半监督学习方法

    2. 模版匹配方法

    模板匹配方法是关系分类任务中最常见的方法。该类方法使用一个模板库对输入文本中两个给定实体进行上下文匹配,如果该上下文片段与模板库中某个模板匹配成功,那么可以将该匹配模板对应的关系作为这两个实体之间满足的关系。

    本小节将介绍两种模板匹配方法:第一种方法是基于人工模板完成关系分类任务,第二种方法是基于统计模板完成关系分类任务。

    基于人工模板的关系分类主要用于判断实体间是否存在上下位关系(Hyponymy).

    Hearst 1992年提出Hearst Pattern 方法[1],用于判断文本中出现的两个实体之间是否满足上下位关系。下表给出 Hearst Pattern 包括的正则表达式模板。其中,每个NPi(i1)NP_i(i\geq 1)NP0NP_0之间都满足上下位关系。

    在这里插入图片描述
    在这里插入图片描述
    上下位关系分类的主要目的是抽取满足上下位关系的实体对,这些实体对能够帮助问答系统对答案类型进行正确的判断。例如,对于which city does Bill Gates come from这个问题,如果答案候选包括 Redmond 和 United States这两个实体,那么基于这两个实体对应的上位词就可以将答案候选 Unitied States 过滤掉,因为该问题寻找的答案类型(即上位词)需要是一个 city,而 Unitied States 对应的上位词是 counry.

    Hearst Pattern基于词汇和句法信息制定严格的人工模板,该方法能够很好地从文本中抽取出满足上下位关系的实体对。但由于模板数目有限,该方法同样无法覆盖该关系可能对应的全部情况。例如,对于 animals other than dogs such as cats 就无法基于上述人工模板判断animal和dog/cat 之间存在的上下位关系,这是因为该文本无法匹配任何模板。

    上下位关系的自然语言表达方式相对有限,采用人工模板(hearst pattern)就可以很好地完成分类任务。但对其他类型的关系而言,由于其对应的自然语言表达方式非常多,因此无法采用上述方式进行处理,这就引出基于统计模板的关系分类方法。

    基于人工模板的关系分类在给定关系列表的基础上,从大规模数据中自动抽取和总结模板,并将抽取出来的高质量模板用于关系分类任务。该过程无需过多人工干预。

    Ravichandran 等人提出基于搜索引擎的统计模板抽取方法,抽取结果可以用于关系分类和答案抽取任务[2]. 首先,该方法从待分类的全部关系集合中选择一个关系,例如 Birthday,并找到满足该关系的一个实体对,例如 Mozart(对应问题实体)和1756(对应答案实体)。然后,将该实体对作为查询语句,例如 Mozart+1756,提交到搜索引擎,并抓取搜索引擎返回的前n个结果文档。接下来,保留返回结果文档中同时包含该实体对的句子集合,例如(a)The great composer Mozart(1756-1791)achieved fame at a young age、(b)Mozart(1756-91)was a genius和(c)The whole world would always be indebted to the great music of Mozart(1756-1791)
    ,并对每个句子进行分词。最后,从保留句子集合中寻找包含上述实体对的最长子串,例如 Mozart(1756-,并将实体替换为非终结符得到一个模板,例如(-。同一个关系使用不同实体对能够抽取得到不同模板。例如,关系 Birthday 抽取的模板候选包括:(a)(-、(b)born in ,和(c)was born on 等。

    给定一个关系,该工作采用如下方式计算每个模板候选对应的置信度。首先,选择满足当前关系的一个实体对(例如 Mozart 和 1756),将该实体对中的问题实体(例如 Mozart)单独作为查询语句提交给搜索引擎,并保留返回结果文档中包含该问题实体的全部句子。然后,计算给定模板 patternipattern_i在该句子集合上的对应得分P(patterni)P(pattern_i):
    在这里插入图片描述
    上式中,CaC_a表示该集合中成功匹配模版patternipattern_i、并且对应部分正好是答案实体的句子数目,CoC_o表示该集合中成功匹配patternipattern_i的句子数目。注意,在CoC_o的计数过程中可以对应任意单词或短语,而不限于答案实体。按照P(·)可以对同一关系的不同模板候选进行得分,并保留置信度较高的模板用于关系分类任务。

    在实际使用中,如果输入文本中某两个实体所在的上下文恰好能够匹配某个模板,那么该匹配模板对应的关系就可以作为对这两个实体之间关系的预测结果。

    3. 监督学习方法

    监督学习(supervised learning)方法使用带有关系标注的数据训练分析分类模型。本节把该类方法分为三类进行介绍:基于特征的方法、基于核函数的方法和基于深度学习的方法

    3.1 基于特征的方法

    给定两个实体,基于特征的关系分类方法从该实体对所在上下文中抽取特征,并基于这些特征完成关系分类任务。

    在特征方面,该类工作常用的关系分类特征包括:①词汇特征,表示两个实体名字中包含的单词;②词汇特征,表示文本中两个实体之间出现的单词;③数值特征,表示文本中两个实体之间出现的单词的数目;④数值特征,表示文本中两个实体之间出现的其他实体的数目;⑤类型特征,表示两个实体对应的类型(例如 Person,Location 和 Organization 等);⑥指示特征,表示两个实体是否出现在同一个名词短语、动词短语或介词短语中;⑦依存特征,表示在句法依存树中两个实体所依附的单词和该单词对应的词性标注。

    在模型方面,Kambhatla基于最大熵(maximum entropy)训练关系分类模型[3],Zhou等人基于支持向量机 (support vector machine)训练关系分类模型[4]。

    3.2 基于核函数的方法

    基于特征的方法从两个实体所在上下文中抽取不同特征,用于关系分类任务。由于文本中包含多种不同类型的信息(例如词汇、词性标注、依存关系等),因此整个特征空间包含的特征数量非常大,很难选择合理的特征子集用于分类任务。针对该问题,研究者提出基于核函数(kernel function)的关系分类方法。

    给定一个对象空间X,核函数K:X×X[0,)X\times X \rightarrow [0,\infty)表示一个二元函数,该函数可以将X中任意两个对象x,yXx,y\in X作为输入,并返回二者之间的相似度得分K(x,y)。核函数的定义可以采用很多种不同的形式。如果为每个对象定义一个特征向量Φ(·),那么两个对象x和y对应特征向量的点积K(x,y)=ϕ(x)Tϕ(y)K(x,y) = \phi(x)^T \cdot \phi(y)可以作为核函数的一种实现形式。

    对应到关系分类任务,给定输入文本T中两个实体e1,e2e_1,e_2核函数方法采用下述方式计算这两个实体间满足关系r的置信度。首先,从标注数据中找到文本T’,保证T’包含实体对e1,e2e_1',e_2'并且e1,e2e_1',e_2'之间满足关系r. 然后,基于核函数计算T和T’之间的相似度K(T,T’),作为e1,e2e_1,e_2之间满足关系r的置信度。该做法背后体现的思想是:如果两个实体对同时满足某个关系r,这两个实体对分别所在的上下文也应该相似,该相似度通过核函数计算得到。计算上下文相似度的方法包括基于字符串核(string kernel)的方法和基于树核函数(tree kernel)的方法。

    给定字符串x=x1,...,xxx=x_1,...,x_{|x|},字符串核定义如下:

    • |x| 表示字符串的长度
    • i=(i1,...,iu)i=(i_1,...,i_{|u|}),表示x中|u|个位置索引,且满足i1i2...iui_1\leq i_2\leq ... \leq i_{|u|}
    • u = x[i] ,表示x中位置索引i=(i1,...,iu)i=(i_1,...,i_{|u|})对应的字符串子串
    • li=iui1+1l_i = i_{|u|}-i_1+1, 子串u在字符串x中的跨度
    • n\sum\limits^{n} 长度为n的字符子串集合
    • =n=0n\sum\limits^{*} = \bigcup\limits_{n=0}^{\infty}\sum\limits^{n},表示全部可能的字符子串集合
    • λl(i)\lambda^{l(i)}表示位置索引i=(i1,...,iu)i=(i_1,...,i_{|u|})对应的字符子串u=x[i]u=x[i]的权重,λ(0,1]\lambda\in (0,1]是衰减因子,惩罚长度过长或不连续的字符子串。
    • ϕu(x)=i:u=x[i]λl(i)\phi_u(x) = \sum\limits_{i:u=x[i]}\lambda^{l(i)},表示字符子串基于x对应的特征函数。u在x中可能出现多次,该特征值等于不同位置的u对应的权重之和。

    基于上述定义,字符串核定义两个字符串x和y之间的相似度为:
    在这里插入图片描述
    上式中,ϕ(x),ϕ(y)\phi(x),\phi(y)分别表示x和y对应的特征向量。 为每个字符串显式生成特征向量具有指数级复杂度,针对这一问题,Lodhi等人提出基于动态规划的核函数计算方法[5].

    例如,给定一个字符串x=cat,其对应的特征向量可以表示为:
    在这里插入图片描述
    拿子串ct对应的权重ϕct(cat)\phi_{ct}(cat)和子串at对应的权重ϕat(cat)\phi_{at}(cat)相比,前者的权重是λ3\lambda^3,后者的权重是λ2\lambda^2,这是由于ct在cat中的跨度是3(3-1+1),at在cat中的跨度是2(3-2+1).

    Bunescu和Mooney 将字符串核用于关系分类任务[6]。 给定带有关系标注的训练样本集合,该方法首先基于每个样本中出现的实体e1,e2e_1,e_2将该样本切分为左端上下文CleftC_{left}、中间上下文CmiddleC_{middle}和右端上下文CrightC_{right}三部分。然后,给定测试样本,根据其中出现的实体e1,e2e_1',e_2'对其进行同样的切分,生成Cleft,Cmiddle,CrightC'_{left},C'_{middle},C'_{right},并基于字符串核计算该样本与每个训练样本在上述三个上下文上的相似度K(Cleft,Cleft),K(Cmiddle,Cmiddle),K(Cright,Cright),K(C_{left},C'_{left}),K(C_{middle},C'_{middle}),K(C_{right},C'_{right}),。最后,对上述三个相似度得分进行加和,并用于训练多分类SVM模型完成关系分类任务。下图给出基于测试样本和一个训练样本进行相似度计算的示意图。

    在这里插入图片描述
    Zelenko等人将实体对所在句法树作为上下文[7] ,使用树核函数计算上下文之间的相似度。和字符串核相比,树核函数计算的是在两个句法树中共同出现的子树数目。给定两个子树T1,T2T_1,T_2,树核函数检查T1,T2T_1,T_2的根节点属性是否一致,如果一致,将1加到最终核函数返回结果中。对于根节点属性一致的两个子树。用children(T1T_1)和children(T2T_2)分别表示T1,T2T_1,T_2中根节点对应的子树序列,并采用字符串核函数计算二者之间的相似度,并加到核函数返回结果中。不同于使用全部句法树信息,Bunescu 和 Mooney 仅使用两个实体在依存句法树之间的路径作为上下文[8].

    和基于特征的方法相比,基于核函数的方法无需人工指定特征,但方法复杂度较高。

    3.3 深度学习方法

    基于特征的方法需要人工设计特征,用于关系分类任务。这类方法适用于标注数据量较少的情况。基于核函数的方法能够从字符串或句法树中自动抽取大量特征,用于关系分类任务。但这类方法始终是在衡量两段文本在子串或子树上的相似度,并没有从语义的层面对二者进行比较。此外,上述两类方法通常都依赖词性标注和句法分析的结果,用于特征抽取或核函数计算,这就导致词性标注和句法分析模块产生的错误会在整个关系分类流程中被不断传播和放大,并最终影响关系分类的效果。(级联模型,多个子模块)

    近年来,随着深度学习技术的不断发展,端到端的关系分类方法开始占据主导地位。由于该类方法鲁棒性高并且无须人工指定特征,因此相关研究越来越多。

    Socher等人提出基于循环神经网络(recursive neural network)的关系分类方法[9].

    首先,该方法为输入句子中的每个单词x指定一个n维向量vxRnv_x\in R^n和一个矩阵VxRn×nV_x\in R^{n\times n}. vxv_x使用该单词对应的(预训练)词向量进行初始化,VxV_x使用高斯分布进行初始化。

    然后,对于输入句子中待分类的实体e1,e2e_1,e_2,在句法树中找到能够覆盖这两个实体的最小子树,并从该子树对应的叶子节点开始,通过自底向上的方式两两合并相邻两个单词或短语xleft,xrightx_{left},x_{right}对应的向量和矩阵,直到遍历至该子树对应的根节点时结束。
    在这里插入图片描述
    上式中,(vxleft,Vxleft),(vxright,Vxright)(v_{x_{left}},V_{x_{left}}),(v_{x_{right}},V_{x_{right}})分别表示相邻单词或短语xleft,xrightx_{left},x_{right}对应的向量和矩阵。WVRn×2n,WMRn×2nW_V\in R^{n\times 2n},W_M\in R^{n\times 2n}是合并操作对应的模型参数,g(·)表示一个非线性函数(例如 sigmoid 或tanh).上述合并操作确保了句法树每个中间节点对应的向量pRnp\in R^n和矩阵PRn×nP\in R^{n\times n}在维数上和叶子节点保持一致。

    最后,基于根节点对应的向量p,使用 softmax 函数对关系集合中的关系候选进行打分和排序(基于关系集合,进行多分类),并选择得分最高的关系候选作为待分类实体e1,e2e_1,e_2间满足的关系。该方法基于词向量和句法树本身的结构,将待分类的两个实体间的上下文转换为向量表示,有效地考虑了句法和语义信息,但并未特殊考虑实体本身在句子中的位置和语义信息。下图给出基于循环神经网络的关系分类方法。
    在这里插入图片描述
    Zeng等人提出基于卷积神经网络(CNN)的关系分类方法[10]。首先,该方法为输入句子中每个单词w生成一个向量表示v=[vw;(vwpve1p);(vwpve2p)]v=[v_w;(v_w^p-v_{e_1}^p);(v_w^p-v_{e2}^p)]vwv_w表示单词w对应的词向量,vwpv_w^p表示单词w对应的位置向量,该向量随机初始化,(vwpve1p),(vwpve2p)(v_w^p-v_{e_1}^p),(v_w^p-v_{e_2}^p)分别表示w和待分类实体e1,e2e_1,e_2在向量空间上的距离。将位置向量引人关系分类任务是考虑到距离待分类实体越近的单词,对分类结果的影响可能越大。

    然后,通过卷积操作将输入句子对应的向量表示序列转化为局部特征向量序列,并进一步通过最大池化生成全局特征向量。

    最后,输出层将句子对应的全局特征向量转化为输出向量,并使用 softmax函数对关系集合中的关系候选进行打分和排序,选择得分最高的关系候选作为待分类实体e1,e2e_1,e_2间所满足的关系。下图给出基于卷积神经网络的关系分类方法。
    在这里插入图片描述
    Miwa和Bansa提出基于递归神经网络(RNN)的关系分类方法[11]。

    首先,该方法为输入句子中每个单词w生成一个向量表示,该向量表示由w对应的词向量v(w)v^{(w)}。词性标注向量v(p)v^{(p)}。依存句法类型向量v(d)v^{(d)}。和实体标签向量v(e)v^{(e)}连接组成。

    然后,使用双向 LSTM将输入句子(单词序列/单词表示向量序列)转化为隐状态向量序列{h1,...,hN}\{h_1,...,h_N\}.每个隐状态向量hth_t,对应的输入是t-1时刻隐状态向量ht1h_{t-1},以及t时刻单词wtw_t对应的向量表示$$。在此基础上,该方法基于一个两层神经网络,通过自左向右的方式,预测每个单词对应的实体类型标注。
    在这里插入图片描述

    W(eh),b(eh),W(ey),b(ey)W^{(e_h)},b^{(e_h),W^{(e_y)},b^{(e_y)}}表示待学习的模型参数,softmax操作从全部实体类型标注集合中选择最可能的标注作为单词wtw_t的实体类型(基于实体类型标注集合做多分类/(命名)实体识别)。这里,实体标注准则采用常用的 BILOU(begin,inside,last,outside 和 unit)形式。B表示当前单词是某个实体的第一个词,I表示当前单词是某个实体的中间词,L表示当前单词是某个实体最后一个词,0表示当前单词不属于任何实体,U 表示当前单词是一个单词类型的实体。例如在下图的句子“In 1909,Sydney Yates was born in Chicago.”
    中,单词Sydney和Yates 对应的实体类型预测结果分别是B-PER和L-PER,PER 表示该单词所在实体的类型是 PERSON.
    在这里插入图片描述

    接下来,对于实体类型预测模块(实体识别)预测出来的两个实体e1,e2e_1,e_2在当前句子对应的依存句法树中找到能够覆盖该实体对的最小依存句法子树,并采用TreeLSTM生成该子树对应的向量表示。

    最后,基于子树根节点对应的 TreeLSTM 向量表示,使用 softmax 函数对关系集合中的关系候选进行打分和排序,并选择得分最高的关系候选作为待分类实体e1,e2e_1,e_2间所满足的关系。

    上述工作将实体识别和关系分类这两个任务融在同一个模型中完成。对于传统的关系分类任务,在给定实体对e1,e2e_1,e_2情况下,可以基于 TreeLSTM 直接完成(关系)分类任务。

    4. 半监督学习算法

    4.1 基于自举的方法

    基于自举(bootstrapping)的关系分类方法按照如下流程工作:首先,使用某个关系r对应的有限标注数据(即满足该关系的实体对集合),对无标注文本进行实体标注;然后,从标注结果中抽取出r对应的关系模板;接下来,将新抽取出来的模板应用到无标注文本上,获取更多满足关系r的实体对;上述过程不断迭代,直到达到预先指定的停止条件为止。该过程中抽取得到的关系模板可以用于后续的关系分类任务。通过上述描述可以看到,基于自举的关系分类方法需要满足两个条件:①对于给定关系r,需要少量满足该关系的实体对实例:②需要大量无标注文本,用于实体对扩展和关系模板抽取(一个关系r可以对应多个关系模版)。

    Brin提出的 DIPRE(dual iterative pattern relation expansion)方法是自举法的典型代表[12]。该方法采用下述步骤对(author,book)关系进行实体对扩展和关系模板抽取,抽取得到的关系模板可以用来判断两个实体是否满足(author,book)关系。

    • 首先,给定关系(author,book)和满足该关系的一个种子实体对集合(例如<Conan Doyle,The Adventures of Sherlock Holmes>),从大量无结构文档中抽取出具有如下格式的6元组:<order,author,book,prefix, suffix,middle>.其中,order 表示两个实体在句子中的相对位置关系,如果 author在抽取句子中的位置位于 book之前,order的值设定为1,否则设定为0.prefix、suffix 和 middle 分别表示这两个实体左端、右端和中间的字符串上下文。例如,从句子 Sir Arthur Conan Doyle wrote The Adventures of Sherlock Holmes in 1892中抽取出来的6元组是<1,Arthur Conan Doyle,The Adventures of Sherlock Holmes,Sir,in 1892,wrote>.
    • 然后,按照order和middle 部分对抽取得到的6元组进行分组,并将同一组中的6元组整理成如下形式:<longest-common-suffix_of_prefix_strings,author,middle,book,longest-common-prefix_of_suffix_strings>.从上述6元组抽取出来<Sir,Conan Doyle,wrote,The Adventures of Sherlock Holmes,in 1892>.其中,Sir是wrote这个 middle 对应的模板中 prefix的最长公共后缀子串,in 1892是wrote这个middle 对应的模板中suffix的最长公共前缀子串。
    • 接下来,对上一步得到的模板进行泛化,将author和book 替换成非终结符*,得到泛化模板<Sir,,wrote,,in 1892>.重复上述三步不断抽取新模板和新实体对,例如《Conan Doyle,The Speckled Band》。新的实体对可以用于扩展当前关系对应的知识库,新的关系模板可以用于进行关于当前关系的分类任务。

    Agichtein和 Gravano提出 Snowball 方法[13]用于识别(organization,location)关系。和DIPRE方法类似,Snowball 方法抽取5元组<prefix,organization,middle,location,suffix>(DIPRE 中包括的 order 信息被 Snowball忽略);和 DIPRE 不同,Snowball 并不采用字符匹配的方进行元组分组,而是将 prefix、middle 和 suffix转化为向量后采用向量距离的方式进行分组。例如,对于《CMU,Pittsbugh》这个
    实体对,抽取出来一个5元组是<go to,CMU,campus in,Pittsbugh,to meet>(prefix,middle 和 suffix 设置长度为2的约束条件)。对prefix、middle和 suffix每一个单词打分:
    在这里插入图片描述
    基于上述打分机制,进一步为两个元组之间的相似度打分:Match(pattern1,pattern2)=Vprefix1Vprefix2+Vmiddle1Vmiddle2+Vsuffix1Vsuffix2Match(pattern_1,pattern_2)=V_{prefix1}\cdot V_{prefix2}+V_{middle1}\cdot V_{middle2}+V_{suffix1}\cdot V_{suffix2},并按照上述得分对不同5元组进行聚类分组。

    对于每个 pattern,Snowball采用如下方式进行置信度的计算:
    在这里插入图片描述
    PpositiveP_{positive}表示新模板能够抽取先前已经被抽取并满足该关系的实体对的数目, PnegtiveP_{negtive}表示新抽取模板抽取出来的与之前抽取结果发生冲突的实体对数目。

    和DIPRE相比,Snowball 通过定义打分函数的方式,对抽取获得的 pattern 进行置信度计算,这样可以在一定程度上保证抽取结果的质量。

    4.2 基于远监督的方法

    基于远监督(distant supervision)的方法按照如下步骤完成关系分类任务:①针对待分类关系集合中的每个关系r,获取满足该关系的实体对集合;②从文本集合中找到并保留同时包含某个实体对的句子;③从全部保留下来的句子集合中抽取特征,并与关系r建立对应关系。这样,如果保留下来的句子数目是|S|,从每个句子中抽取的特征数目是|F|,那么总共抽取的特征数就是|S|x |F|;④将抽取出来的《特征,关系》数据作为标注数据,用于训练多分类器完成关系分类任务。远监督关系分类方法基于的主要假设是:如果一个实体对满足某个给定关系,那么任何同时包含该实体对的句子都可能在阐述该关系。这样就可以基于满足某个关系的实体对从上述句子中抽取大量特征,用于关系分类任务。当然,通过上述方式构造的标注数据必然存在一定量的噪音,通过训练调整不同特征对应的权重,可以使噪音特征的权重变小、有效特征的权重变大。

    Mintz等人针对 Freebase 中选取的102个关系,提出基于远监督的关系分类方法[14]。该方法基于上述102个关系对应的 1800000个三元组,从维基百科中为每个关系抽取特征集合,用于多分类器的训练。下图给出Freebase 中排名最高的关系列表和对应实体对。
    在这里插入图片描述
    该方法使用的特征包括词汇化特征和语法特征两类。词汇化特征从两个实体对应的上下文中抽取五类信息,并将它们连接在一起构成一个独立特征:①两个实体之间的单词序列;②两个实体之间单词对应的词性序列;③指示特征,用来明哪个实体(e1e_1表示首先出现的实体,e2e_2表示后出现的实体)在句子中首先出现;④e1e_1左端的k{0,1,2}k\in \{0,1,2\}个词及对应的词性:⑤e2e_2右端的k{0,1,2}k\in \{0,1,2\}个词及对应的词性;语法特征从句子对应的依存句法树中抽取两类信息,并将它们连接在一起构成一个独立特征:①两个实体在依存句法树上的路径;② 每个实体对应的窗口节点(window node).窗口节点表示并不在两个实体之间的路径上、但与某个实体直接相连的节点。

    下图给出 Astronomer Edwin Hubble was born in Marshfield,Missouri 对应的依存句法树以及从中抽取出来的特征。
    在这里插入图片描述
    除上述特征外,实体类型信息(person、location,organization 等)也可以作为特征。

    上述介绍的远监督关系分类工作存在两个主要问题:第一,两个实体之间满足的关系可能有多个。例如,对于实体对<Bill Gates,Microsoft>,Bill Gates founded Microsoft in 1975和 Bill Gates stepped down as CEO of Microsoft in 2000.两个句子都包含了该实体对,但二者之间满足的关系完全不同,这为分类特征抽取引人大量噪音。第二,特征抽取通常依赖于外部工具,例如词性标注器和句法分析器等,这些工作并没有专门针对关系分类任务进行训练,分析产生的错误很容易传导到关系分类的后续阶段中去。

    Zeng等人提出将多实例学习(multi-instance learning)和深度学习相结合的远监督关系分类方法[15].针对上述第一个问题,该方法使用多实例学习,将基于每个实体对自动抽取出来的<句子,关系标注>对看做一个Bag,在模型参数训练过程中,只选择 Bag 中使得模型预测得分最高的实例用于模型参数更新,针对上述第二个问题,该方法基于卷积神经网络进行自动特征抽取,这样做无须人工设计分类特征。

    5. 总结

    识别自然语言中出现的实体以及实体之间的关系,是自然语言理解的基础,也是智能问答最重要的组成部分。传统方法使用模板或特征完成关系分类任务。这类方法的优点是可以根据语言学和领域知识自主设计模板或特征。然而,并非所有对该任务有效的特征都是可解释的和具体的,因此这类特征无法通过端到端的训练自动总结出有效的特征子集。与之对比,基于深度学习的方法能够通过端到端的方式从训练数据中自动学习对该任务有效的特征表示,但由于表示学习获得的特征向量无法解释(黑盒子),因此该类方法很难进行问题追踪。如何将人工特征和表示学习特征相结合,是自然语言处理领域一个重要的研究方向。

    6. 参考文献

    [1]Marti A.Hearst.Automatic Acquisition of Hvponyms from Large Text Corpora[C].COLING,1992.
    [2]Deepak Ravichandran,Eduard Hovy.Learning Surface Text Patterns for a Question Answering System[C].ACL,2002.
    [31 Nanda Kambhatla.Combining Lexical,Svntactic and Semantic Features with Maximum Entropy Models for Extracting Relations[C].ACL,2004.
    [4]GuoDong Zhou,Jian Su,Jie Zhang,etc.Exploring Various Knowledge in Relation Extraction[C].ACL,2005.
    [5] Huma Lodhi,John Shawe-Taylor,Nello Cristianini,etc.Text Classification using String Kernels[J].Journal of Machine Learning Re-
    search,2002,2(3):419-444.
    [6]Razvan C.Bunescu,Raymond J.Mooney.Subsequence Kernels for Relation Extraction[C].NIPS,2005.
    [7] Dmitry Zelenko,Chinatsu Aone,Anthony Richardella.Kernel Methods for Relation Extraction[J].Journal of Machine Learning Research,2003,3(3):1083-1106.
    [8]Razvan C.Bunescu,Raymond J.Mooney.A Shortest Path Dependency Kernel for Relation Extraction[C].EMNLP,2005.
    [9]Richard Socher,Brody Huval,Christopher D.Manning,etc.Semantic Compositionality through Recursive Matrix-Vector Spaces[C].
    EMNLP,2012.
    [10]Daojian Zeng,Kang Liu,Siwei Lai,etc.Relation Classification via Convolutional Deep Neural Network[C].COLING,2014.
    [11]Makoto Miwa,Mohit Bansa.End-to-End Relation Extraction using LSTMs on Sequences and Tree Structures[C].ACL,2016.
    [12]Sergey Brin.Extracting Patterns and Relations from the World Wide Web[M].Berlin:springer,1999.
    [13]Eugene Agichtein,Luis Gravano.Snowball:Extracting Relations from Large Plain-Text Collections[C].Acm Conference on Digital
    Libraries,2000.
    [14]Mike Mintz,Steven Bills,Rion Snow,etc.Distant supervision for relation extraction without labeled data.ACL,2009.
    [15] Daojian Zeng,Kang Liu,Yubo Chen,etc.Distant Supervision for Relation Extraction via Piecewise Convolutional Neural Networks[C].
    EMNLP,2015.

    展开全文
  • @(论文学习笔记)用卷积网络实现实体关系分类 研究要点 词汇级别和句子级别特征的提取。 卷积神经网络进行名词实体之间关系的分类。 论文所用模型 Relation Classification via Convolutional Deep Neural ...

    @(论文学习笔记)用卷积网络实现实体关系分类

    研究要点

    1. 词汇级别和句子级别特征的提取。
    2. 卷积神经网络进行名词实体之间关系的分类。

    论文所用模型

    Relation Classification via Convolutional Deep Neural Network
    关系分类的整体模型结构如图:
    Alt
    系统的输入是一个有两个标记名词的句子。然后,通过查找单词嵌入将单词标记转换为向量。接着,分别提取词法特征和句子级特征,然后直接连接形成最终特征向量。最后,为了计算每个关系的置信度,将特征向量输入到一个SoftMax分类器中。分类器的输出是一个向量,其维数等于预定义的关系类型的数目。每个维度的值是对应关系的置信度得分。

    词级别的特征提取

    词级别特征包括:
    Alt
    两个名词实体的词向量,两个标记名词左右相邻词的,以及标记名词的上位词(WordNet,是一个相关联的词库)拼接起来,作为句子的词汇级别特征。

    句子级别特征

    词向量特征不能获取长的句子序列特征和语义语序组合性,因此将句子级特征进一步表示为本单词和相邻单词的词向量WF,单词到两个目标名词的距离PF。
    Alt
    PF包含位置信息,在使用时与句子的词向量表示拼接。如图,WF和PF向量输入最大池化的CNN,通过非线性变换得到句子级别的特征。

    Experiments

    Alt
    Alt
    可以看出句子级别特征的加入,对关系分类模型最终的效果有明显提升

    展开全文
  • 关系分类之划分数据

    千次阅读 多人点赞 2019-05-18 17:53:22
    def transform_to_one_hot(label_str, num_classes): label_one_hot_list = [0] * num_classes label_list = label_str.split() if len(label_list) == 1: label_one_hot_list[int(label_l...
    def transform_to_one_hot(label_str, num_classes):
        label_one_hot_list = [0] * num_classes
        label_list = label_str.split()
        
        if len(label_list) == 1:
            label_one_hot_list[int(label_list[0])] = 1
        else:
            for single_label in label_list:
                if single_label != '0':
                    label_one_hot_list[int(single_label)] = 1
                    
        return np.reshape(np.asarray(label_one_hot_list, dtype = np.float32), (-1, num_classes))
    
    
    def data_batcher(self, sentence_dict, filename, padding=False, shuffle=True):
        sent_data = pd.read_csv(os.path.join(self.data_path, filename), sep = '\t', header = None)
        sent_data.columns = ['id', 'relation']
    
        all_sent_ids = list(sent_data['id'])
        all_sents = list(map(lambda x: sentence_dict[x], all_sent_ids))
    
        sent_data['relation'] = sent_data['relation'].apply(lambda x: transform_to_one_hot(x, self.num_classes))
    
        all_labels = np.asarray(sent_data['relation'])
    
        self.data_size = len(all_sent_ids)
        self.datas = all_sent_ids
    
        all_sents = np.concatenate(all_sents, axis=0) #这里使用reshape就会报错
        all_labels = np.concatenate(all_labels, axis=0)
    
        data_order = list(range(self.data_size))
        if shuffle:
            np.random.shuffle(data_order)
            
        if padding:
            if self.data_size % self.batch_size != 0:
                data_order += [data_order[-1]] * (self.batch_size - self.data_size % self.batch_size)
    
        for i in range(len(data_order) // self.batch_size):
            idx = data_order[i * self.batch_size:(i + 1) * self.batch_size]
            yield all_sents[idx], all_labels[idx], None
    
    展开全文
  • 上一篇【论文】Awesome Relation Extraction Paper(关系抽取)(PART I)介绍了一些关系抽取和关系分类方面的经典论文,主要是以CNN模型为主,今天我们来看看其他模型的表现吧~ 1. Relation Classification via ...
  • 本文章主要内容为关系分类的重大挑战是一个短文本的重要信息的位置并不确定提出的attention双向lstm;attention在许多博客都有相关解释,这里不作说明,双向lstm是对单向lstm做的改进,要通过上下文信息对当前lstm...
  • 通过多层面的attention CNN的关系分类 原文:Relation Classification via Multi-Level Attention CNNs http://eprints.bimcoordinator.co.uk/14/ 摘要: 关系分类是众多从文本中挖掘结构化事实的信息抽取系统中的一...
  • bag of word作为特征,本身的信息量是比较充足的, 但是线性分类器无法共享特征与类别之间的参数(个人理解为无法充分考虑各个特征之间的组合对分类的影响)。而多次神经网络可以。 使用n-gram+bag of word来进行...
  •  文章主要是通过一对实体和对应的多个包含实体对的句子实例作为训练数据集,对训练句子多个实例进行多层卷积然后得到表示编码,然后通过,对句子进行权重分配,来表示不同句子对两个实体关系分类的贡献不同。...
  • ” 在这个样本中,实体1为李世民,实体2为李建成,关系为兄弟姐妹。对于第一个字符“但”字来说,其相对于实体1的距离为(但字在字符序列中的索引-实体1在字符序列中的索引),相对于实体2的距离为(但字在字符序列中...
  • 1)用meta-learning学习深度网络的参数;迭代次数一般150-1000。 2)微调:用常规的分类学习来学习深度网络的参数;迭代次数一般10-30。 最终效果对比: F1平均提高19%,提高明显。 ...
  • 信息抽取(Information Extraction)是指从非结构化的自然语言文本中抽取出实体、属性、关系等三元组信息,是构建知识图谱的基础技术之一。IE的子任务大概有以下几种: 实体识别与抽取 实体消歧 关系抽取 事件抽取 ...
  • 关系分类是寻找名词对之间的语义关系的任务,对于许多NLP应用程序很有用,例如信息提取,问答系统,传统的关系分类方法使用来自词汇资源的手工提取特征,通常基于模式匹配,并取得了很高的成绩, 这些方法的一个缺点...
  • 因此我们通过将关系分类形式化为一个少样本学习问题,给出了一个不同的视角解决关系分类。 少样本学习(FSL)允许模型在数据不足的情况下学习高质量的特性,而不需要添加像远程监督这样构建的大规模数据集。许多研究...
  • http://blog.csdn.net/Drate/articles/51218.aspx
  • 分类和二分类关系

    千次阅读 2019-08-31 11:16:09
    1 VS Rest : 训练K个分类器,每个分类器有1类做正例其余K-1类做负例;预测阶段,取正例概率最大的那个分类器的结果即可;优点:分类器就K个,个数少;缺点:正负样本数量不平衡,影响分类效果。 1 VS 1 : 训练K(K-1...
  • 分类规格类型的关系

    2019-09-17 20:03:30
    分类规格类型的关系 商品分类、商品规格、商品类型的关系: 商品类型不同于商品分类,指的是依据某一类商品的相同属性归纳成的属性集合,例如手机类型有屏幕尺寸、铃声、网络制式等共同的属性;书籍类型有出版社...
  • 这两个函数想必很多人会有所混淆,这里简单介绍一下,包括二分类、多分类、多标签分类之间的关系以及如何应用softmax和sigmoid。 其实说起来也简单,先来介绍下基本信息。 softmax softmax 多分类比较常用一些,...
  • 数据库原理(六)- 关系操作和关系数据语言的分类基本的关系操作关系数据语言的分类借鉴 基本的关系操作 关系模型中常用的关系操作包括查询操作和插入、删除、修改操作两大部分。关系的查询表达能力很强,是关系操作...
  • 交叉熵损失-二分类与多分类关系

    千次阅读 2020-09-02 11:41:17
    一、首先了解交叉熵是什么?1 二、这个就是多分类中的交叉熵损失函数。...所以使用多分类的交叉熵,将第一个维度用第二个维度直接代替就成了我们看到的二分类交叉熵损失函数。现在知道二类中,那个(1−y)log(1−y^)(1-
  • 人际关系分类

    千次阅读 2015-08-28 22:01:54
    前言:自由。快乐和联系需要。利益。 一、规矩一定要有。 ...道德之所以存在,是因为顺应了人的内在需求。...人际关系有方法。民生。能者多劳。人杂利益面前让一步,比什么都强。但真的能做到吗?
  • 组件关系分类依据

    2016-06-29 11:28:23
    父组件和指定子组件间的关系可以是多种对应关系。 TCComponentItem下有TCComponentItemRevision; 把TCComponentRevision发送到结构管理器,对象为BOM和BOMLINE
  • 关系代数分类 基本运算 并、差、笛卡尔积、选择、投影; 关系代数的基本操作(原始运算):“选择”、“投影”、笛卡尔积(也叫做“叉积”或“交叉连 接”)、并集、差集和“重命名”。 组合运算 交、连接、自然...
  • 数据库表的设计结构: category_id分类标识, category_name分类名, category_fid父分类id, category_path路径; 其实这个表的设计达不到无线分类的需求。
  • 数据库根据其数据的存储方式可以分为关系型数据库和非关系型数据库。常见的关系型数据库有Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL等。常见的非关系性数据库有 NoSql、Cloudant,Hbase等 3....
  • 一、关系型数据库的语言分类 1.DDL 数据定义语言:( Data Definition Language ) 用来定义数据库的对象,如数据表、视图、索引等 create drop alter truncate 2.DML 数据操纵语言:( Data Manipulation Language ...
  • 关系数据语言-- |--关系代数语言 例如 ISBL |--关系演算语言-- |--元组关系演算语言 例如 APLHA,QUEL |--域关系演算语言 例如 QBE...
  • alfresco中Policy载体分类和继承关系

    千次阅读 2010-07-09 16:54:00
    alfresco中Policy载体分类和继承关系
  • ofbiz引擎分类以及继承关系

    千次阅读 2013-01-31 19:18:10
    1、使用的是 ofbiz 11.04.022、GenericEngineGenericEngine是基础接口,提供同步模式、异步模式以及回调模式的方法定义。3、继承关系

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 27,609
精华内容 11,043
关键字:

关系分类