540 likes | 655 Views
意义计算的实现. 董强 董振东 dongqiang @keenage.com dzd@keenage.com www.keenage.com 第一届全国知网研讨会 2008.05.18. 提纲. 相似度的计算 相关概念的计算 知网英汉翻译系统 在意义计算中,一些常用的函数. 容易混淆的两个概念. 词语相关性——反映的是两个词语互相关联的程度,即词语之间的组合特点,它可以用词语在同一个语境中共现的可能性来衡量。 词语相似性——反映的是词语之间的聚合特点。. 什么是概念的相似度.
E N D
意义计算的实现 董强 董振东 dongqiang@keenage.comdzd@keenage.com www.keenage.com 第一届全国知网研讨会 2008.05.18
提纲 • 相似度的计算 • 相关概念的计算 • 知网英汉翻译系统 • 在意义计算中,一些常用的函数
容易混淆的两个概念 • 词语相关性——反映的是两个词语互相关联的程度,即词语之间的组合特点,它可以用词语在同一个语境中共现的可能性来衡量。 • 词语相似性——反映的是词语之间的聚合特点。
什么是概念的相似度 概念相似度是一个主观性很强的概念,会根据不同的应用而产生不同的定义。
实现方法 • 同义词 • 同类词 • 反义或对义词 • 抽取参与计算的DEF片段 • 概念计算
实现方法—特殊情况 在符合下列情况是直接得出相似度值,无需其他计算: • 同义词相似度为1.000000。 • 同类词相似度为0.950000。 • 反义或对义词 (仅限于单个义原) 相似度为0.000000。
实现方法—抽取DEF 不是所有的概念都是直接拿到DEF就进行计算的,有些概念中存在特殊的动态角色,需要特别的处理。对于动态角色CoEvent,需要用CoEvent 后面的KDML部分作为这个词语的DEF来参与计算,用以建立不同类别词语之间的关系。如: 旅程(名词): DEF={fact|事情:CoEvent={tour|旅游}}。 旅行(动词): DEF={tour|旅游}
实现方法—四个部分 公式:Sim(D1,D2) = (P1*β1+P2*β2+P3*β3+P4*β4)* γ概念相似度的计算分为4个部分来进行。β是每一个部分计算结果的权值。β1+β2+β3+β4 =1,目前我们指定:β1=0.1,β2=0.1,β3=0.7,β4=0.1。γ为惩罚因子。
实现方法—包含关系的计算(部分1) 两个DEF相互包含关系的计算公式:P1 = 1/LL:包含关系存在的层次
实现方法—包含关系的计算(部分1) • “心理医生”:DEF={human|人:HostOf={Occupation|职位},domain={medical|医},{doctor|医治:agent={~},content={disease|疾病:cause={mental|精神}}}} • “医生”:DEF={human|人:HostOf={Occupation|职位},domain={medical|医},{doctor|医治:agent={~}}} • “手指”: {part|部件:whole={part|部件:PartPosition={hand|手},whole={human|人}}} • “手”:{part|部件:PartPosition={hand|手},whole={human|人}}
实现方法—概念主类相似度的计算(部分2) • 两个概念主类之间的相似度的计算公式:P2 = α / ( d +α ) d为两个主类义原在Taxonomy树上的距离。 α= 1。 距离与相似度为反比关系,即距离越近相似度越高。
实现方法—概念主类相似度的计算(部分2) “tree|树” : entity|实体 => thing|万物 => physical|物质 => animate|生物 => plant|植物 => tree|树 “human|人” : entity|实体 => thing|万物 => physical|物质 => animate|生物 => AnimalHuman|动物 => human|人
实现方法—节点相似性的计算(部分3) DEF的各个节点相似性的计算,这一部分的计算是在整个相似度计算中最复杂,也是权值比例最大的一部分。 具体包含如下三个方面的计算: • 同层相同节点的计算; • 对于动态角色domain的进一步处理; • 两个DEF相同节点数与总节点数的计算
实现方法—节点相似性的计算(部分3) • “患儿”:DEF={human|人:domain={medical|医},modifier={child|少儿}, {SufferFrom|罹患:experiencer={~}},{doctor|医治:patient={~}}} • “儿科医生”:DEF={human|人:HostOf={Occupation|职位},domain={medical|医}, {doctor|医治:agent={~},patient={human|人:modifier={child|少儿}}}}
实现方法—节点相似性的计算(部分3) 同层相同节点的计算公式:S1 = Nsim / Nmax / 2x Nsim :同层相同节点数Nmax:同层最大节点数2x :x是层次数那么以上我们所举的例子的计算结果为:S1 =1/21 + 0.5/22 + 0/23 + 0/24 =0.5 + 0.125 + 0 + 0 =0.625
实现方法—节点相似性的计算(部分3) 对于动态角色domain的进一步处理。 如果两个DEF中都存在domain,并且domain的值也相同,那么不论这两个domain是否在同一个层次,都要再一次对domain 进行计算。公式: S2 = a/ 2xa:相同domain节点个数x:指定为两个DEF的最深层数。上面例子通过计算这部分的相似度值为:S2 = 1/24 = 0.0625
实现方法—节点相似性的计算(部分3) 两个DEF相同节点数与总节点数的计算公式:S = a*2/(d1+d2)a:相同节点个数d1 :第一个DEF的节点总数d2 :第二个DEF的节点总数本例中相同节点数为3,总节点数为14。S3 = 3*2/14 = 0.428571
实现方法—节点相似性的计算(部分3) 公式:P3 = (S1+S2)*0.7 + S3*0.3根据上面的例子P3 = (0.625+0.0625)*0.7 + 0.428571*0.3 = 0.48125+0.128571 = 0.609821
实现方法—主类义原框架的计算(部分4) 两个DEF主类义原框架的计算,其计算方法与部分3相同。 ├ {ActGeneral|泛动} {act|行动:agent={*}} │ ├ {start|开始} {ActGeneral|泛动:agent={*},content={*}} │ ├ {do|做} {ActGeneral|泛动:agent={*},content={*},manner={*}} │ │ ├ {try|尝试} {do|做:agent={*},content={*}}
实现方法—惩罚因子 在下列情况下需要对计算结果进行惩罚性修订: • 存在否定关系。惩罚因子为0.3。 • 存在下列指定关系。惩罚因子为0.35。agent patient experiencer target relevant content existent partner possessor PatientProduct PatientContent possession
什么是相关概念场 • 相关是指不同的概念在某种语境中共现的可能性。 • 相关概念是指词语所代表的概念与哪些概念相关。 • 相关概念场是一个相关概念的集合,是与一个词语的某个概念相关的所有概念的集合。
相关概念场的特点 • 基于概念词语的相关性最终应归结于词语所代表的概念的相关性。 • 大范围中英文词语各9万多,概念各11万多。 • 跨语种(cross-language)中文与英文双语的系统。
相关概念场的应用 • 语义排歧 • 文本聚类
实现方法 • 从查询步骤来看,可以分为共性查询和个性查询 • 在查询范围上,共有三个级别
实现方法—共性查询 共性查询包括同类、反义或对义以及高度相关的动态角色项:domain 、MaterialOf、RelateTo 共性查询在三个级别的查询范围和所有义原类都适合,并且查询范围为第一级时只进行共性查询。
实现方法—共性查询 动态角色:domain的特殊性
实现方法—个性查询 个性查询是根据概念主类划分的,共分为:事件、实体、属性、属性值
实现方法—个性查询(事件类) 第二级查询: • 根据DEF主类的节点深度决定查询方式,目前定义为节点深度大于4时进行查询。 • 抽取DEF中第一层的概念片段进行查询。 如:“煲汤”
实现方法—个性查询(事件类) 第三级查询: • 根据DEF主类的义原框架进行模糊查询。如:“出阁” • 遍历实体类每一个义原的框架,找出包含DEF主类的义原,并以这个义原作为DEF进行精确查询。如:“吃”
实现方法—个性查询(实体类) 第二级查询: • 根据DEF主类进行First方式的查询。如:“禾苗” • 抽取DEF中第一层的概念片段进行查询,如果是实体类进行模糊查询,如果是事件类,调用事件类函数进行处理。 如:“大春作物”
实现方法—个性查询(实体类) 第三级查询: • 抽取DEF中深层的事件类概念片段进行查询。 • 抽取DEF主类义原的框架的概念片段进行查询。 如:“天空”
实现方法—个性查询(属性类) • 找出所有属于这个属性的属性值,根据这些属性值进行查询 • 特别处理“scope”如:“饭量”
实现方法—个性查询(属性值类) • 找出这个属性值所属的属性,根据这一属性进行查询 • 特别处理“scope”如:“长篇”
知网英汉翻译系统 知网英汉翻译系统是一个基于规则的翻译系统 三大组成部分: • 程序部分 • 知网知识词典 • 规则 程序的三个组成部分: • 词法处理 • 语法和语义分析 • 译文生成
词法处理 • 分词 • 组词 • 查单词 • 短语匹配 • 信息提取 • 生词处理
词法处理—分词 英文分词需要注意的几个问题: • 标点符号:“,” “-” “'” • 数字:可能是时间 • 英文句号:“.”
词法处理—组词 英文中有大量由“-”和“'”构成的词语,如:Al-Qa'ida(“基地”组织)、T-shirt 特例:brother’s
词法处理—查单词 在真实文本中,英文单词会根据时态、数量、人称的不同而产生不同的变体。 I amreading.He has two books.
词法处理—查单词 还会因英文语法的需要加上不同的前后缀而产生词性的变体,如:tion、less、ness。
词法处理—查单词 因词义的需要加上前后缀而产生的变体,如:un、re、mini、micro。
词法处理—短语匹配 一般情况下词典中保存的短语往往不能直接与真实文本中的相匹配,由于在查单词时已经做了一定的工作,我们可以在此基础上通过排列组合,使词典中的短语和文本中的相匹配。
词法处理—信息提取 • 保留词尾信息 • 保留大小写信息 • 判定是否为同形
词法处理—生词处理 • 普通数字 • 序数词 • 时间 • 未收录名词
语法和语义分析 组成部分: • 主控程序 • 规则解释器 特点: • 充分利用了知网丰富的词汇信息和强大的语义系统 • 规则描述语言可以直接引用KDML
语法和语义分析 在规则中可以对每一个词语的每一个概念做出如下的提问: • 指定的词语是否存在或包含某个概念,如:DEF={human|人:{SufferFrom|罹患:experiencer={~}}}DEF>{human|人:{SufferFrom|罹患:experiencer={~}}} • 指定词语的概念主类是什么 • 指定词语的概念主类的上位为某个概念 • 指定词语的概念主类的父节点为某个概念 • 概念A是否为概念B的整体
译文生成 经过语法和语义分析,已得到了句子各成分间的逻辑语义关系,在此基础上,把上述逻辑语义关系,依照汉语的语法和语言习惯,进行适当的添加和调整,最后得出汉语译文。
在意义计算中,一些常用的函数 • DEF的存储结构 • 包含关系 • 比较关系 • 片段提取
在意义计算中,一些常用的函数 DEF的存储结构如下:struct S_DEF_NODE { WORD Domai; // 域 WORD Class; // 类 char Fathe; // 父节点 char Exten; // 扩展标记,记录从哪个节点扩展出来的 char Layer; // 层次; char S_Off; // 子节点起始位置 }; struct S_DEF { BYTE NodeNum; // 节点个数 BYTE SemeNum; // 义元个数 S_DEF_NODE Node[Max_Seme_Num]; // };
在意义计算中,一些常用的函数 包含关系的计算: • 用法:int Def_Match( const S_DEF* ApsA , const S_DEF* ApsB , int AiNodeA = 0 , int AiNodeB = 0 )bool Def_Match_Recursion( const S_DEF* ApsA , const S_DEF* ApsB , int AiNodeA , int AiNodeB ) • 功能:判断DEF_A是否包含DEF_B;判断DEF_A是否从指定节点开始包含DEF_B • 参数: • 返回值:N>= 0:DEF_A从第N个节点开始包含DEF_B;N < 0:DEF_A不包含DEF_B