2017-02-03 16:57:56 Edin_BlackPoint 阅读数 347
  • 60分钟带你掌握NLP BERT理论与实战

    本课程会介绍最近NLP领域取得突破性进展的BERT模型。首先会介绍一些背景知识,包括Word Embedding、RNN/LSTM/GRU、Seq2Seq模型和Attention机制等。然后介绍BERT的基础Transformer模型,这个模型最初用于机器翻译,但是它提出的Self-Attention被用于替换传统的RNN/LSTM/GRU模型。再然后是介绍BERT出现之前的Universal Sentence Embedding模型,包括ELMo和OpenAI GPT。接着介绍BERT模型是什么,它解决了之前模型的哪些问题从而可以达到这么好的效果。代码分析和案例介绍,通过解决实际问题加深理解

    4261 人正在学习 去看看 CSDN讲师

利用Ansj进行新闻关键词提取 中提到了几个用于NLP处理的工具,这里进行一些检索和了解:

FudanNLP

简介

复旦自然语言处理(简称FNLP),是上海复旦大学计算机学院邱锡鹏教授(微博:@邱锡鹏)带领的团队研发出的一套基于机器学习的中文自然语言文本处理的开发工具包,该工具包包含了为实现这些任务的机器学习算法和数据集。CSDN在14年的时候有过相关报道复旦邱锡鹏教授:云时代,NLP也将是一种基础服务

链接

FNLP
Penn Treebank

ictalas

ANSJ

Ansj 是一个开源的 Java 中文分词工具,基于中科院的 ictclas 中文分词算法,比其他常用的开源分词工具(如mmseg4j)的分词准确率更高。

英文官网: ANSJ
中文官网: NLPCN
Github地址: git@github.com:NLPchina/ansj_seg.git
相关采访: 开源 Java 中文分词器 Ansj 作者孙健专访

OpenNLP

开源的语料库

WordNet

NLP界有哪些神级人物?

首先想到的不应该是Michael Collins吗……
Michael Collins (Columbia), Jason Eisner (JHU), David Yarowsky (JHU)三位师兄弟(David > Michael > Jason)均师承于Upenn的Mitchell Marcus教授,也就是著名的Penn Treebank的作者。这三位是NLP界公认的大神,研究领域各有侧重。collins/eisner对NLP结构学习领域贡献极大,yarowsky早年研究词义消歧,是著名的yarowsky algorithm的作者,后来做了很多跨语言学习的开创性工作。
Michael Collins的学生中著名的有Terry Koo (Google), Percy Liang (Stanford), Luke Zettlemoyer (UW);Jason Eisner的得意弟子当首推Noah Smith (CMU->UW);David Yarowsky似乎没有什么特别杰出的学生。
Stanford NLP掌门Chris Manning,以《统计自然语言处理基础》一书以及Stanford NLP (toolkit) 而闻名。Dan Jurafsky,著有《语音与语言处理》一书,具有深厚的语言学背景。稍微提一下Manning的学生Richard Socher,近几年声名鹊起,在dl4nlp领域风头一时无两,属年轻一代翘楚。
UCBerkeley的Dan Klein,早些年在无指导学习领域建树颇多。Percy Liang也是他的学生。
UIUC的Dan Roth,Chengxiang Zhai (偏IR);MIT的Regina Barzilay;哦,当然还有Brown大学的Eugene Charniak大神(Charniak parser),Brown大学也可算是没落的贵族了,和UPenn有点儿相似。
欧洲方面,Joakim Nivre (Uppsala University),代表工作是基于转移的依存句法分析。Philipp Koehn,著名机器翻译开源系统Moses作者,14年加入JHU。
当然,在工业界也是NLP群星璀璨。Google有Fernando Pereira坐镇,此外还有Ryan McDonald,Slav Petrov等句法分析领域绕不开的名字;而最近Michael Collins也加入了Google;IBM则有Kenneth Church;提一嘴Tomas Mikolov (Facebook)吧,word2vec作者,虽然他严格意义上并不属于NLP核心圈子,但是不得不说,近两年acl/emnlp近半数文章都给他贡献了citation,能做到这种程度的人极少。
以上我提到的人都是对NLP领域有重要基础性贡献并经过时间考验的(citation超过或者接近1W),除了以上提到的,还有很多非常优秀的学者,比如Kevin Knight,Daniel Marcu, Mark Johnson,Eduard Hovy,Chris Callison-Burch,年轻一代的David Chiang,Hal Daume III等。
暂时想到的就这些人,水平有限,抛砖引玉。相对而言,虽然华人学者近几年在ACL/EMNLP等顶级会议上占据越来越重要的地位,但是对NLP领域具有重要基础性贡献的学者相对还是很少的。
希望能帮到你,求采纳。

2017-12-04 21:27:44 kjcsdnblog 阅读数 1127
  • 60分钟带你掌握NLP BERT理论与实战

    本课程会介绍最近NLP领域取得突破性进展的BERT模型。首先会介绍一些背景知识,包括Word Embedding、RNN/LSTM/GRU、Seq2Seq模型和Attention机制等。然后介绍BERT的基础Transformer模型,这个模型最初用于机器翻译,但是它提出的Self-Attention被用于替换传统的RNN/LSTM/GRU模型。再然后是介绍BERT出现之前的Universal Sentence Embedding模型,包括ELMo和OpenAI GPT。接着介绍BERT模型是什么,它解决了之前模型的哪些问题从而可以达到这么好的效果。代码分析和案例介绍,通过解决实际问题加深理解

    4261 人正在学习 去看看 CSDN讲师

原文链接

看论文时涉及到的一些知识图谱相关的研究人员、工具、数据集等,顺手整理出来,持续更新中~

Researchers List

Conference

Data Set

SemEval 2010 Task8

NYT10

FreeBase (a large semantic database of several thousand relations)

wordnet

NNDB (biographical information), MusicBrainz (music), the SEC (financial and corporate data)

Tools

stanford nlp 工具集合

MINIPAR 依存树分析工具

数据集
2006-11-17 20:34:00 longronglin 阅读数 961
  • 60分钟带你掌握NLP BERT理论与实战

    本课程会介绍最近NLP领域取得突破性进展的BERT模型。首先会介绍一些背景知识,包括Word Embedding、RNN/LSTM/GRU、Seq2Seq模型和Attention机制等。然后介绍BERT的基础Transformer模型,这个模型最初用于机器翻译,但是它提出的Self-Attention被用于替换传统的RNN/LSTM/GRU模型。再然后是介绍BERT出现之前的Universal Sentence Embedding模型,包括ELMo和OpenAI GPT。接着介绍BERT模型是什么,它解决了之前模型的哪些问题从而可以达到这么好的效果。代码分析和案例介绍,通过解决实际问题加深理解

    4261 人正在学习 去看看 CSDN讲师
2019-08-24 16:55:24 weixin_43125502 阅读数 310
  • 60分钟带你掌握NLP BERT理论与实战

    本课程会介绍最近NLP领域取得突破性进展的BERT模型。首先会介绍一些背景知识,包括Word Embedding、RNN/LSTM/GRU、Seq2Seq模型和Attention机制等。然后介绍BERT的基础Transformer模型,这个模型最初用于机器翻译,但是它提出的Self-Attention被用于替换传统的RNN/LSTM/GRU模型。再然后是介绍BERT出现之前的Universal Sentence Embedding模型,包括ELMo和OpenAI GPT。接着介绍BERT模型是什么,它解决了之前模型的哪些问题从而可以达到这么好的效果。代码分析和案例介绍,通过解决实际问题加深理解

    4261 人正在学习 去看看 CSDN讲师

NLP小白入门,在实现复旦NLP组的新生入门任务,在此做一个记录。
废话不多说,直接上代码。注释掉的部分是没有用到批处理时的代码,可忽略。
https://github.com/Lucius888/nlp-beginner

1.数据处理

数据是来源于国外网站的电影评论,数据集kaggle上都有,导入进来之后。对每条评论进行分词,标准化处理(虽然数据集好像已经是被清洗好了的)。处理好了之后使用词袋模型(BOW)形成词袋,然后对数据进行one-hot。这是数据处理的流程。
细节一:分词常用的俩个函数:CountVectorizer,TfidfVectorizer
CountVectorizer: 只考虑词汇在文本中出现的频率
TfidfVectorizer: 除了考量某词汇在文本出现的频率,还关注包含这个词汇的所有文本的数量
能够削减高频没有意义的词汇出现带来的影响, 挖掘更有意义的特征

CountVectorizer(input='content', encoding='utf-8',  decode_error='strict', strip_accents=None, lowercase=True, preprocessor=None, tokenizer=None, stop_words=None, 
token_pattern='(?u)\b\w\w+\b', ngram_range=(1, 1), analyzer='word', max_df=1.0, min_df=1, max_features=None, vocabulary=None, binary=False, dtype=<class 'numpy.int64'>)

上面给出了所有的参数,两个函数的参数好像是一样的。其中只讲我觉得最常用的三四个,当然还有设置一些平滑什么的,有兴趣可以继续研究:

stop_words=None#选择是否使用停用词,啥是停用词?自行谷歌
ngram_range=(1, 1)#选择使用的Ngram模型,默认unigram
 max_df=int/float #取值为int时,代表该词如果出现的次数超过int值(when float:或者超过百分之多少)时,那么这个词就不会被当作关键词
 min_df=int/float #取值为int时,代表该词如果出现的次数少于int值(when float:或者低于百分之多少)时,那么这个词就不会被当作关键词

除了其分词作用,其还有其他几个属性将作用,在此拿CountVectorizer为例:

属性表 作用
vocabulary_ 词汇表;字典型
get_feature_names() 所有文本的词汇;列表型
stop_words_ 返回停用词表
方法表 作用
fit_transform(X) 词汇表;字典型
fit(raw_documents[, y]) Learn a vocabulary dictionary of all tokens in the raw documents.
fit_transform(raw_documents[, y]) Learn the vocabulary dictionary and return term-document matrix.

最常用的就是我在代码中的部分:

#实例化,并设置参数
Vectorizer = CountVectorizer(max_df=0.95, min_df=5,stop_words='english')#去除停用词效果确实好了一点点
# (a,b),( 单词所在得句子,单词所在词袋中得位置)出现的次数
train_CountVectorizer = Vectorizer.fit_transform(train['Phrase'])
#形成词袋,注意是字典
train_bag = Vectorizer.vocabulary_
#转换为one-hot,注意我用的是线性分类,之后RNN/CNN都是索引位置
#其实我觉得索引就是NNLM,但是我还没试过,有待实验
train_one_hot = train_CountVectorizer.toarray()

2.形成数据集

 一般训练集:验证集:测试集=7:2:1
 设置划分的比例进行切割就可以了。注:我在代码里面没有设置验证集。

# 划分数据集
split_idx0 = int(len(train) * 0.2)
split_idx1 = int(len(train) * 0.3)
train_x, test_x = train_one_hot[:split_idx0], train_one_hot[split_idx0:split_idx1]
train_y, test_y = labels[:split_idx0], labels[split_idx0:split_idx1]  # 此时还不是tensor

 然后使用TensorDataset/DataLoader这一对函数了,具体用法在此不做解释。

# create Tensor datasets
train_data = TensorDataset(torch.FloatTensor(train_x), torch.LongTensor(train_y))  # 构建数据,(数据,标签)
test_data = TensorDataset(torch.FloatTensor(test_x), torch.LongTensor(test_y))
# dataloaders
batch_size = 64
# make sure the SHUFFLE your training data
train_loader = DataLoader(train_data, shuffle=True, batch_size=batch_size)
test_loader = DataLoader(test_data, shuffle=True, batch_size=batch_size)

3.搭建网络

随便使用的线性模型大了一个三层网络。在此还有几点想留在这里
在这里插入图片描述
如果要GPU训练不要忘记把模型移到GPU
设置网络参数,输出是五种类型,注意标签不是onehot

# %%
# 构建模型
class Linear_Classfy(nn.Module):  # inheriting from nn.Module!

    def __init__(self):
        super(Linear_Classfy, self).__init__()
        self.linear0 = nn.Linear(len(train_bag), 256)
        self.linear1 = nn.Linear(256, 128)
        self.linear2 = nn.Linear(128, 5)

    def forward(self, x):
        x = self.linear0(x)
        x = self.linear1(x)
        out = self.linear2(x)
        # out = F.softmax(x)#交叉熵损失函数自带sofmax
        return out


model = Linear_Classfy()  # vocab_size, num_labels
model.cuda()
print(model)
loss_function = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.2)

4.开始训练,测试

  1. 训练数据要移动到GPU
  2. 注意数据类型,一般程序保存请先检查数据类型是否符合要求
  3. 要注意显示训练情况,很惭愧我并没有很好的展示出来,要改进
# %%
for epoch in range(1):
    for inputs, labels in train_loader:
        x = inputs.cuda()
        target = labels.cuda()
        out = model(x)
        loss = loss_function(out, target)  # must be (1. nn output, 2. target), the target label is NOT one-hotted
        optimizer.zero_grad()  # clear gradients for next train
        loss.backward()  # backpropagation, compute gradients
        optimizer.step() 

模型训练好了之后可以进行保存,调用,测试。

# 保存和加载整个模型
torch.save(model_object, 'model.pkl')
model = torch.load('model.pkl')

# 仅保存和加载模型参数(推荐使用)
torch.save(model_object.state_dict(), 'params.pkl')
model_object.load_state_dict(torch.load('params.pkl'))

最后就是进行测试了,在测试的时候还碰到了很多小细节,感觉自己的python基本功不行,要继续努力啊!

最后

 accuracy:  0.49769319492502884
2012-06-03 01:13:37 robinliu2010 阅读数 5851
  • 60分钟带你掌握NLP BERT理论与实战

    本课程会介绍最近NLP领域取得突破性进展的BERT模型。首先会介绍一些背景知识,包括Word Embedding、RNN/LSTM/GRU、Seq2Seq模型和Attention机制等。然后介绍BERT的基础Transformer模型,这个模型最初用于机器翻译,但是它提出的Self-Attention被用于替换传统的RNN/LSTM/GRU模型。再然后是介绍BERT出现之前的Universal Sentence Embedding模型,包括ELMo和OpenAI GPT。接着介绍BERT模型是什么,它解决了之前模型的哪些问题从而可以达到这么好的效果。代码分析和案例介绍,通过解决实际问题加深理解

    4261 人正在学习 去看看 CSDN讲师

http://www.oschina.net/p/fudannlp

 

FudanNLP主要是为中文自然语言处理而开发的工具包,也包含为实现这些任务的机器学习算法和数据集。

演示地址: http://jkx.fudan.edu.cn/nlp/query

FudanNLP目前实现的内容如下:

  1. 中文处理工具  
    1. 中文分词
    2. 词性标注
    3. 实体名识别
    4. 句法分析
    5. 时间表达式识别
  2. 信息检索  
    1. 文 本分类
    2. 新闻聚类
    3. Lucene中文分词
  3. 机 器学习  
    1. Average Perceptron
    2. Passive-aggressive Algorithm
    3. K-means
    4. Exact Inference

 

复旦NLP-文本分类

阅读数 367

没有更多推荐了,返回首页