java - Java虚拟助手的查询分类?

标签 java android machine-learning nlp stanford-nlp

这是我第一次在 Stack Overflow 上发帖,所以请告诉我以后提问时是否应该更彻底。

目前,我正在使用 Java 开发 Android 虚拟助手应用程序,尽管目前进展顺利,但我不确定如何对用户输入进行分类。到目前为止,我已经实现了 Stanford NLP Parser在程序中,以便可以将子句、短语和单词标签应用于原始文本。这使我能够让程序识别直接问题并从中提取主题,只需搜索特定标签的出现即可。

(ROOT
  (SBARQ <--- Indicates that the sentence is a question
    (WHNP (WP Who))
      (SQ (VBD were)
        (NP (DT the) (FW samurai))) <--- Subject of question
      (. ?)))

虽然这感觉像是向前迈进了一步,但我希望最终能够让助手能够对不同类型的问题(与天气相关的问题、与时间/日期相关的问题等)进行分类,同时也能够识别不符合要求的问题直接但要求相同的信息(例如“你能告诉我关于武士的事吗?”而不是“谁是武士?”)。仅使用 Stanford NLP Parser 并查找特定标签来完成此任务似乎是一项非常困难的任务。有人对我可以采取的替代方法有任何建议吗?

谢谢!

最佳答案

对于虚拟助手或聊天机器人,这通常称为 Intent 分类。有很多方法可以做到这一点,但通常您会提供带标签的示例并训练模型来区分它们。这是来自 a blog post 的一些示例数据关于主题:

# 3 classes of training data
training_data = []
training_data.append({"class":"greeting", "sentence":"how are you?"})
training_data.append({"class":"greeting", "sentence":"how is your day?"})
training_data.append({"class":"greeting", "sentence":"good day"})
training_data.append({"class":"greeting", "sentence":"how is it going today?"})

training_data.append({"class":"goodbye", "sentence":"have a nice day"})
training_data.append({"class":"goodbye", "sentence":"see you later"})
training_data.append({"class":"goodbye", "sentence":"have a nice day"})
training_data.append({"class":"goodbye", "sentence":"talk to you soon"})

training_data.append({"class":"sandwich", "sentence":"make me a sandwich"})
training_data.append({"class":"sandwich", "sentence":"can you make a sandwich?"})
training_data.append({"class":"sandwich", "sentence":"having a sandwich today?"})
training_data.append({"class":"sandwich", "sentence":"what's for lunch?"})

虽然您的训练数据特定于您的应用程序,但原则上它与自动分类电子邮件或新闻文章没有什么不同。

一种易于使用的文本分类基准算法是朴素贝叶斯。最近的方法包括使用Word Mover's Distance 或神经网络。

提取主题的部分也称为插槽检测,助手的“Intent 和插槽”架构很常见。即使您想从头开始构建一些东西,也可以查看聊天机器人平台的配置屏幕,例如 rasa可能有助于了解如何使用训练数据。

关于java - Java虚拟助手的查询分类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45509244/

相关文章:

tensorflow - tf.dataset、多个路径输入以及每批映射以加载图像

java - 在 Eclipse 的包资源管理器中突出显示类文件

java - Eclipse 无缘无故地在捕获的异常处停止

android - 为什么我们不对所有可绘制对象使用 nodpi?

java - 从另一个静态变量构造函数调用静态变量

python - 对短语使用 word2vec

machine-learning - OpenAI Gym 环境 'CartPole-v0' 和 'CartPole-v1' 之间的差异

java - 在Java中不使用Math.cos函数实现cos

java - 添加多个自定义http请求 header 之谜

android - 系统栏隐藏菜单项