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

我在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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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