定义(ltp)
语义依存分析 (Semantic Dependency Parsing, SDP),分析句子各个语言单位之间的语义关联,并将语义关联以依存结构呈现。
使用语义依存刻画句子语义,好处在于不需要去抽象词汇本身,而是通过词汇所承受的语义框架来描述该词汇,而论元的数目相对词汇来说数量总是少了很多的。
语义依存分析目标是跨越句子表层句法结构的束缚,直接获取深层的语义信息。
例如以下三个句子,用不同的表达方式表达了同一个语义信息,即张三实施了一个吃的动作,吃的动作是对苹果实施的。
语义依存分析不受句法结构的影响,将具有直接语义关联的语言单元直接连接依存弧并标记上相应的语义关系。这也是语义依存分析与句法依存分析的重要区别。
如上例对比了句法依存和语义分析的结果,可以看到两者存在两个显著差别。
第一,句法依存某种程度上更重视非实词(如介词)在句子结构分析中的作用,而语义依存更倾向在具有直接语义关联的实词之间建立直接依存弧,非实词作为辅助标记存在。
第二,两者依存弧上标记的语义关系完全不同,语义依存关系是由论元关系引申归纳而来,可以用于回答问题,如我在哪里喝汤,我在用什么喝汤,谁在喝汤,我在喝什么。但是句法依存却没有这个能力。
第三,句法依存为树结构,语义依存为图结构,即是说当前词的依存弧可以有多个。
语义依存与语义角色标注之间也存在关联,语义角色标注只关注句子主要谓词的论元及谓词与论元之间的关系,而语义依存不仅关注谓词与论元的关系,还关注谓词与谓词之间、论元与论元之间、论元内部的语义关系。语义依存对句子语义信息的刻画更加完整全面。
实现
https://github.com/geasyheart/semantic-dependency-parser
欢迎Star!
1. 数据集
目前貌似公开的只有SEMEVAL2016数据集,地址在:HIT-SCIR/SemEval-2016,代码仓库中的数据集是将text和news两类合并而来。
额外插一句,对于一个算法项目来讲,不仅仅是算法部分,还要有数据,即使不能公开,也可以造一些例子,能够跑通算法,HanLP在这方面真的是无敌存在!
2. 模型结构
- 这里使用到的模型结构:
1 | semantic_dependency_parser.py [line:34] INFO SemanticDependencyModel( |
- HanLP使用的模型结构:
1 | BiaffineDependencyModel( |
和dependency parser结构相同,但是loss计算和解码部分不同。
区别点在于,举个例子:
1 | # pred_arcs.shape |
因为dependency parser有一个限制,即当前词只可能依存其他一个词,那么argmax(-1)即是在49那里获取最大的,表示和这49个词中最大的作为依存关系,使用交叉熵。
而semantic dependency parser没有这个限制,当前词可能和多个词存在依存关系,那么他的pred_arcs和true_arcs的维度是一样的,都是(32, 49, 49),所以使用BCELoss。
当然也可以用交叉熵,只需要将pred_arcs的维度转换成(32, 49, 49, 2)即可,也是我下面的做法。
3. loss计算和解码
在这里计算loss时,采用的是交叉熵,也就是说s_edge.size(-1) == 2,表示当前词和句子所有词之间是
或者否
,然后argmax(-1)进行解码。
在HanLP计算loss时,对于arc(即edge)的shape为(batch_size, seq_length, seq_length),因为biaffine的输出维度为1,所以这里计算loss时使用BCELoss,表示当前词和句子所有词之间是否存在关系。
另外一个两者的区别点在于计算rel时,HanLP采取的方式是各自计算各自的loss(即arc和rel),然后loss相加。
这里计算rel loss时融合了arc的信息进来,好处就在于能够快速收敛和提升准确度吧。
各模块技术指标
https://www.ltp-cloud.com/intro#benchmark
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 | 全句核心节点 |