我想建立一个与用户交谈并从用户那里获得一些输入的ml程序。 ml程序分析输入数据(关键字),然后预测最佳解决方案。
答案 0 :(得分:-1)
因此,您正在研究一种AI应用程序,它需要某种机器智能来处理自然语言。 让我们说这里选择的语言是英语。在构建这样的系统之前,有许多事情需要考虑。
简而言之,您需要构建所有上述基本模块,然后才能生成响应。 你需要决定你正在做什么样的问题?它是一个开放域名还是封闭域名问题,这意味着该应用程序的知识范围是什么。 例如:Google现在是一个开放域名问题,实际上可以采取任何可能的输入。 但是一些应用程序属于特定任务,例如在应用程序等中自动化食品订单,其中可以提出的问题的范围是有限的。
一旦决定了,你需要解析你的输入句子,并且依赖解析是要走的路。您可以使用Stanford核心NLP套件来实现上面提到的大多数NLP任务。
一旦输入句子被解析并且你有主题,对象等,就可以消除句子中单词的歧义,因为特定单词可以有不同的含义。
然后消除动词的意义,即识别动词的类型(如返回可能意味着回到某个地方或回馈某些东西)
然后你需要解决共指解析意味着在给定的上下文中映射名词和代词以及其他实体。例如: 我的名字是约翰。我在ABC公司工作。
这里我在第二句中提到约翰。 这有助于我们回答John工作的问题。由于John仅在第一句中使用,而他的工作在第二句中被提及,因此共同决议帮助我们将它们映射在一起。
手头的下一个任务是语义角色标记,这基本上意味着在句子中针对每个动词标记所有参数。 例如:约翰杀了玛丽。 这里的动词是杀戮,约翰和玛丽是动词杀戮的论据。 John扮演A0角色,Mary扮演角色A1。在NLP社区创建的巨大框架和参数注释框架中提到每个动词的这些角色的定义。 A0表示杀人,A1表示被杀人。 现在,一旦你确定了A0和A1,只需查看kill帧的定义并返回A0表示杀手,A1表示受害者。
手头的另一项重要任务是确定您的系统何时必须回答答案。您需要知道给定的句子是声明性的还是断言的句子或疑问句。您可以通过查看输入句子是否以问号结尾来检查。
现在回答你的问题: 让我们说您对该应用程序的输入是: 输入1:约翰杀了玛丽。 显然这是一个自信的句子,所以只需存储它并按上述方法处理它。 现在下一个输入是:
输入2:谁杀了玛丽?
这是一个疑问句,所以你需要提出答复或回复。
现在找到输入1和输入2的语义角色标签,并返回与句子2中的Who的参数匹配的输入1的单词。 在这种情况下,谁将被标记为A0,John将标记为A0,只需返回John。
提到的大多数NLP模块可以直接使用斯坦福核心NLP实现,但是如果您想自己实现某些算法,可以查看EMNLP,NIPS,ICML,CONLL等最新出版物,以更好地理解它们并实施最适合你的。
祝你好运!