Chapter 2. 传统NLP快速回顾

  • Corpora,Tokens and Types
  • Unigrams,Bigrams,Trigrams,Ngramsngtramsngram
  • Lemmas and Stems
  • Categorizing Sentences and Documents
  • Categorizing Words: POS Tagging
  • Categorizing Spans: Chunking and Named Entity Recognition
  • Word Senses and Semantics
  • 总结:


Corpora,Tokens and Types

Corpora:语料库,也成为数据集, 在机器学习术语中,文本及其元数据称为实例或数据点。而语料库就是一组实例,如下图所示

NLP自然语言处理中token是什么意思_分块

Tokens:令牌,将文本分解为令牌的过程称为令牌化(tokenization),比如上一章中‘Time flies like an arrow.’这里面有5个令牌(单词)。令牌化比简单的非字母数字拆分更加复杂,对于像土耳其这样粘合性较高的语言,分割空格课标点符号是不够的。在以后的学习中我们会看到将文本表示为字节流的方式,在某些神经网络模型中完全规避另令牌化问题。

看推文:

NLP自然语言处理中token是什么意思_Parse_02

事实上许多令牌化决策往往是任意的,但是这些决策在实践中对准确度的影响要比工人的大很多,大多数开源码为令牌话提供了合理的支持,下面来自NLTK和SpaCy示例。

import spacy
nlp=spacy.load('en_core_web_sm')  
text = "Mary,don't slap the green witch"
print([str(token) for token in nlp(text.lower())])

NLP自然语言处理中token是什么意思_Parse_03

from nltk.tokenize import TweetTokenizer
tweet=u'Snow White and the Seven Degrees #MakeAMovieCold@midnight:-)'
tokenizer = TweetTokenizer()
print(tokenizer.tokenize(tweet.lower()))

NLP自然语言处理中token是什么意思_Word_04


类型是语料库中唯一的令牌。语料库所有类型的集合就是词汇表,或者词典。此可以分为内容词和停止词。体制此就像是冠词和介词等为了保证句子的完整性而不具有实际意义的词。

Unigrams,Bigrams,Trigrams,Ngramsngtramsngram

ngram是文本中出现固定长度(n)的连续令牌序列,bigram有两个令牌,unigram只有一个令牌,一下是从文本中生成ngram过程,利用Spacy和NITK

def n_gram(text,n):
    rang = range(len(text)-n+1)
    return [text[i:i+n]  for i in range(len(text)-n+1)]
    
                
cleaned = ['mary', ',', "n't", 'slap', 'green', 'witch', '.']
print(n_gram(cleaned,3))

NLP自然语言处理中token是什么意思_Word_05


这个形式常用于子词中常用于有特殊含义,比如methanol”中的后缀“-ol”表示它是一种醇,可以用于对醇类化学物的分类

Lemmas and Stems

lemmas 是词根形式,有时候为了保证向量较低维度,可以用将令牌降为到词根的形式表示,这叫lemmatization,下面是例子:

![nlp = spacy.load('en')
pos = nlp(u'Mary slapped the green witch')
for token in pos:
    print('{}->{}'.format(token,token.pos_))]

NLP自然语言处理中token是什么意思_分块_06


spacy 使用预定义字典WordNet来生成lemma,词干是最普通的lemmatization

Categorizing Sentences and Documents

使用TF或者TF-IDF来进行分类,即对文档或句子进行标记

Categorizing Words: POS Tagging

将对文档分类扩展到对单词的分类,即分类单词的词性,下列示例

nlp = spacy.load('en')
pos = nlp(u'Mary slapped the green witch')
for token in pos:
    print('{}->{}'.format(token,token.pos_))

NLP自然语言处理中token是什么意思_Parse_07

Categorizing Spans: Chunking and Named Entity Recognition

通常情况下,标记文档范围是一个连续的多令牌边界,比如名词短语,动词短语等,这叫做分款(chunk)或者浅解析(Shallow pasing),其目的是推出由名词、动词、形容词等语法原子成分。,下列是示例

nlp = spacy.load('en')
doc = nlp(u'Mary slapped the green witch')
for chunk in doc.noun_chunks:
    print('{}->{}'.format(chunk,chunk.label_))

NLP自然语言处理中token是什么意思_Word_08

另一个分块,是分块命名实体,它可以是字符串,是一些真实世界的概念,如人,位置等

NLP自然语言处理中token是什么意思_python_09

# Structure of Sentences

浅解析识别的是短语单位,而识别她们之间的关系是解析,如图:

NLP自然语言处理中token是什么意思_nlp_10

解析树(Parse tree)表示句子中不同语法单元在层次上的相关另外一更有用的显示关系的方法是使用依赖项解析(dependency parsing)

NLP自然语言处理中token是什么意思_分块_11

Word Senses and Semantics

单词的语义不止一个,WordNet中对单词含义及其他词汇关系进心分类

总结:

对单词预处理,有令牌化,即tokenization;如果单词中携带有用的信息,可以通过ngram来捕获进行分类;如果令牌化维度太高,可以使用lemmatization,来进行降维

对单词、单词短语、短语之间的关系、段落的标记,分别使用pos_、chunk、Parse tree/dependengcy parsing、TF/TF-IDF,其中对单词的标记类似教育学习中表征学习;单词短语即总结单词间的词性,类似于概念学习;短语之间的关系中类似于命题学习。

最后单词的含义不太相同,要放在具体的上下文中进行归纳,这就是自然处理语言中的一个应用
注意:关于 can’t find model ‘en’ 的解决方法:

spacy.load(‘en’) 出现下列错误

NLP自然语言处理中token是什么意思_分块_12


打开vpm和用管理员身份运行cmd使用,输入下列语句,即可解决

python -m spacy download en
python -m spacy download de