【问题标题】:Query classification for Virtual Assistant in Java?Java中虚拟助手的查询分类?
【发布时间】:2018-01-12 12:52:32
【问题描述】:

这是我第一次在 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
      (. ?)))

虽然这感觉像是向前迈进了一步,但我希望最终让助手能够对不同类型的问题(与天气相关的问题、与时间/日期相关的问题等)进行分类,同时还能识别出不属于直接但要求相同的信息(例如“你能告诉我有关武士的事吗?”而不是“谁是武士?”)。仅通过使用斯坦福 NLP 解析器并查找某些标签来做到这一点似乎是一项非常困难的任务。有人对我可以采取的替代方法有什么建议吗?

谢谢!

【问题讨论】:

    标签: java android machine-learning nlp stanford-nlp


    【解决方案1】:

    对于虚拟助手或聊天机器人,这通常称为意图分类。有很多方法可以做到这一点,但通常您提供标记示例并训练模型以区分它们。以下是来自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 的距离 或神经网络。

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

    【讨论】:

    • 感谢您的精彩回答!如果我将 POS 标签应用于用户输入和训练数据,这是否会潜在地提高分类器的整体准确性?
    • POS 标签可能有用也可能没用,这完全取决于您的方法。尝试在您的数据上使用它们,看看它是否有效!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多