我正在开发NLP项目,我需要通过示例说明以下功能。说有一句话
告诉Sam,因为他病了,他将不得不离开Arthur。
在此声明中,第一个he
必须标记为Sam,第二个he
标记为Arthur。我在Python工作。关于我可以使用什么来获得以下功能的任何建议?
答案 0 :(得分:2)
此任务称为共参考分辨率。为了解析像你提到的那样的复杂情况,你需要使用共参考解析系统,其中大多数(free / OOS)是用Java开发的。有几种方法可以从Python中轻松使用它们。其中最着名的是Standford CoreNLP包装器:it is possible - with sockets - to listen on a port and inspect traffic
答案 1 :(得分:1)
更新:
现在有具有共指解析度的Python本机工具,例如:
AllenNLP来自AllenAI。
Huggingface,几乎是一个扩展。
这些引用主要来自于这个不错的RASA(基于NLU的聊天机器人解决方案)教程:https://github.com/RasaHQ/tutorial-knowledge-base
答案 2 :(得分:1)
就像其他人建议的那样,这是共参考解决方案,它是NLP积极的研究主题。
尝试从拥抱面(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)
您可以调整算法的贪婪度以获得更多分辨率(代词替代)。请记住,不断增加的贪婪可能会给您错误的解决方案,这取决于您的用例。