在 nlp 的文本中查找标记概率

finding token probabilies in a text in nlp

我在 opennlp 文档页面 (http://opennlp.apache.org/documentation/manual/opennlp.html) 中遇到了这个 class TokenizerME。我不知道它是如何计算概率的。我用不同的输入对其进行了测试,但仍然不理解。有人可以帮我理解它背后的算法吗? 我写了这个示例代码

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();
    }
}

我得到了这个输出

令牌:这个

令牌:是

令牌:是

令牌:书本

令牌概率:1.0

令牌概率:1.0

令牌概率:1.0

令牌概率:1.0

我希望令牌"is"被计算两次,它的概率应该比其他令牌略高。困惑。

标记生成器概率与标记生成器识别标记跨度本身的信心有关:根据标记生成器模型,此上下文中的此字符串是否是标记。字符串开头的 "This" 后面跟着 space 很可能是英语标记,而 "Thi" 后面跟着 "s" 就不是。

概率与特定标记内容被看到的频率无关,仅与此字符序列是否是可能的标记有关。字符串 "is is is is is is is" 很容易标记为英语,因为 "is" 是一个常用词,而 spaces 是很好的标记边界。就是这样。

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