发明名称 一种基于信息量的句子相似度计算方法
摘要 本发明涉及一种基于信息量的句子相似度计算方法,包括以下步骤:首先,通过两个句子词语间具有最大的信息量的概念确定词语的词义;然后利用语义网的层次结构和语料库统计来计算词语的信息量和多词语间的公共信息量;接下来应用组合数学中容斥原理计算多个词语的总信息量,从而分别得到两个句子各自的信息量,以及两个句子总共的信息量;最后根据Jaccard相似度原理定义并计算出句子的相似度。本发明能逼真的模拟人类对句子相似程度的判断,并且不需要使用语料训练参数或使用经验参数、不依赖语料库的规模、无需词性标注等其他自然语言处理技术;时间性能优秀,对一般长度的句子对,在当前主流多核PC机上获得准实时计算效率。
申请公布号 CN104090918A 申请公布日期 2014.10.08
申请号 CN201410268361.4 申请日期 2014.06.16
申请人 北京理工大学 发明人 吴昊;黄河燕
分类号 G06F17/30(2006.01)I 主分类号 G06F17/30(2006.01)I
代理机构 代理人
主权项 一种基于信息量的句子相似度计算方法,其特征在于,包括以下步骤:步骤1:输入待计算的两个句子s<sub>a</sub>和s<sub>b</sub>,记句子s<sub>a</sub>和s<sub>b</sub>分别为:<maths num="0001" id="cmaths0001"><math><![CDATA[<mrow><msub><mi>s</mi><mi>a</mi></msub><mo>=</mo><mo>{</mo><msubsup><mi>w</mi><mi>i</mi><mi>a</mi></msubsup><mo>|</mo><mi>i</mi><mo>=</mo><mn>1,2</mn><mo>,</mo><mo>.</mo><mo>.</mo><mo>.</mo><mo>,</mo><mi>n</mi><mo>}</mo></mrow>]]></math><img file="FDA0000521457130000011.GIF" wi="519" he="101" /></maths><maths num="0002" id="cmaths0002"><math><![CDATA[<mrow><msub><mi>s</mi><mi>b</mi></msub><mo>=</mo><mo>{</mo><msubsup><mi>w</mi><mi>i</mi><mi>b</mi></msubsup><mo>|</mo><mi>i</mi><mo>=</mo><mn>1,2</mn><mo>,</mo><mo>.</mo><mo>.</mo><mo>.</mo><mo>,</mo><mi>m</mi><mo>}</mo></mrow>]]></math><img file="FDA0000521457130000012.GIF" wi="539" he="103" /></maths>其中,<img file="FDA0000521457130000013.GIF" wi="84" he="78" />和<img file="FDA0000521457130000014.GIF" wi="82" he="86" />分别表示句子s<sub>a</sub>和s<sub>b</sub>的第i个词语,n和m分别表示句子s<sub>a</sub>和s<sub>b</sub>的词语数;步骤2:对输入句子中的词语进行词义选择,过程如下:词语<img file="FDA0000521457130000015.GIF" wi="75" he="73" />的词义按照式1确定:[式1]<maths num="0003" id="cmaths0003"><math><![CDATA[<mrow><msubsup><mi>c</mi><mi>i</mi><mi>a</mi></msubsup><mo>=</mo><munder><munder><munder><mrow><mi>arg</mi><mi> </mi><mi>max</mi></mrow><mrow><mi>c</mi><mo>&Element;</mo><mi>subsum</mi><mrow><mo>(</mo><msub><mi>c</mi><mn>1</mn></msub><mo>,</mo><msub><mi>c</mi><mn>2</mn></msub><mo>)</mo></mrow></mrow></munder><mrow><msub><mi>c</mi><mn>1</mn></msub><mo>&Element;</mo><mi>consept</mi><mrow><mo>(</mo><msubsup><mi>w</mi><mi>i</mi><mi>a</mi></msubsup><mo>)</mo></mrow></mrow></munder><mrow><msub><mi>c</mi><mn>2</mn></msub><mo>&Element;</mo><mi>consepts</mi><mrow><mo>(</mo><msub><mi>s</mi><mi>b</mi></msub><mo>)</mo></mrow></mrow></munder><mo>{</mo><mo>-</mo><mi>log</mi><mi>P</mi><mrow><mo>(</mo><mi>c</mi><mo>)</mo></mrow><mo>}</mo></mrow>]]></math><img file="FDA0000521457130000016.GIF" wi="845" he="264" /></maths>其中,subsum(c<sub>1</sub>,c<sub>2</sub>)为在语义网中包含概念c<sub>1</sub>和c<sub>2</sub>的所有概念集合,<img file="FDA0000521457130000017.GIF" wi="270" he="96" />表示在语义网中所有包含词语<img file="FDA0000521457130000018.GIF" wi="64" he="82" />的概念的集合,consepts(s<sub>b</sub>)表示语义网中包含句子s<sub>b</sub>中的所有词语的概念的集合,P(c)为概念c在语料库中的频率,特殊的,如果P(c)为0,则logP(c)为0,P(c)的值按照式2确定:[式2]P(c)=Σ<sub>w∈words(c)</sub>count(w)/N其中words(c)表示语义网中概念c以及概念c的所有子概念中的所有词语的集合,count(w)为词语w在语料库中的频数,N表示语义网中全部概念的频数之和,而每个概念的频数为该概念中全部词语在语料库中的总频数之和;同理,将式1中<img file="FDA0000521457130000019.GIF" wi="72" he="73" />替换成<img file="FDA00005214571300000110.GIF" wi="98" he="80" />consepts(s<sub>b</sub>)替换成consepts(s<sub>a</sub>),可得句子s<sub>b</sub>中第i个词语的词义<img file="FDA00005214571300000111.GIF" wi="92" he="97" />词义确定后句子s<sub>a</sub>和s<sub>b</sub>可以记为:<maths num="0004" id="cmaths0004"><math><![CDATA[<mrow><msub><mi>s</mi><mi>a</mi></msub><mo>=</mo><mo>{</mo><msubsup><mi>c</mi><mi>i</mi><mi>a</mi></msubsup><mo>|</mo><mi>i</mi><mo>=</mo><mn>1,2</mn><mo>,</mo><mo>.</mo><mo>.</mo><mo>.</mo><mo>,</mo><mi>n</mi><mo>}</mo></mrow>]]></math><img file="FDA00005214571300000112.GIF" wi="534" he="98" /></maths><maths num="0005" id="cmaths0005"><math><![CDATA[<mrow><msub><mi>s</mi><mi>b</mi></msub><mo>=</mo><mo>{</mo><msubsup><mi>c</mi><mi>i</mi><mi>b</mi></msubsup><mo>|</mo><mi>i</mi><mo>=</mo><mn>1,2</mn><mo>,</mo><mo>.</mo><mo>.</mo><mo>.</mo><mo>,</mo><mi>m</mi><mo>}</mo></mrow>]]></math><img file="FDA00005214571300000113.GIF" wi="545" he="104" /></maths>步骤3:根据步骤2所得确定词义的句子,应用组合数学中的容斥原理计算句子s<sub>a</sub>和s<sub>b</sub>各自的信息量以及二者的总信息量,计算过程如下:句子s<sub>a</sub>的信息量IC(s<sub>a</sub>)的计算公式如式3所示:[式3]<maths num="0006" id="cmaths0006"><math><![CDATA[<mrow><mi>IC</mi><mrow><mo>(</mo><msub><mi>s</mi><mi>a</mi></msub><mo>)</mo></mrow><mo>=</mo><munderover><mi>&Sigma;</mi><mrow><mi>k</mi><mo>=</mo><mn>1</mn></mrow><mi>n</mi></munderover><msup><mrow><mo>(</mo><mo>-</mo><mn>1</mn><mo>)</mo></mrow><mrow><mi>k</mi><mo>-</mo><mn>1</mn></mrow></msup><munder><mi>&Sigma;</mi><mrow><mn>1</mn><mo>&le;</mo><msub><mi>i</mi><mn>1</mn></msub><mo>&lt;</mo><msub><mi>i</mi><mn>2</mn></msub><mo>&lt;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&lt;</mo><msub><mi>i</mi><mi>k</mi></msub><mo>&le;</mo><mi>n</mi></mrow></munder><mi>commonIC</mi><mrow><mo>(</mo><msubsup><mi>c</mi><msub><mi>i</mi><mn>1</mn></msub><mi>a</mi></msubsup><mo>,</mo><msubsup><mi>c</mi><msub><mi>i</mi><mn>2</mn></msub><mi>a</mi></msubsup><mo>,</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>,</mo><msubsup><mi>c</mi><msub><mi>i</mi><mi>k</mi></msub><mi>a</mi></msubsup><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000521457130000021.GIF" wi="1558" he="191" /></maths>其中,<img file="FDA0000521457130000022.GIF" wi="622" he="103" />表示通过语义网的层次结构和语料库统计共同构建的语义信息空间,<img file="FDA0000521457130000023.GIF" wi="622" he="102" />根据式4计算:[式4]<maths num="0007" id="cmaths0007"><math><![CDATA[<mrow><mi>commonIC</mi><mrow><mo>(</mo><msubsup><mi>c</mi><msub><mi>i</mi><mn>1</mn></msub><mi>a</mi></msubsup><mo>,</mo><msubsup><mi>c</mi><msub><mi>i</mi><mn>2</mn></msub><mi>a</mi></msubsup><mo>,</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>,</mo><msubsup><mi>c</mi><msub><mi>i</mi><mi>k</mi></msub><mi>a</mi></msubsup><mo>)</mo></mrow><mo>=</mo><munder><mi>max</mi><mrow><mi>c</mi><mo>&Element;</mo><mi>subsum</mi><mrow><mo>(</mo><msubsup><mi>c</mi><msub><mi>i</mi><mn>1</mn></msub><mi>a</mi></msubsup><mo>,</mo><msubsup><mi>c</mi><msub><mi>i</mi><mn>2</mn></msub><mi>a</mi></msubsup><mo>,</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><msubsup><mrow><mo>,</mo><mi>c</mi></mrow><msub><mi>i</mi><mi>k</mi></msub><mi>a</mi></msubsup><mo>)</mo></mrow></mrow></munder><mo>[</mo><mo>-</mo><mi>log</mi><mi>P</mi><mrow><mo>(</mo><mi>c</mi><mo>)</mo></mrow><mo>]</mo></mrow>]]></math><img file="FDA0000521457130000024.GIF" wi="1552" he="168" /></maths>其中,<img file="FDA0000521457130000025.GIF" wi="553" he="117" />为在语义网中包含概念<img file="FDA0000521457130000026.GIF" wi="300" he="104" />的所有概念的集合;同理,把式3和式4中所有字母a替换成b,n替换成m,可得句子s<sub>b</sub>的信息量;把句子s<sub>a</sub>和s<sub>b</sub>中所有不重复词语的集合看成一个新的句子,则通过式5得到句子s<sub>a</sub>和s<sub>b</sub>的总信息量IC(s<sub>a</sub>∪s<sub>b</sub>):[式5]<maths num="0008" id="cmaths0008"><math><![CDATA[<mrow><mi>IC</mi><mrow><mo>(</mo><msub><mi>s</mi><mi>a</mi></msub><mo>&cup;</mo><msub><mi>s</mi><mi>b</mi></msub><mo>)</mo></mrow><mo>=</mo><munderover><mi>&Sigma;</mi><mrow><mi>k</mi><mo>=</mo><mn>1</mn></mrow><mi>p</mi></munderover><msup><mrow><mo>(</mo><mo>-</mo><mn>1</mn><mo>)</mo></mrow><mrow><mi>k</mi><mo>-</mo><mn>1</mn></mrow></msup><munder><mi>&Sigma;</mi><mrow><mn>1</mn><mo>&le;</mo><msub><mi>i</mi><mn>1</mn></msub><mo>&lt;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&lt;</mo><msub><mi>i</mi><mi>k</mi></msub><mo>&le;</mo><mi>p</mi></mrow></munder><mi>commonIC</mi><mrow><mo>(</mo><msubsup><mi>c</mi><msub><mi>i</mi><mn>1</mn></msub><mi>a</mi></msubsup><mo>,</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>,</mo><msubsup><mi>c</mi><msub><mi>i</mi><mi>k</mi></msub><mi>b</mi></msubsup><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000521457130000027.GIF" wi="1424" he="178" /></maths>其中,p为句子s<sub>a</sub>和s<sub>b</sub>不重复的词语的总数;步骤4:由并集和交集之间的关系定义两个句子s<sub>a</sub>和s<sub>b</sub>的公共信息量COMMONIC(s<sub>a</sub>,s<sub>b</sub>),计算公式如式6所示:[式6]COMMONIC(s<sub>a</sub>,s<sub>b</sub>)=IC(s<sub>a</sub>)+IC(s<sub>b</sub>)‑IC(s<sub>a</sub>∪s<sub>b</sub>)步骤5:根据Jaccard相关性原理,定义句子s<sub>a</sub>和s<sub>b</sub>的相似度sim(s<sub>a</sub>,s<sub>b</sub>),计算公式如式7所示:[式7]<maths num="0009" id="cmaths0009"><math><![CDATA[<mrow><mi>sim</mi><mrow><mo>(</mo><msub><mi>s</mi><mi>a</mi></msub><mo>,</mo><msub><mi>s</mi><mi>b</mi></msub><mo>)</mo></mrow><mo>=</mo><mfrac><mrow><mi>COMMONIC</mi><mrow><mo>(</mo><msub><mi>s</mi><mi>a</mi></msub><mo>,</mo><msub><mi>s</mi><mi>b</mi></msub><mo>)</mo></mrow></mrow><mrow><mi>IC</mi><mrow><mo>(</mo><msub><mi>s</mi><mi>a</mi></msub><mo>&cup;</mo><msub><mi>s</mi><mi>b</mi></msub><mo>)</mo></mrow></mrow></mfrac></mrow>]]></math><img file="FDA0000521457130000031.GIF" wi="820" he="173" /></maths>步骤6:输出两个句子的相似度sim(s<sub>a</sub>,s<sub>b</sub>)。
地址 100081 北京市海淀区中关村南大街5号北京理工大学