使用NLP或机器学习从句子中提取关键词

时间:2017-10-04 18:07:44

标签: machine-learning nlp deep-learning artificial-intelligence summarization

我是ML / NLP领域的新手,所以我的问题是什么技术最适合实现以下目标:

我们有一个短句 - "去哪里吃饭?"或者"你最喜欢的酒吧是什么?"或者"你最喜欢的廉价酒吧是什么?"

是否有一项技术可以让我训练它,提供以下数据集:

  • "去哪里吃饭?" - >晚餐
  • "你最喜欢的酒吧是什么?" - >杆
  • "你最喜欢的便宜餐厅是什么?" - >便宜,餐厅

以便下次我们对未知活动有类似的问题,比如说,"你最喜欢的是什么?[无论如何]"它能够提取昂贵的"和[无论如何]?

我们的目标是,如果我们能够根据所提问题的数百种变化(或数千种)以及预期的相关输出数据对其进行训练,那么它可以与日常语言一起使用。

如果我们有一个包含酒吧,餐厅,游泳池等预期条款的字典,我知道如果没有NLP / ML就可以制作它,但我们也希望它能用于未知术语。

我已经看过Rake和Scikit的例子 - 学习"事物"的分类,但是我不确定如何将文本提供给那些,所有这些例子都有预定义的输出用于培训。

我还尝试了谷歌的NLP API,亚马逊Lex和Wit,看看他们在提取实体方面有多好,但至少可以说结果令人失望。

阅读摘要技巧,我留下的印象是它不会使用小的单句文本,所以我还没有深入研究它。

1 个答案:

答案 0 :(得分:3)

正如@ polm23提到的简单内容,您可以使用POS标记进行提取。您提到的服务如LUISDialog flow等,使用的是所谓的自然语言理解。他们利用意图和实体(详细解释与示例here)。如果您担心自己的数据正在上线,或者有时您必须离线,那么请始终使用RASA

你可以用RASA做的事情:

  • 实体提取和句子分类。通过用各种句子标记单词位置,提及从句子中提取哪个特定术语。因此,如果任何不同的单词出现在您在训练集中给出的内容之外,它将被检测到。
  • 使用基于规则的学习以及keras LSTM进行检测。
  • 与在线服务进行比较时的一个缺点是,您必须手动标记JSON文件中的位置编号以进行培训,而不是在线服务中的点击和标记功能。

您可以找到教程here

Set<String> mySet = new HashSet<>(); mySet.add("Dad"); mySet.add("Mum"); mySet.add("15454"); mySet.add("90000"); mySet.stream() .forEach(x -> System.out.println(x + " : " + x.hashCode())); System.out.println(mySet); 痛苦 I am having

例如,我训练了RASA用各种句子来识别身体部位和症状(我只限于2个实体,你可以添加更多),然后当出现一个未知句子(如上面的那个)时,它会正确识别“”为“症状”,“”为“身体部位”。

希望这能回答你的问题!