使用 NLTK 的语义角色标签
Posted
技术标签:
【中文标题】使用 NLTK 的语义角色标签【英文标题】:Semantic Role Labeling using NLTK 【发布时间】:2014-01-02 10:34:48 【问题描述】:我有一个句子列表,我想分析每个句子并确定该句子中的语义角色。我该怎么做?
我在 NLTK 模块中发现了 PropBankCorpusReader,它向 Penn Treebank 添加了语义标签信息。此外,我在互联网上的研究表明,该模块用于执行语义角色标签。
然而,我找不到一个小的 HOWTO 来帮助我理解我们如何利用 PropBankCorpusReader 对任意文本执行 SRL。
因此有人可以指出使用PropbankCorpusReader
对任意句子执行 SRL 的示例吗?
【问题讨论】:
【参考方案1】:SRL 根本不是一个小问题,也不是使用nltk
可以立即完成的事情。
您可以将 SRL 的任务分解为 3 个独立的步骤:
-
识别谓词。
对谓词执行词义消歧以确定它接受哪些语义参数。
识别句子中的语义参数。
目前解决此问题的大多数方法都使用监督机器学习,其中分类器将在 Propbank 或 FrameNet 句子的子集上进行训练,然后在剩余的子集上进行测试以测量其准确性。研究人员倾向于专注于调整功能和算法,以及修补上述步骤是按顺序完成还是同时完成,以及以什么顺序完成。
您可能想要查看的一些论文是:
Simmons (1973) - 经典的 SRL 论文。 Gildea and Jurafsky (2002) - 提供一组用于分类的简单功能。 Xue and Palmer (2004) - 更深入地了解有用的功能 Meza-Ruiz and Riedel (2009) - 一种使用 Markov Logic 的有趣方法。马尔可夫逻辑方法很有前途,但根据我自己的经验,它遇到了严重的可扩展性问题(我只使用过Alchemy,尽管Alchemy Lite 看起来很有趣)。使用 nltk Propbank 数据实现某种分类器的工作量并不大,而且 Python 中已经存在一些 off the shelf classifiers。
编辑: 来自爱丁堡大学的This assignment 给出了一些如何解析 Propbank 数据的示例,part of a school project 我确实实现了一个完整的 Propbank 特征解析器,尽管这些特征是专门针对以 Meza-Ruiz 和 Riedel (2009) 的风格在马尔可夫逻辑网络中使用。
【讨论】:
【参考方案2】:查看这个全新的 Python 库(取决于 NLTK)https://pypi.python.org/pypi/nlpnet/ ... 它可以处理 POS 和 SRL。
【讨论】:
截至今天,SRL 模型在 nlpnet 中仅提供葡萄牙语版本【参考方案3】:我建议PractNLPTools,它有许多不错的工具,包括语义角色标签。
我现在正在为一个工作项目询问它,看起来它可以完成工作。
Practnlp工具: https://pypi.python.org/pypi/practnlptools/1.0
GitHub 支持站点: https://github.com/biplab-iitb/practNLPTools
【讨论】:
PractNLPTools only ever had one release, in 6/2014,似乎不活跃【参考方案4】:到目前为止,最简单的选择可能是https://demo.allennlp.org/semantic-role-labeling。由于底层的 Transformer 架构,它需要超过 1 GB 的内存。
【讨论】:
我想他们会想出一个压缩的实现,就像 DistilBERT...? 不确定你是否仍然对这个@smci 感兴趣,但你可以使用 DistilBERT 重新训练 SRL 模型。你只需要修改配置文件bert_base_srl.jsonnet
以上是关于使用 NLTK 的语义角色标签的主要内容,如果未能解决你的问题,请参考以下文章