HanLP 2.0语义分析模块已开源!支持中文语义分析和英文语义分析等。
本文介绍语义依存的语言学知识以及BH中文语义依存语料库的标注规范。
给定一个句子,语义依存分析(Semantic Dependency Parsing,SDP)任务试图找出所有在语义上有所关联的词语对,并且预测相应的语义标签。在中文界,最有影响力的标注方案是BH-SDP,由北京语言大学和哈尔滨工业大学联合制定。在该方案下,一个语义依存分析标注结果如下:
区别于依存句法分析的树形结构:
语义分析结果为一个有向无环图,称为语义依存图(Semantic Dependency Graph)。图中的节点为单词,边为语义依存弧,边上的标签为语义关系。
语义依存弧
语义依存成立的两个词语常常满足:
-
一个是谓词(predicate),包括大部分谓语性成分(大部分动词、小部分名词或形容词)。
-
另一个是论元(argument),指的是与谓语直接相关的词语(比如谓词是“吃”的话,那么论元就包括“吃”这个动作的发出者、与“吃”相关的食物、餐具、时间和地点等)。
当然谓词与谓词、论元与论元之间也可能存在语义依存,下一节会详细阐述。
标注语义依存弧的一个原则就是优先选择实词,因为实词与谓词直接相关联。反之,在依存句法树中,谓词和论元之间的路径常常含有大量虚词。比如下图:
上图左的句法依存树中,谓词“看”和论元“教室”被“在”这个介词隔开。如果程序员想要编程从这棵树中提取“看”所发生的地点,则不得不从“看”移动到子节点“在”,然后遍历孙子节点才能找到“教室”。这个过程不仅麻烦,而且容易出错。而上图右的语义依存图中,“看”与“教室”直接相连,提取结构化信息的操作可以一步到位。
当句子结构复杂时,通过句法依存树抽取结构化信息十分困难。而通过语义依存图依然能够获取简洁的信息。如下图所示,蓝色为依存句法树,绿色为语义依存图:
读者可以试着分别从两个结构中提取如下信息:“我在哪”“用什么喝汤”。句法分析树的结果是间接的,而语义依存图的结果是直接的。
这样的例子还有很多,比如“张三吃了苹果”可以有如下三种不同的表述。它们的依存句法树差别很大,但语义依存图却是相似的。
由于一个论元可能与多个谓词相关,一个谓词也可能与多个论元相关,导致一个子节点可能有多个父节点,一个父节点也可能有多个子节点。语义依存分析产生的结果不再是一棵树,而是一个有向图。由于标注规范的约束,该有向图被限定为无环图。
语义依存关系
语义单元的颗粒度由高到低可以分为如下几个层级:
-
事件链(复合句)
-
事件(单句)
-
论元(语块)。与某个谓词相关的名词性短语。
-
概念(实词)。即人类基本思维或实词。
-
标记(虚词)。说话人附加在实体上的信息,如语气或情感。
如何刻画这些关系,语义角色标注仅关注最重要的那个谓词以及该谓词与论元之间的关系。而语义依存关系则同时关注所有语义单元之间的联系。
句子的意义由语义关系和和语义附加刻画,语义附着(attachment)指的是标记附着到语义单元上。
语义关系分为对称和不对称两种,对称的关系包括合作、选择、等价等等,不对称的关系包括:
-
核心语义角色与非核心语义角色之间的搭配关系。比如谓词“修理”作为核心语义角色,句子“工人修理地下管道”作为非核心语义角色。谓词和名词之间的关系都属于搭配关系。语义角色一般指的是此种搭配关系,中文一共有32种语义角色。
-
论元内概念之间的修饰称为附加关系,比如“地下的管道”中,“地下”修饰“管道”,属于附加关系,详细地说属于“位置关系”。
-
连接两个非对称非嵌套关系之间的连接关系,比如“如果天气好,我就去故宫”中,前一个事件是后一个事件的条件。中文中一共有15种连接关系。
特殊情况
反关系
当动词修饰名词时,从名词到动词连接一条反关系(r-*)。比如下图中左边“打”修饰核心词语“男孩”,而右图“打”是“男孩”的谓词,两者存在微妙的不同。
嵌套事件
语法上一个事件降级(degrade)作为另一个事件的成分,整个句子形成两个层级。此时用降级(d-*)来标记,比如:
语义依存分析标注集
于是,BH一共设计了45种标签来描述主要语义角色和论元之间的关系(主要语义角色),19种标签来描述谓词之间的关系(事件关系),17种标签来描述谓词的补充信息(语义依附关系)。标注集如下表所示:
LTP还给出了一份规范的中文翻译及示例:
关系类型 | Tag | Description | Example |
---|---|---|---|
施事关系 | Agt | Agent | 我送她一束花 (我 <– 送) |
当事关系 | Exp | Experiencer | 我跑得快 (跑 –> 我) |
感事关系 | Aft | Affection | 我思念家乡 (思念 –> 我) |
领事关系 | Poss | Possessor | 他有一本好读 (他 <– 有) |
受事关系 | Pat | Patient | 他打了小明 (打 –> 小明) |
客事关系 | Cont | Content | 他听到鞭炮声 (听 –> 鞭炮声) |
成事关系 | Prod | Product | 他写了本小说 (写 –> 小说) |
源事关系 | Orig | Origin | 我军缴获敌人四辆坦克 (缴获 –> 坦克) |
涉事关系 | Datv | Dative | 他告诉我个秘密 ( 告诉 –> 我 ) |
比较角色 | Comp | Comitative | 他成绩比我好 (他 –> 我) |
属事角色 | Belg | Belongings | 老赵有俩女儿 (老赵 <– 有) |
类事角色 | Clas | Classification | 他是中学生 (是 –> 中学生) |
依据角色 | Accd | According | 本庭依法宣判 (依法 <– 宣判) |
缘故角色 | Reas | Reason | 他在愁女儿婚事 (愁 –> 婚事) |
意图角色 | Int | Intention | 为了金牌他拼命努力 (金牌 <– 努力) |
结局角色 | Cons | Consequence | 他跑了满头大汗 (跑 –> 满头大汗) |
方式角色 | Mann | Manner | 球慢慢滚进空门 (慢慢 <– 滚) |
工具角色 | Tool | Tool | 她用砂锅熬粥 (砂锅 <– 熬粥) |
材料角色 | Malt | Material | 她用小米熬粥 (小米 <– 熬粥) |
时间角色 | Time | Time | 唐朝有个李白 (唐朝 <– 有) |
空间角色 | Loc | Location | 这房子朝南 (朝 –> 南) |
历程角色 | Proc | Process | 火车正在过长江大桥 (过 –> 大桥) |
趋向角色 | Dir | Direction | 部队奔向南方 (奔 –> 南) |
范围角色 | Sco | Scope | 产品应该比质量 (比 –> 质量) |
数量角色 | Quan | Quantity | 一年有365天 (有 –> 天) |
数量数组 | Qp | Quantity-phrase | 三本书 (三 –> 本) |
频率角色 | Freq | Frequency | 他每天看书 (每天 <– 看) |
顺序角色 | Seq | Sequence | 他跑第一 (跑 –> 第一) |
描写角色 | Desc(Feat) | Description | 他长得胖 (长 –> 胖) |
宿主角色 | Host | Host | 住房面积 (住房 <– 面积) |
名字修饰角色 | Nmod | Name-modifier | 果戈里大街 (果戈里 <– 大街) |
时间修饰角色 | Tmod | Time-modifier | 星期一上午 (星期一 <– 上午) |
反角色 | r + main role | 打篮球的小姑娘 (打篮球 <– 姑娘) | |
嵌套角色 | d + main role | 爷爷看见孙子在跑 (看见 –> 跑) | |
并列关系 | eCoo | event Coordination | 我喜欢唱歌和跳舞 (唱歌 –> 跳舞) |
选择关系 | eSelt | event Selection | 您是喝茶还是喝咖啡 (茶 –> 咖啡) |
等同关系 | eEqu | event Equivalent | 他们三个人一起走 (他们 –> 三个人) |
先行关系 | ePrec | event Precedent | 首先,先 |
顺承关系 | eSucc | event Successor | 随后,然后 |
递进关系 | eProg | event Progression | 况且,并且 |
转折关系 | eAdvt | event adversative | 却,然而 |
原因关系 | eCau | event Cause | 因为,既然 |
结果关系 | eResu | event Result | 因此,以致 |
推论关系 | eInf | event Inference | 才,则 |
条件关系 | eCond | event Condition | 只要,除非 |
假设关系 | eSupp | event Supposition | 如果,要是 |
让步关系 | eConc | event Concession | 纵使,哪怕 |
手段关系 | eMetd | event Method | |
目的关系 | ePurp | event Purpose | 为了,以便 |
割舍关系 | eAban | event Abandonment | 与其,也不 |
选取关系 | ePref | event Preference | 不如,宁愿 |
总括关系 | eSum | event Summary | 总而言之 |
分叙关系 | eRect | event Recount | 例如,比方说 |
连词标记 | mConj | Recount Marker | 和,或 |
的字标记 | mAux | Auxiliary | 的,地,得 |
介词标记 | mPrep | Preposition | 把,被 |
语气标记 | mTone | Tone | 吗,呢 |
时间标记 | mTime | Time | 才,曾经 |
范围标记 | mRang | Range | 都,到处 |
程度标记 | mDegr | Degree | 很,稍微 |
频率标记 | mFreq | Frequency Marker | 再,常常 |
趋向标记 | mDir | Direction Marker | 上去,下来 |
插入语标记 | mPars | Parenthesis Marker | 总的来说,众所周知 |
否定标记 | mNeg | Negation Marker | 不,没,未 |
情态标记 | mMod | Modal Marker | 幸亏,会,能 |
标点标记 | mPunc | Punctuation Marker | ,。! |
重复标记 | mPept | Repetition Marker | 走啊走 (走 –> 走) |
多数标记 | mMaj | Majority Marker | 们,等 |
实词虚化标记 | mVain | Vain Marker | |
离合标记 | mSepa | Seperation Marker | 吃了个饭 (吃 –> 饭) 洗了个澡 (洗 –> 澡) |
根节点 | Root | Root | 全句核心节点 |
SemEval-2016 Task 9中文语义依存语料库
该语料库作为SemEval-2016 Task 9的比赛数据,已经由哈工大免费公开在GitHub上。记得当年还找车老师要过这份数据,现在能够公之于众,实属幸事。援引官网的介绍:
SemEval-2016 Task 9中文语义依存图数据集,包含10,068句新闻句子(NEWS)和15,362句课文句子(TEXTBOOKS)。新闻句子平均长度是31个词,课文句子平均长度是14个词。具体的数据划分如表1所示。
语料的基本格式为CoNLL:
其中第1列是词序号,第2列是词,第4列是词性,第7列是父节点序号(0表示父节点为虚拟根节点),第8列是当前词与父节点之间的语义关系(弧标签)。(在CoNLLX格式中第3列是词根,由于中文没有词根信息因此与第2列相同。第4、5列分别是粗粒度和细粒度词性,这里只有一种词性,因此这两列相同。)用多个具有相同词序号的行表示多父节点情况,每一行记录该词一个父节点的信息。
只不过允许那些具有多个head的词语连续出现在多行中,比如上图的“她”有两个head,分别是“脸色”(领事关系)与“病”(当事关系)。
语料库中的新闻领域与CTB的来源相同,正好可以比较一下两者的区别。
依存句法分析
1 去年 _ NT NT _ 2 tmod _ _ 2 新增 _ VV VV _ 0 root _ _ 3 贷款 _ NN NN _ 2 dobj _ _ 4 十四点四一亿 _ CD CD _ 5 nummod _ _ 5 元 _ M M _ 2 range _ _ 6 , _ PU PU _ 2 punct _ _ 7 比 _ P P _ 10 prep _ _ 8 上 _ DT DT _ 7 pobj _ _ 9 年 _ M M _ 8 clf _ _ 10 增加 _ VV VV _ 2 dep _ _ 11 八亿多 _ CD CD _ 12 nummod _ _ 12 元 _ M M _ 10 range _ _ 13 。 _ PU PU _ 2 punct _ _
语义依存分析
1 去年 去年 NT NT _ 2 Time _ _ 2 新增 新增 VV VV _ 0 Root _ _ 3 贷款 贷款 NN NN _ 2 Pat _ _ 3 贷款 贷款 NN NN _ 10 Exp _ _ 4 十四点四一亿 十四点四一亿 CD CD _ 5 Quan _ _ 5 元 元 M M _ 2 Nvar _ _ 6 , , PU PU _ 2 mPunc _ _ 7 比 比 P P _ 9 mPrep _ _ 8 上 上 DT DT _ 9 Desc _ _ 9 年 年 M M _ 1 Comp _ _ 10 增加 增加 VV VV _ 2 eSucc _ _ 11 八亿多 八亿多 CD CD _ 12 Quan _ _ 12 元 元 M M _ 10 Nvar _ _ 13 。 。 PU PU _ 10 mPunc _ _
贷款有两个head。
值得一提的是,目前的中文语义依存分析准确率并不高,大致只有60%左右,英文也只有85%左右,还没成熟到可以生产用的地步。
References
https://github.com/dingyu-scir/SDP-Specification/blob/master/sdp_guidline.md
https://www.cnblogs.com/CheeseZH/p/5768389.html
句法分析我感觉用处不大,为何不直接实现语义分析呢,句法分析到语义分析是顺理成章,还是说另起模块,单独实现语义分析的呢?
刚刚入门NLP,只能先从调包工作开始,请问如果要对于报警信息进行自动识别归类归类为不同的案件类别,比如治安类,求助类等等,解决思路和方向如何?用hanlp就可以解决还是使用TensorFlow,有点懵
句法分析现在准确率达到多少?能应用到生产吗
祝贺老铁时隔10个月再次更新
感谢作者的介绍。我查看了ltp的官网,目前语义依存的代码并未公开。请问作者有相关的语义依存具体实现代码的资源吗?亦或是作者是否找到过其他网上开发的语义依存的代码?