我正在做一个 NLP 项目,我需要一个示例说明的以下功能。说有一句话
告诉山姆,因为他病了,他将不得不离开亚瑟。
在此声明中,第一个he
必须标记为 Sam,第二个标记he
为 Arthur。我在 Python 中工作。关于我可以用来获得以下功能的任何建议?
我正在做一个 NLP 项目,我需要一个示例说明的以下功能。说有一句话
告诉山姆,因为他病了,他将不得不离开亚瑟。
在此声明中,第一个he
必须标记为 Sam,第二个标记he
为 Arthur。我在 Python 中工作。关于我可以用来获得以下功能的任何建议?
此任务称为共指解析。为了解析您提到的复杂案例,您需要使用共指解析系统,其中大部分(免费/OOS)是用Java开发的。有几种方法可以轻松地从 Python 中使用它们。最著名的之一是这个 Standford CoreNLP 包装器:https ://github.com/dasmith/stanford-corenlp-python
更新:
现在有具有共指解析的 Python 原生工具,例如:
AllenAI的 AllenNLP。
Huggingface几乎是一个 spaCy 扩展。
斯坦福的斯坦福 NLP。
这些参考资料主要来自这个不错的 RASA(基于 NLU 的聊天机器人解决方案)教程:https ://github.com/RasaHQ/tutorial-knowledge-base
像其他人建议的那样,这是共指解析,这是一个 NLP 活跃的研究课题。
尝试从 huggingface(spacy) 中的以下代码:
import spacy
nlp = spacy.load('en')
import neuralcoref
neuralcoref.add_to_pipe(nlp,greedyness=0.52)
doc = nlp("Tell Sam that he will have to leave without Arthur, as he is sick.")
print(doc._.coref_resolved)
您可以调整算法的贪心度以获得更多分辨率(代词替换)。请记住,增加贪心可能会给您带来不正确的解决方案,这取决于您的用例。