【发布时间】:2015-10-28 22:37:58
【问题描述】:
我想知道哪些算法可以用于 NLU?
比如说我要启动一个程序,我有这几句话
“让我们开始吧”
“让他开始”
很明显,第一句应该启动程序,而不是第二句(因为它没有意义)。
现在,我正在使用斯坦福的 NLP API 并实现了 TokenRegexAnnotator 类:
CoreMapExpressionExtractor<MatchedExpression> extractor = CoreMapExpressionExtractor.createExtractorFromFile(env, "tr.txt");
所以我的代码“知道”“开始”应该做什么,即“开始”应该触发/启动程序。但是“开始”可以与任何内容一起使用,例如“启动汽车”。在这种情况下,我不想“启动”程序,因为这句话是关于启动汽车,而不是程序。为了解决这个问题,我使用了斯坦福的 CollapsedDependenciesAnnotation 类:
SemanticGraph dependencies = s.get(CollapsedDependenciesAnnotation.class);
Iterable<SemanticGraphEdge> edge_set = dependencies.edgeIterable();
我使用nsubj 依赖项来查看主题是否为PRP(代词),因为我希望程序仅在主题为PRP 时启动。所以当我在程序中输入“让我们开始”这句话时,程序就启动了。但是,当我输入句子“启动汽车”时,程序没有启动。一切正常...
但是当我输入句子“让他开始”时,程序也会启动(如上所述)。 (它开始是因为“他”也是一个代词)。我不希望程序在我输入这句话时启动(因为“让他启动”与启动程序无关)。那么程序如何知道这一点呢?我能做些什么来解决这个问题?是否有算法可以让计算机区分“让我们开始”和“让他开始”?
关于如何解决这个问题的任何想法?
谢谢!
(我希望我很清楚)
【问题讨论】:
标签: pattern-matching nlp semantics stanford-nlp lexical-analysis