跳转到主要内容

树结构条件随机场的PyTorch实现。

项目描述

🌲 torch-treecrf

PyTorch实现的树结构条件随机场。

Actions Coverage License PyPI Wheel Python Versions Python Implementations Source GitHub issues Changelog Downloads

🗺️ 概述

条件随机场 (CRF) 是一组判别性图形学习模型,可用于建模变量之间的依赖关系。最常见的CRF形式是线性链CRF,其中预测依赖于观察变量以及该预测之前和之后的预测(上下文)。线性链CRF在自然语言处理中得到广泛应用。

$$ P(Y | X) = \frac{1}{Z(X)} \prod_{i=1}^n{ \Psi_i(y_i, x_i) } \prod_{i=2}^n{ \Psi_{i-1,i}(y_{i-1}, y_i)} $$

2006年,Tang等人 et al.[1] 引入了树结构CRF来建模预测变量之间的层次关系,允许预测变量与其父亲和子代之间的依赖关系。

$$ P(Y | X) = \frac{1}{Z(X)} \prod_{i=1}^{n}{ \Psi_i(y_i, x_i) } \prod_{j \in \mathcal{N}(i)}{ \Psi_{j,i}(y_j, y_i)} $$

本包实现了PyTorch中的一个通用树结构CRF层。该层可以堆叠在线性层之上,以实现正确的树结构CRF,或者堆叠在任何其他类型的模型之上,该模型为每个标签的每个类别在每个类别中产生对数空间的发射得分。使用信念传播[2]实现边缘计算,允许在树结构上进行精确推理[3]

$$ \begin{aligned} P(y_i | X) & = \frac{1}{Z(X)} \Psi_i(y_i, x_i) & \underbrace{\prod_{j \in \mathcal{C}(i)}{\mu_{j \to i}(y_i)}} & & \underbrace{\prod_{j \in \mathcal{P}(i)}{\mu_{j \to i}(y_i)}} \ & = \frac1Z \Psi_i(y_i, x_i) & \alpha_i(y_i) & & \beta_i(y_i) \ \end{aligned} $$

其中,对于每个节点 $i$,来自父节点 $\mathcal{P}(i)$ 和子节点 $\mathcal{C}(i)$ 的消息使用求和-积算法[4]递归计算

$$ \begin{aligned} \forall j \in \mathcal{C}(i), \mu_{j \to i}(y_i) = \sum_{y_j}{ \Psi_{i,j}(y_i, y_j) \Psi_j(y_j, x_j) \prod_{k \in \mathcal{C}(j)}{\mu_{k \to j}(y_j)} } \ \forall j \in \mathcal{P}(i), \mu_{j \to i}(y_i) = \sum_{y_j}{ \Psi_{i,j}(y_i, y_j) \Psi_j(y_j, x_j) \prod_{k \in \mathcal{P}(j)}{\mu_{k \to j}(y_j)} } \ \end{aligned} $$

实现足够通用,任何类型的有向无环图都可以用作标签层次结构,而不仅仅是树。

🔧 安装

直接从PyPi安装torch-treecrf包,PyPi托管通用轮,可以使用pip安装

$ pip install torch-treecrf

📋 特性

  • 使用邻接矩阵编码有向图,任何节点都可以以$\mathcal{O}(1)$的检索速度获取其子节点和父节点,存储空间为$\mathcal{O}(N+E)$。
  • 支持任何可表示为有向无环图的循环层次结构,而不仅仅是有向树,允许预测诸如基因本体之类的类别。
  • 多类别输出,前提是所有目标标签都有相同数量的类别:$Y \in \left\{ 0, .., C \right\}^L$。
  • 支持小批量处理,使用向量化的消息 $\alpha_i(y_i)$ 和 $\beta_i(y_i)$ 的计算。

💡 示例

要创建一个树结构CRF,您必须首先定义表示变量之间关系的树。让我们构建一个简单的CRF,用于具有两个子节点的根变量

首先,定义一个邻接矩阵 $M$ 来表示层次结构,使得 $M_{i,j}$ 为 $1$ 如果 $j$ 是 $i$ 的父节点

adjacency = torch.tensor([
    [0, 0, 0],
    [1, 0, 0],
    [1, 0, 0]
])

然后,创建一个CRF,具有正确的特征数量,就像为torch.nn.Linear模块定义一样,以获得Torch模型

crf = torch_treecrf.TreeCRF(n_features=30, hierarchy=hierarchy)

如果您只想使用CRF层,请使用TreeCRFLayer模块,它期望并输出形状为$(\star, C, L)$的发射张量,其中$\star$是小批量大小,$L$是标签数量,$C$是每个标签的类别数量。

💭 反馈

⚠️ 问题跟踪器

发现了一个错误?有增强请求?如果您需要报告或询问某些内容,请访问GitHub问题跟踪器。如果您正在提交错误,请尽可能多地提供有关问题的信息,并尝试在简单、易于复现的情况下重现相同的错误。

🏗️ 贡献

欢迎贡献!有关更多详细信息,请参阅CONTRIBUTING.md

⚖️ 许可证

本库在MIT许可证下提供。

本库由Martin Larralde在其博士项目中开发,该项目在欧洲分子生物学实验室EMBLZeller团队进行。

📚 参考文献

  • [1] 唐杰,洪明才,李娟子,梁邦勇。‘基于树结构的条件随机场语义标注’。收录于《语义网 - ISWC 2006》,由伊莎贝尔·克鲁兹,斯特凡·德克,迪恩·阿尔芒,克里斯·普里斯特,丹尼尔·施瓦贝,彼得·米卡,迈克·乌施尔德,洛拉·M·阿罗约编辑,第640-53页。计算机科学讲义。柏林,海德堡:斯普林格出版社,2006年。doi:10.1007/11926078_46
  • [2] Pearl,Judea。‘贝叶斯牧师关于推理引擎的分布式分层方法’。收录于《第二届AAAI人工智能会议论文集》,第133-136页。AAAI’82。宾夕法尼亚州匹兹堡:AAAI出版社,1982年。
  • [3] 巴赫,弗朗西斯,和奥布辛斯基。‘乘积算法和隐马尔可夫模型’,ENS课程材料,2016年。http://imagine.enpc.fr/%7Eobozinsg/teaching/mva_gm/lecture_notes/lecture7.pdf
  • [4] Kschischang,Frank R.,Brendan J. Frey,和Hans-Andrea Loeliger。‘因子图和乘积算法’。《信息理论交易》第47卷第2期(2001年2月):第498-519页。doi:10.1109/18.910572

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

torch-treecrf-0.2.0.tar.gz (12.2 kB 查看哈希值)

上传时间 源代码

构建分布

torch_treecrf-0.2.0-py3-none-any.whl (9.8 kB 查看哈希值)

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页