在 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 概率感兴趣,则应该查看语言模型。 (显然,您仍然需要先标记文本。)
我在 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 概率感兴趣,则应该查看语言模型。 (显然,您仍然需要先标记文本。)