本文目录
NLP基础知识和综述
一种流行的自然语言处理库、自带语料库、具有分类,分词等很多功能,国外使用者居多,类似中文的jieba处理库
为单词序列分配概率的模型就叫做语言模型。
通俗来说, 语言模型就是这样一个模型:对于任意的词序列,它能够计算出这个序列是一句话的概率。或者说语言模型能预测单词序列的下一个词是什么。
** n-gram Language Models **
N-gram模型是一种典型的统计语言模型(Language Model,LM),统计语言模型是一个基于概率的判别模型.统计语言模型把语言(词的序列)看作一个随机事件,并赋予相应的概率来描述其属于某种语言集合的可能性。给定一个词汇集合 V,对于一个由 V 中的词构成的序列S = ⟨w1, · · · , wT ⟩ ∈ Vn,统计语言模型赋予这个序列一个概率P(S),来衡量S 符合自然语言的语法和语义规则的置信度。用一句简单的话说,统计语言模型就是计算一个句子的概率大小的这种模型。
n-gram模型可以减轻单词序列没有在训练集中出现过而引起的问题,即数据稀疏问题
n-gram模型问题 对于n-gram模型的问题,这两页ppt说的很明白
N-gram模型基于这样一种假设,当前词的出现只与前面N-1个词相关,而与其它任何词都不相关,整句的概率就是各个词出现概率的乘积。这些概率可以通过直接从语料中统计N个词同时出现的次数得到。常用的是二元的Bi-Gram(N=2)和三元的Tri-Gram(N=3).Bi-Gram所满足的假设是马尔科夫假设。
一般常用的N-Gram模型是Bi-Gram和Tri-Gram。分别用公式表示如下:
Bi-Gram: P(T)=p(w1|begin) p(w2|w1) p(w3|w2)***p(wn|wn-1)
Tri-Gram: P(T)=p(w1|begin1,begin2) p(w2|w1,begin1) p(w3|w2w1)***p(wn|wn-1,wn-2)
注意上面概率的计算方法:P(w1|begin)=以w1为开头的所有句子/句子总数;p(w2|w1)=w1,w2同时出现的次数/w1出现的次数。以此类推。
对于其中每项的计算举个例子:
由上可见Bi-Gram计算公式中的begin一般都是加个《s》标签。
N-gram存在的问题:
举一个小数量的例子进行辅助说明:假设我们有一个语料库(注意语料库),如下:
老鼠真讨厌,老鼠真丑,你爱老婆,我讨厌老鼠。
想要预测“我爱老”这一句话的下一个字。我们分别通过 bigram 和 trigram 进行预测。
1)通过 bigram,便是要对 P(w|老)进行计算,经统计,“老鼠”出现了3次,“老婆”出现了1次,通过最大似然估计可以求得P(鼠|老)=0.75,P(婆|老)=0.25, 因此我们通过 bigram 预测出的整句话为: 我爱老鼠。
2)通过 trigram,便是要对便是要对 P(w|爱老)进行计算,经统计,仅“爱老婆”出现了1次,通过最大似然估计可以求得 P(婆|爱 老)=1,因此我们通过trigram 预测出的整句话为: 我爱老婆。显然这种方式预测出的结果更加合理。
问题一:随着 n 的提升,我们拥有了更多的前置信息量,可以更加准确地预测下一个词。但这也带来了一个问题,当N过大时很容易出现这样的状况:某些n-gram从未出现过, 导致很多预测概率结果为0, 这就是稀疏问题。 实际使用中往往仅使用 bigram 或 trigram 。(这个问题可以通过平滑来缓解参考:
stanfordcorenlp 对 myeclipse版本有要求吗
首先,去oracle官网下载java-1.8,下载网址为:java下载,安装完成后。打开Eclipse,选择Window -》 Preferences -》 Java –》 Installed JREs 进行配置:点击窗体右边的“add”,然后添加一个“Standard VM”(应该是标准虚拟机的意思),然后点击“next”;在”JRE HOME”那一行点击右边的“Directory…”找到你java 的安装路径,比如“C:Program Files/Java/jdk1.8”这样你的Eclipse就已经支持jdk-1.8了。
stanford nlp linux怎么使用
通过Maven来使用后面两个dependency是导入model用的,支持的语言包括英语、汉语、法语、西班牙语和德语。默认情况下CoreNLP是支持英语的,其他语言的model需要独立下载。
view plain copy
《dependency》
《groupId》edu.stanford.nlp《/groupId》
《artifactId》stanford-corenlp《/artifactId》
《version》3.6.0《/version》
《/dependency》
《dependency》
《groupId》edu.stanford.nlp《/groupId》
《artifactId》stanford-corenlp《/artifactId》
《version》3.6.0《/version》
《classifier》models《/classifier》
《/dependency》
《!-- 解析中文需要下面这个包 --》
《dependency》
《groupId》edu.stanford.nlp《/groupId》
《artifactId》stanford-corenlp《/artifactId》
《version》3.6.0《/version》
《classifier》models-chinese《/classifier》
《/dependency》
《!-- 使用 Simple CoreNLP API 需要而外下面两个包 --》
《dependency》
《groupId》org.slf4j《/groupId》
《artifactId》slf4j-nop《/artifactId》
《version》1.7.12《/version》
《/dependency》
《dependency》
《groupId》com.google.protobuf《/groupId》
《artifactId》protobuf-java《/artifactId》
《version》3.1.0《/version》
《/dependency》
- 在代码中使用Simple CoreNLP API
- 顾名思义,Simple CoreNLP API是相对于Stanford CoreNLP API比较简单的API操作方式。
import edu.stanford.nlp.simple.*;
public class SimpleCoreNLPDemo {
public static void main(String args) {
// Create a document. No computation is done yet.
Document doc = new Document("add your text here! It can contain multiple sentences.");
for (Sentence sent : doc.sentences()) { // Will iterate over two sentences
// We’re only asking for words -- no need to load any models yet
System.out.println("The second word of the sentence ’" + sent + "’ is " + sent.word(1));
// When we ask for the lemma, it will load and run the part of speech tagger
System.out.println("The third lemma of the sentence ’" + sent + "’ is " + sent.lemma(2));
// When we ask for the parse, it will load and run the parser
System.out.println("The parse of the sentence ’" + sent + "’ is " + sent.parse());
// ...
}
}
}
希望对你有用!
2.简单上手CoreNLP
view plain copy
怎么用scala调用stanford nlp jar包
21个特殊功能寄存器(52系列是26个)不连续地分布在128个字节的SFR存储空间中,地址空间为80H-FFH,在这片SFR空间中,包含有128个位地址空间,地址也是80H-FFH,但只有83个有效位地址,可对11个特殊功能寄存器的某些位作位寻址操作(这里介绍一个技巧:其地址能被8整除的都可以位寻址)。