我正在自动化一个过程,向真实的人询问问题(通过短信但不应该重要)。这些问题有/无答案,但这个人可能会以多种方式作出回应,例如:当然,不是在这个时候,是的,从来没有或以任何其他方式可能。我想尝试解析这个文本并确定它是肯定还是否答(当然它可能并不总是正确的。)
我认为这样做的想法和概念可能已经存在,因为它似乎是AI的常见任务,但不知道它可能被称为什么,所以我无法找到有关如何实现它的信息。所以我的问题是,是否开发了算法来进行这种解析,如果是这样,我在哪里可以找到有关如何实现它们的更多信息?
答案 0 :(得分:1)
这可以被视为binary (yes or no) classification task。您可以编写基于规则的模型来进行分类或基于统计的模型。
基于规则的模型就像if answer in ["never", "not at this time", "nope"] then answer is "no"
。当垃圾邮件过滤器首次出现时,它们包含了很多这样的规则。
基于统计的模型在这里可能更合适,因为编写自己的规则变得令人厌烦,也无法处理新案例。
为此,您需要标记training dataset。经过一些预处理(比如小写所有单词,删除标点符号甚至可能有点干预),你可以得到像
这样的数据集。0 | never in a million years
0 | never
1 | yes sir
1 | yep
1 | yes yes yeah
0 | no way
现在,您可以在此集合上运行Naive Bayes或Logistic回归等分类算法(在您对二进制中的单词进行矢量化之后,这意味着是否存在单词,单词计数,表示术语频率,或tfidf浮点数,这可以防止对较长的答案和常用词的偏见),并了解哪些词更多地属于哪个类。
在上面的示例中,yes
与肯定答案(1)强烈相关,never
与否定答案(0)强烈相关。你可以使用n-gram,因此not no
将被视为一个有利于积极类的单一标记。这被称为词袋方法。
要解决拼写错误,您可以在预处理步骤中添加类似Aspell的拼写检查程序。您也可以使用charvectorizer,因此nno
之类的字词会被解释为nn
和no
,您会收到hellyes
之类的错误,您可以信任您的用户重复拼写错误。如果5个用户对单词neve
进行拼写错误never
,则令牌neve
将自动开始计算负类(如果标记为此类)。
你可以自己编写这些算法(Naive Bayes是可行的,Paul Graham撰写了一些关于如何使用贝叶斯定理对垃圾邮件进行分类的可访问论文,几乎每个ML库都有关于如何执行此操作的教程)或者使用库或类似Scikit-Learn(MultinomialNB,SGDclassifier,LinearSVC等)或Vowpal Wabbit(逻辑回归,分位数损失等)的程序。
答案 1 :(得分:0)
我想到了我的头脑,如果你得到的答案你不知道是的/是,你可以将答案保存在像unknown_answers这样的数据库中,另外2个表格作为affirmative_answers / negative_answers,然后在一个小后端系统,每当你获得一个新的unknown_answer时,你将它们视为是或否,并且系统“学习”它并且随着时间的推移,你将拥有一个非常大且良好的肯定/否定答案数据库。