我可以使用什么来后期处理从 python 库`spaCy`生成的 NLP 树?

数据挖掘 Python 神经网络 nlp 分类器
2022-03-13 02:06:04

作为聊天机器人的NLPspaCy引擎,我调用nlp("Where are the apples?").print_tree()并接收:

[{'word': 'are',
  'lemma': 'be',
  'NE': '',
  'POS_fine': 'VBP',
  'POS_coarse': 'VERB',
  'arc': 'ROOT',
  'modifiers': [{'word': 'Where',
    'lemma': 'where',
    'NE': '',
    'POS_fine': 'WRB',
    'POS_coarse': 'ADV',
    'arc': 'advmod',
    'modifiers': []},
   {'word': 'apples',
    'lemma': 'apple',
    'NE': '',
    'POS_fine': 'NNS',
    'POS_coarse': 'NOUN',
    'arc': 'nsubj',
    'modifiers': [{'word': 'the',
      'lemma': 'the',
      'NE': '',
      'POS_fine': 'DT',
      'POS_coarse': 'DET',
      'arc': 'det',
      'modifiers': []}]},
   {'word': '?',
    'lemma': '?',
    'NE': '',
    'POS_fine': '.',
    'POS_coarse': 'PUNCT',
    'arc': 'punct',
    'modifiers': []}]}]

where我可以很容易地解析出( advmod, where) 和 ( apple, )的 (arc, lemma) 对nsubj,并调用一个函数where(apple)

然而,这是处理解析树的一种非常幼稚的方式。关于如何处理这棵树的任何建议?我不认为像多级 SVM 这样的东西会起作用。也许是某种神经网络?

1个回答

你想用聊天机器人做什么?你如何解析它取决于最终的用例,不管你信不信,许多人通过简单地收集他们想要的 POS 并使用一些过滤来完成工作。

如果您想尝试维护更多数据并可能进行抽象,那么尝试某种聚类是有意义的,也许使用分层方法,例如(相对较新的)hdbscan。您集群的功能将再次取决于您想要实现的目标。

如果您还没有,请查看spaCy 示例以获得一些灵感!

一旦你有一个带有单词 all 标记的语料库,你可以尝试根据用户输入训练可能能够回答问题的模型。这将涉及诸如创建单词(或整个用户问题)的编码、使用 Word2Vec、GLoVe 等嵌入或简单的稀疏 one-hot 编码等步骤。您基本上需要以某种方式将单词转换为数字输入。

我希望这会给您一些关键字来帮助您进行搜索:-)