NLP从入门到实战(一)
NLP自然语言处理技术,我将长期连载NLP技术,分享论文,源码,新科技,以学习为目的,建议大家关注博主,不断更,一起进步~
本文为原理篇,部分来源网络资源,本文目的是综述NLP,让朋友们更清晰地明白!后期会不断实战训练。
自然语言处理NLP概述
自然语言处理(Natural language processing,NLP)是计算机和人类语言之间的关系纽带。更具体地说,自然语言处理是计算机对自然语言的理解、分析、操纵和/或生成。
自然语言处理(NLP)可以被定义为人类语言的自动(或半自动)处理。“NLP”这个术语有时被用于比这更窄的范围,通常不包括信息检索,有时甚至不包括机器翻译。NLP有时还与“计算语言学”相对立,NLP被认为更适用。如今,往往首选使用替代术语,如“语言技术(Language Technology)”或“语言工程(Language Engineering)”。语言(Language)经常与演讲(Speech)(比如演讲技术和语言技术)相对照。但是我将简单地提到NLP并广义地使用这个术语。NLP本质上是多学科的:它与语言学密切相关(尽管NLP公然借鉴语言理论的程度差异很大)。
什么是自然语言处理?
我们平常说地自然语言处理究竟能做些什么呢?NLP是计算机以一种聪明而有用的方式分析,理解和从人类语言中获取意义的一种方式。通过利用NLP,开发者可以组织和构建知识来执行自动摘要,翻译,命名实体识别,关系提取,情感分析,语音识别和话题分割等任务。NLP用于分析文本,使机器了解人的说话方式。这种人机交互使现实世界的应用,如自动文摘,情感分析,主题提取,命名实体识别,零部件,词性标注,关系提取,词干,等等。NLP通常用于文本挖掘,机器翻译和自动问答。
早期的NLP方法涉及更基于规则的方法,在这种方法中,简单的机器学习算法被告知要在文本中查找哪些单词和短语,并在这些短语出现时给出特定的响应。但深度学习是一个更灵活,直观的方法,在这个方法中,算法学会从许多例子中识别说话者的意图,就像孩子如何学习人类语言一样。
常用技术盘点
1.分词 Word Segmentation
chqiwang/convseg ,基于CNN做中文分词,提供数据和代码。(python2.7 )
对应的论文Convolutional Neural Network with Word Embeddings for Chinese Word Segmentation IJCNLP2017.
2.词预测 Word Prediction
Kyubyong/word_prediction ,基于CNN做词预测,提供数据和代码。代码的准确对比的是Iphone7的键盘输入,最新跟新是2019年7月。
- 文本蕴涵 Textual Entailment
Steven-Hewitt/Entailment-with-Tensorflow,基于Tensorflow做文本蕴涵,提供数据和代码。 "Textual entailment with TensorFlow: Using neural networks to explore natural language,"的作者开发,但是代码很久没更新了,文章发表于2017年。
- 语音识别 Automatic Speech Recognition
buriburisuri/speech-to-text-wavenet,基于DeepMind WaveNet和Tensorflow 1.0做句子级语音识别。17年的代码
- 自动摘要 Automatic Summarisation
PKULCWM/PKUSUMSUM,北大万小军老师团队的自动摘要方法汇总,包含了他们大量paper的实现,支持单文档摘要、多文档摘要、topic-focused多文档摘要。
- 文本纠错 Text Correct
atpaino/deep-text-corrector,基于深度学习做文本纠错,提供数据和代码。
7.字音转换 Grapheme to Phoneme
cmusphinx/g2p-seq2seq,基于网红transformer做, 提供数据和代码。
- 复述检测 Paraphrase Detection 和 问答 Question Answering
Paraphrase-Driven Learning for Open Question Answering, 基于复述驱动学习的开放域问答。
- 音汉互译 Pinyin-To-Chinese
Kyubyong/neural_chinese_transliterator,基于CNN做音汉互译。
- 情感分析 Sentiment Analysis
情感分析包括的内容太多了,目前没发现比较全的。推荐两个适合练手的吧:Deeply Moving: Deep Learning for Sentiment Analysis,http://sentic.net/about/。
- 手语识别 Sign Language Recognition
Home - SignAll, 该项目在手语识别做的非常成熟。
- 词性标注(POS)、 命名实体识别(NER)、 句法分析(parser)、 语义角色标注(SRL) 等。
HIT-SCIR/ltp, 语言技术平台(Language Technology Platform,LTP)是哈工大社会计算与信息检索研究中心历时十年开发的一整套中文语言处理系统。LTP制定了基于XML的语言处理结果表示,并在此基础上提供了一整套自底向上的丰富而且高效的中文语言处理模块(包括词法、句法、语义等6项中文处理核心技术),以及基于动态链接库(Dynamic Link Library, DLL)的应用程序接口、可视化工具,并且能够以网络服务(Web Service)的形式进行使用。
官方网站:http://ltp.ai
- 词干 Word Stemming
snowballstem/snowball, C语言版本。
snowballstem/pystemmer,Python版本,代码较新。
还有go 语言实现的,这里不列举了。
- 语言识别 Language Identification
(https://github.com/saffsd/langid.py),语言识别比较好的开源工具。
- 机器翻译 Machine Translation
OpenNMT/OpenNMT-py, 基于PyTorch的神经机器翻译,很适合练手。代码较新,持续有更新。
- 复述生成 Paraphrase Generation
vsuthichai/paraphraser,基于Tensorflow的句子级复述生成,适合练手。
- 关系抽取 Relationship Extraction
ankitp94/relationship-extraction,基于核方法的关系抽取。
- 句子边界消歧 Sentence Boundary Disambiguation
https://github.com/Orekhov/SentenceBreaking,很有意思。
19.事件抽取 Event Extraction
liuhuanyong/ComplexEventExtraction, 中文复合事件抽取,包括条件事件、因果事件、顺承事件、反转事件等事件抽取,并形成事理图谱。
- 词义消歧 Word Sense Disambiguation
alvations/pywsd,代码不多,方法简单,适合练手。
- 命名实体消歧 Named Entity Disambiguation
dice-group/AGDISTIS,实体消歧是很重要的,尤其对于实体融合(比如知识图谱中多源数据融合)、实体链接。
- 幽默检测 Humor Detection
pln-fing-udelar/pghumor 针对西班牙推文做的,一般用不上,不过可以参考学习一下。
- 讽刺检测 Sarcasm Detection
AniSkywalker/SarcasmDetection,基于神经网络的讽刺检测。最新更新是2019年9月份
https://www.aclweb.org/anthology/W16-0425.pdf
- 实体链接 Entity Linking
hasibi/EntityLinkingRetrieval-ELR, 参考的ACM论文Exploiting Entity Linking in Queries for Entity Retrieval,实体链接用途非常广,非常适合练手。
- 指代消歧 Coreference Resolution
huggingface/neuralcoref,基于神经网络的指代消歧。持续有更新维护。
NeuralCoref是spaCy 2.1+的管道扩展,它使用神经网络注释和解析指代消歧。 NeuralCoref已投入生产,已集成到spaCy的NLP管道中,并可扩展到新的培训数据集。
- 关键词/短语抽取和社会标签推荐 Keyphrase Extraction and Social Tag Suggestion
thunlp/THUTag, 用多种方法 实现了多种关键词/短语抽取和社会标签推荐。
以上整理的库和链接并不一定是最经典的和最新的,请在学习和使用时注意区分是否是自己需要学习的库。
NLP常用库介绍
1.spaCy
极其优化的NLP库,可与深度学习框架(如TensorFlow或PyTorch)一起运行。该库提供了大多数标准功能(标记化,PoS标记,解析,命名实体识别…),并且构建快速。spaCy也很好地与所有主要的深度学习框架接口,并预装了一些非常好的和有用的语言模型。下面所有的例子都是用Jupter运行过后的。
2:Natural Language Toolkit / NLTK
NLTK是构建Python程序以使用人类语言数据的领先平台。它为50多种语料库和词汇资源(如WordNet)提供了易于使用的界面,还提供了一套用于分类,标记化,词干化,标记,解析和语义推理的文本处理库,用于工业级NLP库的包装器,和积极的讨论论坛。由于实践指南介绍了编程基础知识以及计算语言学的主题,以及全面的API文档,NLTK适用于语言学家,工程师,学生,教育工作者,研究人员和行业用户等。 NLTK适用于Windows,Mac OS X和Linux。最重要的是,NLTK是一个免费的,开源的,社区驱动的项目。
3:Stanford CoreNLP Python
CoreNLP正在斯坦福大学的自然语言处理小组积极开发.该工具包提供了非常强大,准确和优化的技术,用于标记,解析和分析各种语言的文本。它还支持注释管道,并且易于扩展和访问。总的来说,CoreNLP是NLP工具包之一,已经并且肯定在生产中使用了很多。
4:jieba
结巴中文分词涉及到的算法包括:
(1) 基于Trie树结构实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图(DAG);
(2) 采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合;
(3) 对于未登录词,采用了基于汉字成词能力的HMM模型,使用了Viterbi算法。
结巴中文分词支持的三种分词模式包括:
(1) 精确模式:试图将句子最精确地切开,适合文本分析;
(2) 全模式:把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义问题;
(3) 搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
号称最全的中文词库分析
5:pyltp
哈工大的语料分析库,最近常用,效果还行,安装较难,对环境考验较大
6:paddlehub
百度的paddlehub封装了例如LAC这样的实体命名识别模型,使用起来速度特别快,效果也很棒!
7:foolnltk
可能不是最快的开源中文分词,但很可能是最准的开源中文分词
基于BiLSTM模型训练而成
包含分词,词性标注,实体识别, 都有比较高的准确率
用户自定义词典
可训练自己的模型
批量处理
上面这几个我都比较喜欢的,用起来也很方便,先介绍这么多,后续再分析使用过程以及方法。
欢迎进入深度学习交流群,与深度学习炼丹师一起交流,我们在同一个燃烧的炼丹炉!
上一篇: Nginx的安装与使用
下一篇: Nginx-编译安装与配置使用