问我问题之前,这是情况:
我对人工智能有一些非常基础的知识,我对推理引擎(使用LISP或Prolog进行编码,也对神经网络有一点了解,但不多。那就是我学的。
我有一个项目,一个必须纠正一些自定义句子的应用程序。
那些句子是普通的字符串,可以包含许多不同的字符。幸运的是,多亏了Flex(lexer),我定义了令牌,现在更易于分析。字符串的示例:
AZERTY AWESOME 333.222 AZERTY MAGIC P
哪个给出令牌(示例):
VERB NOUN NUMBER VERB ADJECTIVE SPEC
我也使用Bison允许一些连击,而拒绝其他连击:
VERB NOUN NUMBER VERB ADJECTIVE SPEC is ok
VERB VERB NOUN NUMBER ADJECTIVE SPEC is not ok
etc...
这些句子在进入我的应用程序时可能会有一些错误。这些错误可能来自不同的来源,让我们举一些例子:
AZERTY AWESOM E 333.222 AZERTY MAGIC POINT
令人敬畏的单词中的附加空格使解析器能够识别VERB和SPEC而不是名词(如上所述)。因此,纠正方法是删除附加空间。
其他错误可能是缺少空格(使两个单词成为棍子),未知标记,未知组合(针对野牛),根本没有空格,等等...
因此,我开始使用确定性方法开始用C ++创建应用程序:我创建了一种字典,其中包含我之前发现的每种错误模式,并为它们创建了更正。它工作得很好,我可以纠正很多问题,因为我发现了非常通用的模式。但是我想通过添加机器学习功能来更正此性能,以更正其他功能。
我可以说我的“固定校正”校正的好率为70%,我希望通过机器学习来使这一校正长大。它会从错误和更正的句子中学习,然后能够自行纠正我无法纠正的句子(最后30%)。
这是我的问题,即使我已经学习过一点AI,但我不知道从哪里开始,我还是机器学习的新手。
我的第一个问题是:我了解神经网络,但是它是用来猜测的,对吧?例如,我给它一个句子,它就能告诉我它是否正确。但这不是我想要的,我希望应用程序对其进行纠正,而不仅仅是告诉它是否正确。问题是我真的看不到应用程序如何单独“删除/修改”。
您建议我朝哪个方向去?您会针对这种应用建议哪些机器学习原理/工具/技术?
希望您能很好地理解我的问题,并且能够为我提供帮助。
[N-gram是UNIGRAM(一个单词),或者BIGRAM(一对单词)或TRIGRAM(三个单词),等等...等等。
主要思想是使用格式良好的字符串为我的应用程序提供大量训练数据。对于它们中的每一个,我将计算n元语法(从uni到tri)。
然后我将得到类似的信息(在为应用提供了数千个数据之后:
字母组合表(数字是假的和随机的)
word | occurrence | prob
________________________________________
I | 500 | 0.2
want | 645 | 0.2
a | 2434 | 0.5
cat | 20 | 0.1
图表表
first word | second word | occurrence | prob
___________________________________________________________
| I | want | 600 | 0.5
| want | a | 500 | 0.4
| a | cat | 100 | 0.1
与三字组表相同。
因此,当我有了这些数据时,分析起来就容易些,让我们举个例子:
I WANTA CAT
[进行分析时,应用程序将首先看到表中不存在WANTA,因此它将拆分该单词,直到获得很有可能发生的“句子”。
因此,当拆分为“ WANT”和“ A”时,应用程序将看到“ WANT”发生的可能性很高,与“ A”相同,然后他将检查bigram兼容性,这也是很好的。甚至连带有“ I”和“ CAT”的三字母组合也可以提高精度。我想这是一个很好的解决方案,不需要很多时间,我希望这会很有效率。
我希望我能说清楚,并帮助那些想知道相同问题的人。