ASGCN之依存句法图的构建

2023-05-16

文章目录

  • 前言
  • 1.理论部分
    • 1.1 依存句法理论
    • 1.2 依存句法分析
    • 1.3 依存句法的应用
  • 2. 代码实践
    • 2.1 数据集
    • 2.2 代码实现
    • 2.3 效果查看
  • 总结


前言

本文首先介绍依存句法理论,之后通过代码实现ASGCN中的依存句法图数据的构建。


1.理论部分

1.1 依存句法理论

词与词之间存在主从关系,这是一种二元不等价的关系。在句子中,如果一个词修饰另一个词,则称修饰词为从属词(dependent),被修饰的词语称为支配词(head),两者之间的语法关系称为依存关系(dependency relation)。
现代依存语法中,语言学家对依存句法提出了四个约束性公理:

  • 有且只有一个词语(ROOT,虚拟根节点,简称虚根)不依存于其他词语。
  • 除此之外所有单词必须依存于其他单词。
  • 每个单词不能依存于多个单词。
  • 如果单词A依存于B,那么位置处于A和B之间的单词C只能依存于A、B或AB之间的单词。

例子:对于句子“猴子喜欢吃香蕉”,构建其依存句法树如下图所示。

在这里插入图片描述

1.2 依存句法分析

  • 基于图的依存句法分析:树是图的特例,依存句法树其实是完全图的一个子图。如果为完全图中的每条边是否属于句法树的可能性打分,然后就可以利用Prim之类的算法找出最大生成树作为依存句法树了。这样将整棵树的分数分解为每条边上的分数之和,然后在图上搜索最优解的方法统称为基于图的方法。
  • 基于转移的依存句法分析
    我们将一颗依存句法树的构建过程表示为两个动作。如果机器学习模型能够根据句子的某些特征准确地预测这些动作,那么计算机便能够根据这些动作拼装出正确的依存句法树了。这样的拼装动作称为转移。而这类算法统称为基于转移的依存句法分析。

1.3 依存句法的应用

短语缩句、提取文本主要内容、文本分类、情感分析、意见抽取等。

2. 代码实践

2.1 数据集

使用的数据集为acl-14-short-data中的训练集,文件后缀为“.raw”,文件中部分数据如下所示,数据由上千条评论组成,每条评论中方面词被挖出单独放在第二行,空缺位置用$T$表示,每条数据的第三行为数字-1或0,亦或1,表示此方名词对应的情感为消极、积极或中性。

i agree about arafat . i mean , shit , they even gave one to $T$ ha . it should be called ‘’ the worst president ‘’ prize .
jimmy carter
-1
musicmonday $T$ - lucky do you remember this song ? it ` s awesome . i love it .
britney spears
1

2.2 代码实现

# -*- coding: utf-8 -*-
import numpy as np
import spacy
import pickle
import argparse
from spacy.tokens import Doc

class WhitespaceTokenizer(object):
    def __init__(self, vocab):
        self.vocab = vocab

    def __call__(self, text):
        words = text.split()  # 句子切分为单词
        # All tokens 'own' a subsequent space character in this tokenizer
        spaces = [True] * len(words)
        return Doc(self.vocab, words=words, spaces=spaces) # 单词恢复成句子

nlp = spacy.load('en_core_web_sm')
nlp.tokenizer = WhitespaceTokenizer(nlp.vocab) # 将单词变为doc的类

def dependency_adj_matrix(text):
    # https://spacy.io/docs/usage/processing-textco
    tokens = nlp(text)
    words = text.split()  # 句子切分为单次
    matrix = np.zeros((len(words), len(words))).astype('float32')  # 创建n*n的矩阵(n为句子中单词的个数)
    assert len(words) == len(list(tokens))  #做出一些假设,程序运行时如果假设不成立,程序就会中断
    # 构建依存矩阵
    for token in tokens:
        matrix[token.i][token.i] = 1
        for child in token.children:  # 返回依赖token的其他token
            matrix[token.i][child.i] = 1
            matrix[child.i][token.i] = 1

    return matrix

def process(filename):
    fin = open(filename, 'r', encoding='utf-8', newline='\n', errors='ignore')  # 打开文件
    lines = fin.readlines()  # 读入数据
    fin.close() # 关闭文件
    idx2graph = {}
    fout = open('dasgu'+'.graph', 'wb')   # 创建新文件(用于存储图数据)
    for i in range(0, len(lines), 3):
        text_left, _, text_right = [s.strip() for s in lines[i].partition("$T$")]
        aspect = lines[i + 1].strip()
        adj_matrix = dependency_adj_matrix(text_left+' '+aspect+' '+text_right)  # 将方面词回填到句子中
        idx2graph[i] = adj_matrix  # 构建每个句子的依存矩阵
    pickle.dump(idx2graph, fout)  # 将依存树矩阵的数据写入文件
    fout.close() 

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--dataset', default=None, type=str, help='path to dataset')
    opt = parser.parse_args()
    process('./datasets/acl-14-short-data/train.raw')

2.3 效果查看

通过在代码的如下行出打断点调试来查看第一条数据的依赖图数据idx2graph[0]如下图所示。

idx2graph[i] = adj_matrix  # 构建每个句子的依存矩阵

在这里插入图片描述
整个程序结束后在代码文件所在的目录下生成"dasgu.graph"的文件。
在这里插入图片描述


总结

本文简要介绍了依存句法树以依存句法图的代码构建过程。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASGCN之依存句法图的构建 的相关文章

  • jdk的配置与eclipse的使用

    首先自然是安装包从哪里获得这个问题 xff1a jdk历史版本 xff1a https www oracle com java technologies oracle java archive downloads html eclipse历
  • 01 原生JDBC的使用缺陷与基础环境配置

    开发环境 jdk1 7 0 72 eclipse eclipse 3 7 indigo mysql mysql5 1 相关安装教程 jdk的配置与eclipse的使用 与 Mysql 5 1 70 及 Navicat 安装教程 工程目录 创
  • 02 Mybatis结构配置

    文章目录 01 mybatis介绍 02 mybatis框架工作流程 03 ecplice项目jar包导入方法 04 在项目中导入mybitis框架的依赖包 05 项目下创建config文件夹 06 xml配置文件的设置 07 pojo数据
  • 03 Mybatis入门程序

    1 配置SqlMapConfig 配置数据库连接相关信息 span class token prolog lt xml version 1 0 encoding UTF 8 gt span span class token doctype
  • 04 Mybatis的增删改查

    1 mybatis中sql语句的占位符与parameterType 与 parameterType 表示一个占位符 向占位符输入参数 mybatis自动进行java类型和jdbc类型的转换 程序员不需要考虑参数的类型 比如传入字符串 myb
  • C++链表的各种操作

    题目描述 代码 include lt iostream gt include lt algorithm gt using namespace std struct sqList int data sqList next sqList Lis
  • HJ001 字符串最后一个单词的长度

    目录 题目描述 输入描述 输出描述 输入 输出 做题思路 AC代码 题目描述 计算字符串最后一个单词的长度 xff0c 单词以空格隔开 输入描述 输入一行 xff0c 代表要计算的字符串 xff0c 非空 xff0c 长度小于5000 输出
  • 盲签名 blind signature 简介

    转 https blog csdn net zhang hui cs article details 8728776 盲签名 Blind Signature 定义 是一种数字签名的方式 在消息内容被签名之前 对于签名者来说消息内容是不可见的
  • VMware 虚拟机安装 OpenWrt 作旁路由 单臂路由 img 镜像转 vmdk 旁路由无法上网 没网络

    重要注意事项 由于布线原因笔记本只能采用无线的方式连接路由器 xff0c 在Windows10的环境下使用无线网卡桥接 xff0c 结果软路由无法上网 xff0c 翻阅了各种帖子最终发现跟系统底层的协议栈有关系 xff0c 随即放弃使用有线
  • HJ002 计算某字母出现的次数

    目录 题目描述 输入描述 输出描述 输入 输出 做题思路 1 AC代码 1 做题思路 2 AC代码 2 题目描述 写出一个程序 xff0c 接受一个由字母 数字和空格组成的字符串 xff0c 和一个字母 xff0c 然后输出输入字符串中该字
  • HJ003 明明的随机数

    目录 题目描述 输入描述 输出描述 输入 输出 说明 做题思路 AC代码 题目描述 明明想在学校中请一些同学一起做一项问卷调查 xff0c 为了实验的客观性 xff0c 他先用计算机生成了N个1到1000之间的随机整数 xff08 N 10
  • new,delete使用详解(动态多维数组空间申请)

    C语言中利用库函数malloc和free来分配和撤销空间的 C 43 43 中的new与delete是运算符 xff0c 不是函数 xff0c 所以执行效率更高 但C 43 43 中也是可以使用malloc和free的 但是一来不方便 xf
  • 局部,全局(外部),static等变量详解

    首先 xff0c 必须明白一个程序是包含若干个源文件 xff0c 每个源文件又是包含若干个函数 xff0c 每个源文件 函数中又定义了若干个变量 但是每个变量都有自己的作用范围 xff0c 也就是自己的作用域 只有在作用域内才可以访问变量
  • 函数的可变参数的实现

    stdarg h stdarg h是C语言中C标准函数库的头文件 xff0c stdarg是由standard xff08 标准 xff09 arguments xff08 参数 xff09 简化而来 xff0c 主要目的为让函数能够接收可
  • 常见的注入方式

    设计模式中常见的注入方式 依赖注入 最近在求职 xff0c 耽搁了 xff0c 对于应届生来讲想找个大数据相关的工作何其困难 所以在填充一些自己不足之处 xff0c 希望与君共勉 一 依赖注入DI 开发过程中 xff0c 如果发现客户程序依
  • 部分Fortify代码扫描高风险解决方案

    部分Fortify代码扫描高风险解决方案 一 Category Access Control Database 问题描述 xff1a Database access control 错误在以下情况下发生 xff1a 1 数据从一个不可信赖的
  • 中标麒麟高级服务器V7安装

    中标麒麟高级服务器V7安装 中标麒麟高级服务器操作系统软件 xff08 兆芯版 xff09 一 安装步骤 准备 xff1a 1 相关中标麒麟镜像 2 vncviewer xff0c 由它去远程连接服务器上的机器节点 1 首先进入界面呈现 该
  • Hive--OR-AND使用方法

    OR AND 数据源 xff1a 1 22 1 21 2 22 1 20 select from id age where id 61 1 or id 61 2 and age 61 22 表示 xff1a 查询id 61 1 同时age

随机推荐

  • gdb 打印内存和数组

    打印数组 xff1a p arrayPtr 64 256 打印256个数组元素类型元素值 xff0c 二元操作符 64 左边数组第一个元素 xff0c 右边数组长度 p x char arrayPtr 64 256 以16进制打印256个以
  • Hive--清除/删除Hive表数据,where条件

    清除Hive表数据 hive删除表 xff1a drop table table name hive删除表中数据 xff1a truncate table table name hive按分区删除数据 xff1a alter table t
  • Mysql--查询时使用SQL将字段的数据类型转换(varchar->int)

    查询时使用SQL将数据类型转换 在 span class token keyword sql span 里面String转 span class token keyword int span span class token punctua
  • Mysql项目实践常用操作汇总(不断更新)

    MySQL 1 主键 xff0c 索引 xff0c 引擎 CREATE TABLE 96 表名 96 96 列名1 96 int 11 NOT NULL 96 列名2 96 varchar 255 NOT NULL PRIMARY KEY
  • 大文件处理方案

    处理海量数据问题 xff0c 无非就是 xff1a 分而治之 hash映射 43 hash统计 43 堆 快速 归并排序 xff1b Bloom filter Bitmap xff1b Trie树 数据库 倒排索引 xff1b 外排序 xf
  • spark读取嵌套json代码测试示例

    示例一 示例数据 xff1a span class token punctuation span span class token string 34 name 34 span span class token operator span
  • Redis集群原理和总结

    Redis集群原理 节点主从 xff08 镜像全量 xff09 43 哈希slot xff08 分片 xff09 无主模型 遵循 CAP原则 C一致性 A可用性 P分区容错性 xff0c 三者不可兼得 数据放在大数据集群中的方式 集群承载数
  • Hbase基础

    Hbase 谷歌 BigTable论文 海量存储 列式存储 极易扩展 RS HDFS 高并发 稀疏性 主要是针对Hbase列的灵活性 xff0c 在列族中 xff0c 你可以指定任意多的列 xff0c 在列数据为空的情况下 xff0c 是不
  • Flink

    Flink 一 简介 Flink核心是一个流式的数据流执行引擎 xff0c 其针对数据流的分布式计算提供了数据分布 数据通信以及容错机制等功能 基于流执行引擎 xff0c Flink提供了诸多更高抽象层的API以便用户编写分布式任务 xff
  • SUMO学习入门 (二)路网文件的生成

    声明 xff1a 该文章为博主转载自知乎用户 xff1a 侘寂升平 xff0c 侵删 xff01 非常感谢知乎朋友无私分享的sumo系列文章 xff0c 给了我很多的指导 xff01 欢迎读者关注该博主 xff01 以下为转载正文 xff1
  • 第七章 结构体

    文章目录 前言一 结构体与结构体指针1 结构体的定义 引用与初始化2 结构体指针3 typedef的使用A typedef结构体B typedef整型 二 C 43 43 的引用1 数字2 指针 前言 本文主要介绍结构体的使用 一 结构体与
  • Mapreduce实例(七):二次排序

    系统环境 Linux Ubuntu 16 04 jdk 7u75 linux x64 hadoop 2 6 0 cdh5 4 5 hadoop 2 6 0 eclipse cdh5 4 5 jar eclipse java juno SR2
  • WiFiduino+blinker+小爱同学打造智慧卧室

    系列文章目录 文章目录 系列文章目录前言一 实现功能二 所需材料三 导线连接四 软件开发1 开发环境搭建2 编写程序 五 手机操作部分1 blinkerAPP2 米家APP3 小米音箱APP 六 实物部分1 实物图片 总结 前言 本科二年级
  • 深度学习实际—手写体识别

    文章目录 前言1 什么是机器识别手写数字 xff1f 2 MNIST数据集是什么 xff1f 3 显示MNIST数据集4 名词解释4 1 图像4 2 卷积层4 3 池化层4 4 线性层4 5 激活函数4 6 损失函数 https blog
  • 简易计时器开发

    一 项目场景 xff1a 事情是这样的 xff0c 学校给了一个网页 xff0c 让我们去学习 xff0c 网页超过5分钟无操作会自动跳出 xff0c 需要一个定时器来提醒我们每隔一段时间去操作网页 xff0c 我在网上查了几个定时器 xf
  • 第9章 无监督学习

    系列文章目录 第1章 绪论 第2章 机器学习概述 第3章 线性模型 第4章 前馈神经网络 第5章 卷积神经网络 第6章 循环神经网络 第7章 网络优化与正则化 第8章 注意力机制与外部记忆 第9章 无监督学习 第10章 模型独立的学习方式
  • 第1章 计算机组成原理概述

    文章目录 前言1 0 课程简介1 0 1 课程的地位1 0 2 课程学习思路1 0 3 课程组成 1 1 计算机系统简介1 1 1 计算机组成1 计算机的类型2 计算机的组成3 软件组成 1 1 2 计算机系统的层次结构1 物理层方面2 程
  • ASGCN之图卷积网络(GCN)

    文章目录 前言1 理论部分1 1 为什么会出现图卷积网络 xff1f 1 2 图卷积网络的推导过程1 3 图卷积网络的公式 2 代码实现参考资料 前言 本文从使用图卷积网络的目的出发 xff0c 先对图卷积网络的来源与公式做简要介绍 xff
  • 深度学习领域的多任务学习综述

    文章目录 前言1 什么是多任务学习 xff1f 2 为何要使用多任务学习 xff1f 3 多任务学习有哪些类型 xff1f 3 1 基于硬参数共享的多任务学习3 2 基于软参数共享的多任务学习 4 为什么多任务学习能提升模型的性能 xff1
  • ASGCN之依存句法图的构建

    文章目录 前言1 理论部分1 1 依存句法理论1 2 依存句法分析1 3 依存句法的应用 2 代码实践2 1 数据集2 2 代码实现2 3 效果查看 总结 前言 本文首先介绍依存句法理论 xff0c 之后通过代码实现ASGCN中的依存句法图