2017-08-04 10 views
3

这是我第一次发布到Stack Overflow,所以请让我知道在未来提问时我应该更彻底。Java中虚拟助手的查询分类?

目前我正在使用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解析器并寻找特定标签来做到这一点似乎是一项非常困难的任务。有没有人对我可以采取的替代方法有任何建议?

谢谢你!

回答

2

关于虚拟助手或聊天机器人,通常称为意向分类。有很多方法可以做到这一点,但通常您会提供标记示例并训练一个模型来区分它们。这里从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?"}) 

虽然你的训练数据是特定于应用程序,原则上它不是从自动分类电子邮件或新闻报道不同。

用于文本分类的易于使用的基线算法是朴素贝叶斯。更新的方法包括使用移动词的距离或神经网络。

您提取主题的部分也被称为槽检测,助理的“intent and slot”体系结构很常见。即使您想从头开始构建一些东西,查看诸如rasa等chatbot平台的配置屏幕可能对了解如何使用培训数据很有帮助。

+0

谢谢你的一个很好的答案!如果我将POS标签应用于用户输入和训练数据,这是否会增加分类器的整体准确性? – Exo445

+1

POS标签可能有用或不可用,它完全取决于您的方法。尝试在你的数据上使用它们,看看它是否有效! – polm23