NLP系统,顾名思义,是自然语言处理系统。前面我们已经知道,有许多任务可以使用NLP技术,比如情感分析,对话系统,机器翻译,语音转文字,信息抽取,文本生成等等。现实的应用依赖于数据,然后对这些数据进行分析,分析的任务根据特定的语言又分为词性标注,命名实体识别,词法分析,语法分析。为此,我们需要建立不同的模型,不同模型是想要克服其它模型的弱点而提出的,比如贝叶斯模型为了克服决策树的顺序问题,最大熵模型克服贝叶斯的变量独立问题。在此之后,我们有更多的是为了克服语言的二义性,多义性而提出解决方案。基于统计规则,概率,我们可以获取一些结果。根据针对模型,提出不同的算法,用这模型和算法,去训练人工标注的数据,去应用在未知的数据上。训练集上有正确的数据,而测试集用来测试我们提出的算法的效果。但是并不存在一个通吃的模型,去解决所有不同的任务。即便如此,这并不妨碍NLP系统的构建,概括起来NLP系统通常需要包括的任务有:
- 数据获取(爬虫)
- 数据预处理(清洗,POS,NER)
- 任务提出(机器翻译,情感分析,信息抽取,文本生成,对话机器人)
- 模型提出(CNN/RNN)
- 算法提出(SVM,)
- 针对模型、算法的训练(标准?)
- 数据的可视化呈现(网页?文本?)
内容获取
资源来自互联网,你可以在线尝试试用boilerpipe,它可以自动提取给定网站的文本内容。 还有一些其它的爬虫技术,需要因地制宜,及时补充。
各大网站模拟登陆所需要用到的工具。
lazynlp获取GPT-2所需要的大量文本。
还有找现成的中文语料库,还有大规模中文自然语言处理语料。
还有别人总结的
数据清洗
一般地,我们拿到数据后,在给定任务之前,我们想对数据做的处理有: POS,NER,SBD之类的,
任务 | 解释 |
---|---|
Tokenization | Segmenting text into words, punctuations marks etc. |
Part-of-speech (POS) Tagging | Assigning word types to tokens, like verb or noun. |
Dependency Parsing | Assigning syntactic dependency labels, describing the relations between individual tokens, like subject or object. |
Lemmatization | Assigning the base forms of words. For example, the lemma of “was” is “be”, and the lemma of “rats” is “rat”. |
Sentence Boundary Detection (SBD) | Finding and segmenting individual sentences. |
Named Entity Recognition (NER) | Labelling named “real-world” objects, like persons, companies or locations. |
Similarity | Comparing words, text spans and documents and how similar they are to each other. |
Text Classification | Assigning categories or labels to a whole document, or parts of a document. |
Rule-based Matching | Finding sequences of tokens based on their texts and linguistic annotations, similar to regular expressions. |
Training | Updating and improving a statistical model’s predictions. |
Serialization | Saving objects to files or byte strings. |
而这就是spacCy库提供给我们的。
算法
在线资源尤其重要,但是太多了,重复重复着就感觉会收敛,试着专注某几个小而精的资源,比如这个Practical Machine Learning with Python.这里你甚至可以直接看到代码的实现。
模型
Facebook提供PyText工具,帮助快速建立模型,并且迅速扩展到商业用途。
参考资料: