在自然语言处理中查找文本中的标记概率

我在opennlp的文档页面上发现了这个类TokenizerME(http://opennlp.apache.org/documentation/manual/opennlp.html)。我搞不明白它是如何计算概率的。我用不同的输入测试过,仍然不理解。有人能帮我理解背后的算法吗?我写了这段示例代码

public void tokenizerDemo(){    try {        InputStream modelIn = new FileInputStream("en-token.bin");        TokenizerModel model = new TokenizerModel(modelIn);        Tokenizer tokenizer = new TokenizerME(model);        String tokens[] = tokenizer.tokenize("This is is book");        for(String t:tokens){            System.out.println("Token : "+t);        }        double tokenProbs[] = ((TokenizerME) tokenizer).getTokenProbabilities();        for(double tP : tokenProbs){            System.out.println("Token Prob : "+tP);        }    }    catch (IOException e) {      e.printStackTrace();    }}

我得到了这个输出

Token : This

Token : is

Token : is

Token : book

Token Prob : 1.0

Token Prob : 1.0

Token Prob : 1.0

Token Prob : 1.0

我希望标记“is”被计数两次,并且它的概率应该比其他标记略高。感到困惑。


回答:

标记器的概率与标记器识别标记跨度的自信程度有关:根据标记器模型,这串字符在这个上下文中是否是一个标记。“This”在一个字符串的开头,后面跟着一个空格,对于英语来说是一个非常可能的标记,而“Thi”后面跟着“s”则不是。

这些概率与特定标记内容出现的频率无关,只与这一串字符是否是一个可能的标记有关。字符串“is is is is is is is”对于英语来说很容易标记,因为“is”是一个常见的词,空格是好的标记边界。仅此而已。

如果你对计算n-gram概率感兴趣,你应该查看语言模型。(显然,你仍然需要先对你的文本进行标记。)

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注