最近,我对语音识别和自然语言处理领域产生了浓厚的兴趣,并且已经开始使用一些不同的方法来构建可以基于自然语言指令执行命令的系统。
到目前为止,在我的研究中,我遇到过各种NLP工具,但是还没有弄清楚如何将它们用于我的目的.C#是我的主要语言,遗憾的是,几乎没有可用的东西。 NLP的dotnet平台。
除了学习曲线之外,常规NLP方法也存在各种问题。语言歧义,命名实体识别,句子边界检测等是增加复杂性的几点。这些问题在自由形式的无约束语言检测和解析中更为突出,但对于有限的域,应该降低复杂性。但是,我无法真正克服这一挑战,因为大多数工具都有大量静态字典数据,或者培训过程太复杂。
另一个主要问题是谈话方法。大多数工具不处理会话历史记录,也无法识别传入指令的上下文。
我希望你们中的一些人能够更早地使用类似的技术,能够帮助我解决这些挑战,并指出我朝着正确的方向发展。
您能否分享使用各种工具的经验,采用的方法,遇到的障碍以及在此过程中如何解决这些障碍。
更新:我还要简要介绍一下我的设想。该系统本质上只是一个理解简单英语的命令执行者。所以,如果我说“向约翰发送电子邮件”,它应该理解我想发送一封电子邮件,现在问我问题,以获得有关主题和内容应该是什么的更多信息。此外,如果我的地址簿中有多个Johns,并且John可能有多个电子邮件地址,系统也应该能够识别它并向我询问进一步的指示。
对于实施,我认为我需要以下组件:
挑战在于使系统可扩展,以便稍后通过稍加修改支持更多此类可操作功能。
我认为我对语音部分和执行部分很好。但痛点是NLP引擎可以正确理解自然语言并为其提供准确的动作和参数。
我玩过POS标记器。它们对复合语句没有多大帮助,建立句子中检测到的各种动词和名词之间的关系变得有点棘手。
另一个问题是维护先前操作的上下文,并将其包含在理解当前语句中。
P.S。:如果您认为合适,请将其转换为维基。请不要因为询问一般性问题而激怒我。
答案 0 :(得分:0)
你无法解开学习,从头开始编码,否则就没有意义。
Lisp可能是自然处理的最佳语言,经典的emacs精神病学家会议就是一个可以用很少的工作完成的例子。它是一种科学家的语言,具有编程功能的风格,整体思维不同于常规的c编程,OOP与此无关。是最古老的仍在使用的语言,它的一个名为Scheme的版本在麻省理工学院的入门课程中。人工智能研究领域的经典之作。
问题是你不能轻易地将它与声音输入设备连接起来,至少是我所知道的大多数免费版本。因此,您可以巧妙地完成纯逻辑和自然语言处理的精彩。但它听不到你的声音。您可以使用一些stdin / stdout,文本文件和数据库包装器来实现独立的声音到文本,反之亦然,但是流量在不均匀的水平上被打破,并且不再是自然的,因为以自然的方式说话环境是由了解环境。
如果我正在与一位来访的朋友谈话,而我启用了人工智能的PC,我会说:“只是rm -rf所有内容”,我的机器如何知道我在说谁,我傻解决方案就是机器只接受直接寻址:“计算机做XYZ”,但如果我对我的朋友说:“在那台电脑rm -rf一切”。上下文只能通过意识存在,而意识需要某种AI。
这不是if / else / then或类层次结构所要解决的问题。当然,在一天结束时,lisp机器用C编码。但是它是一个最小的基础,你可以用它来构建其余的。
因此,对于学习和“实用方法”的混合,您需要扩展一个lisp解释器来添加处理硬件输入/输出方案的函数,并将数据前后转换。这对于thigs的宏伟计划来说是微不足道的,几乎是次要的,但并非没有相当大的努力。
但最重要的问题是lisp计划。你必须找到方法,例如添加语调属性来区分压力或渴望优先顺序或创建新的上下文,还有一个问题,人们常常说疲倦或压力时非感性不合逻辑的东西或使用一些本地成语如“放松”,“抓住你的马”等等。
初学者程序不应立即处理上述示例,但应设计为可扩展的,以便将来能够解决这些问题。
很容易“做到这一点和那个”语音识别和处理顺序,对语境化你需要大量的工作,包括人类问题(语言,心理学,文化等)和编程计算机科学问题。
理想的软件能够使用通用代码来说日语和英语,即使语法和语音完全相互对立。
这也几乎是对哲学的阐述,也可以是无止境的,所以我会在这里停下来。我希望这篇小论文能以某种方式提供帮助。