我希望将自然语言解析库用于简单的聊天机器人。我可以获得词性标签,但我总是想知道。你怎么用POS做的。如果我知道演讲的部分,那么呢?

我想这会对回复有所帮助。但是我可以使用哪些数据结构和架构。

有帮助吗?

解决方案

词性标注器为输入文本中的单词指定标签。例如,流行的Penn Treebank标签集具有大约40个标签,诸如“复数名词”,“比较形容词”,“过去时动词”等。标记器还解决了一些歧义。例如,许多英语单词形式可以是名词或动词,但在其他词语的上下文中,它们的词性是明确的。 因此,使用POS标签注释您的文本,您可以回答以下问题:我有多少名词?有多少句子不包含动词?等等。

对于聊天机器人,你显然需要更多。你需要找出文本中的主语和对象,以及它们附加的动词(谓词);你需要解决anaphors(个人做指向),否定和量词的范围是什么(例如每个超过3 )等。

理想情况下,您需要将输入文本映射到某些逻辑表示(例如一阶逻辑),这可以让您引入推理来确定两个句子在意义上是否相等,或者在蕴涵关系中等等。

虽然POS-tagger会映射句子

Mary likes no man who owns a cat.

到这样的结构

Mary/NNP likes/VBZ no/DT man/NN who/WP owns/VBZ a/DT cat/NN ./.

你宁愿需要这样的东西:

SubClassOf(
   ObjectIntersectionOf(
      Class(:man)
      ObjectSomeValuesFrom(
         ObjectProperty(:own)
         Class(:cat)
      )
   )
   ObjectComplementOf(
      ObjectSomeValuesFrom(
         ObjectInverseOf(ObjectProperty(:like))
         ObjectOneOf(
            NamedIndividual(:Mary)
         )
      )
   )
)

当然,虽然POS-tagger的精确度和召回率接近100%,但更复杂的自动处理会更糟糕。

一个优秀的NLP Java库是 LingPipe 。但是,它不会超出POS标记,分块和命名实体识别。

其他提示

自然语言处理的范围很广,根源至少可以追溯到60年代。您可以开始阅读计算语言学自然语言生成生成语法马尔可夫链 chatterbots 等等。

维基百科有一个简短的图书馆清单,我想你可能已经看过了。 Java在NLP中没有悠久的传统,尽管我还没有看过斯坦福大学的图书馆。

如果不深入学习语言学和语法,我怀疑你会得到非常令人印象深刻的结果。不是每个人最喜欢的学校科目(或者我听说过 - 爱过我自己!)。

我会跳过很多细节并保持简单。词性标注可帮助您从句子中创建解析树。一旦你有了这个,你就试着尽可能明确地弄清楚意义。此解析步骤的结果将极大地帮助您为chatterbot设置合适的响应。

一旦你有了部分语音标签,你就可以提取所有名词,这样你就可以大致了解某人正在谈论的事物或对象。

举个例子:

有人说“你可以打开一个新窗口。”当你有POS标签时,你知道他们不是在讨论 can (如容器 jar 等,这甚至都有意义在 open )的上下文中,但是 window 。您还会知道 open 是一个动词。

通过这些信息,您的聊天机器人可以生成更好的回复,与开罐器等无关。

注意:您不需要解析器来获取POS标记。一个简单的POS标签就足够了。解析器会为您提供更多信息(例如,主题是什么,句子的对象是什么?)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top