Python 用空格处理语法错误

Python 用空格处理语法错误,python,nlp,spacy,Python,Nlp,Spacy,我正在寻找一些帮助和技巧,以处理建立一个个人助理使用语音输入 我的项目有几个管道,其中一个管道使用python的SpeechRecognizer并将其发送到一个新的管道,该管道解析生成的文本,以便分析请求的操作以及它应该影响的内容 问题是,有时我可以从用户那里得到以下句子: “将音量设置为86%。” 问题是,当我使用en_core\u web\u sm模型时,我发现“Set”不是一个动词,而是一个形容词,但如果我给它一个句子“Set The volume to 86%”,它就会被识别为一个动词。

我正在寻找一些帮助和技巧,以处理建立一个个人助理使用语音输入

我的项目有几个管道,其中一个管道使用python的SpeechRecognizer并将其发送到一个新的管道,该管道解析生成的文本,以便分析请求的操作以及它应该影响的内容

问题是,有时我可以从用户那里得到以下句子:

“将音量设置为86%。”

问题是,当我使用
en_core\u web\u sm
模型时,我发现“Set”不是一个动词,而是一个形容词,但如果我给它一个句子“Set The volume to 86%”,它就会被识别为一个动词。
这种奇怪的行为把我的助手搞得一团糟——你有什么办法来处理吗?

我会尽量简短地回答你的每一个问题,但请记住,其中一些问题还没有完全得到回答

  • 空间模型不是100%。我在巴西葡萄牙语的词性标注方面遇到了一些问题,看来你在英语方面也有问题。我建议你使用其他来源的词性标注,而不是绕过手写模式。一个非常好的模型是:-它可用于多种语言,并且有用于Python的二进制文件。另外,还有一个RESTAPI可用

  • 这涉及到SRL标记。SRL代表语义角色标记,应该处理诸如“代理”、“动作”、“患者”之类的事情。这是一项基于模型的活动。今天,这仍然是一个悬而未决的问题。在某些情况下,您可以获得大约70%的准确率,但这通常是受域限制的,您可能需要自己对模型进行一些调整

  • 这也是一个公开的问题。这是关于回答问题的,它几乎没有“插入这个软件”的解决方案。您可以在计算机语言学家协会最新解决方案中阅读更多关于它和当前解决方案的信息:


  • 这句话在spacy 2.3.x中解析为OK/en core web sm/nd/lg:
    ['VBN','NN','in','CD','NN']

    • 至少词性标记正确地将“set”识别为动词VB*而不是名词NN
    • 好吧,不应该是“设定”的
    代码(注意,我们使用后缀“_sm”/“md”/“lg”表示型号尺寸):

    这里有一个更难的模型压力测试,注意sm,lg模型不同于md;每一个都稍有错误:

    >>> [k.tag_ for k in sy_sm("Set the set of sets to a set result.")]
    ['VB', 'DT', 'NN', 'IN', 'NNS', 'IN', 'DT', 'VBN', 'NN', '.']
      ^^ - okay                                  ^^^ - I think this should be ADJ, it's not really a past participle
    >>> [k.tag_ for k in sy_md("Set the set of sets to a set result.")]
    ['VBN', 'DT', 'NN', 'IN', 'NNS', 'IN', 'DT', 'JJ', 'NN', '.']
      ^^^ - not past tense                        ^^ correct
    >>> [k.tag_ for k in sy_lg("Set the set of sets to a set result.")]
    ['VB', 'DT', 'NN', 'IN', 'NNS', 'IN', 'DT', 'NN', 'NN', '.']
      ^^ - okay                                  ^^ - should be ADJ
    

    我的句子很简单,因此应该更简单。我想我可能没有把问题说清楚——这三点是我程序的一部分,如果“the”跟在后面,我可以很容易地把“Set”这个词当作动词,但如果没有“the”,它就不会把它当作动词。是的,我明白了。您必须记住,这个“标记”过程(查找短语中的每个单词并确定它是否是“动词”等)是基于机器学习模型的。该模型是概率的,并且可以根据用于训练的语料库(标记文本数据集)而变化。spacy使用的模式是“猜测”,根据相邻的单词,“Set”是一个名词,如果没有“thecloseby”,则为动词,否则为动词。这就是为什么会有这种差异,明白吗?我提到了另一个工具,因为它是在不同的语料库上训练的,所以它的“猜测”是不同的。这有什么奇怪的“Set”在上下文中有多种含义,缺少“the”Spacy无法猜测另一个更有用的含义可能是什么。因此,这应该是您在任何NLP任务中必须处理的预期行为(尤其是客户不写类似报纸的消息,这在编写助手程序时必须考虑)。spacy 2.3.x/en-core-web-sm/nd/lg中的这句话解析得很好:
    ['VBN','NN','in','CD','NN]
    。请编辑问题,说明您使用的是什么版本?并使用最新版本重新测试
    >>> [k.tag_ for k in sy_sm("Set the set of sets to a set result.")]
    ['VB', 'DT', 'NN', 'IN', 'NNS', 'IN', 'DT', 'VBN', 'NN', '.']
      ^^ - okay                                  ^^^ - I think this should be ADJ, it's not really a past participle
    >>> [k.tag_ for k in sy_md("Set the set of sets to a set result.")]
    ['VBN', 'DT', 'NN', 'IN', 'NNS', 'IN', 'DT', 'JJ', 'NN', '.']
      ^^^ - not past tense                        ^^ correct
    >>> [k.tag_ for k in sy_lg("Set the set of sets to a set result.")]
    ['VB', 'DT', 'NN', 'IN', 'NNS', 'IN', 'DT', 'NN', 'NN', '.']
      ^^ - okay                                  ^^ - should be ADJ