塞进裤子ヾ(≧O≦)〃嗷~

0%

NLP基础

NLP基础

语言模型:Unigrams, Bigrams…N-grams

https://sbaban.com/nlp20190223.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import spacy
nlp = spacy.load("en_core_web_sm")
text = "Mary, don’t slap the green witch"
tokenlist=[]#存储tokens
for token in nlp(text.lower()): #使用spacy进行分词
tokenlist.append(str(token))
print(tokenlist)
-----
['mary', ',', 'do', 'n’t', 'slap', 'the', 'green', 'witch']

def n_grams(text, n):#分会n-grams
return [text[i:i+n] for i in range(len(text)-n+1)]
print(n_grams(tokenlist,3))
-----
[['mary', ',', 'do'], [',', 'do', 'n’t'], ['do', 'n’t', 'slap'], ['n’t', 'slap', 'the'], ['slap', 'the', 'green'], ['the', 'green', 'witch']]

Lemmatization和Stems

词性还原

1
2
3
4
5
6
7
8
9
nlp = spacy.load("en_core_web_sm")
doc = nlp(u"he was running late")
for token in doc:
print('{} -->{}'.format(token,token.lemma_))
-----
he -->-PRON-
was -->be
running -->run
late -->late

Pos Tagging

词性标注

1
2
3
4
5
6
7
8
9
nlp = spacy.load("en_core_web_sm")
doc = nlp(u"he was running late")
for token in doc:
print('{} -->{}'.format(token,token.pos_))
-----
he -->PRON
was -->VERB
running -->VERB
late -->ADV

chunking | shallow parsing

比如有句子“Mary slapped the green witch.”

我们希望识别名词短语(noun phrases NP)和动词短语(verb phrases VP):

1
[NP Mary][VP slapped] [the green witch].

这称为chunking或shallow parsing, shallow parsing旨在导出由名词、动词、形容词等语法原子组成的高阶单元

1
2
3
4
5
6
7
nlp = spacy.load("en_core_web_sm")
doc = nlp(u"Mary slapped the green witch.")
for chunk in doc.noun_chunks:
print('{} -->{}'.format(chunk,chunk.label_))
-----
Mary -->NP
the green witch -->NP

word senses:一个单词的不同意思叫做它的~

Word Embedding

one hot

设有以下两句话

Time flies like an arrow.

Fruit flies like a banana.

vocabulary of size 8: {time, fruit, flies, like, a, an, arrow, banana}

其one-hot表示法为

mark

如果表示“like a banana” 需要3*8的矩阵。

如果用binary encoding ** 或 **collapsed one hot表示“like a banana”:

[0, 0, 0, 1, 1, 0, 0, 1]

0和1表示这个单词是否出现。

缺点:

①sparse②忽略了单词在句中的顺序

BOW

词袋模型能够把一个句子转化为向量表示,是比较简单直白的一种方法,它不考虑句子中单词的顺序,只考虑词表(vocabulary)中单词在这个句子中的出现次数。
举个例子:

“John likes to watch movies, Mary likes movies too”
“John also likes to watch football games”

对于这两个句子,我们要用词袋模型把它转化为向量表示,这两个句子形成的词表(不去停用词)为:
[‘also’, ‘football’, ‘games’, ‘john’, ‘likes’, ‘mary’, ‘movies’, ‘to’, ‘too’, ‘watch’]

因此,它们的向量表示为:

TF-IDF

假设有1000份文档,文档a中总单词数(包括重复单词)为100,其中“中国”出现20次。

TF

$TF(word,doc)$表示单词word在doc中出现的频率。

中国在文档a的TF为20/100=0.2

IDF

$IDF(w)=log \frac{N}{n_w}$

$n_w$是包含单词$w$的文章数目,$N$是所有文章的数目。

IDF刻画的是某些出现次数少的词重要性比较大。

为了避免分母为0,可以分母加1

TF-IDF=TF(w)*IDF(w)

注意,某些常见的词出现在所有文章里($n_w=N$),使得IDF=0 => TF-idf=0;

某些罕见的词只出现在一个文档里($n_w=1$),使得IDF=logN => TF-idf很大。

Embedding

分布式假说:

那些在相似语句中出现的单词,在语义上也是相互关联的。

distributional representation

  • Distributed:分布式描述的是若干元素的连续表示形式,如稠密的词嵌入向量表示,与之相反的是独热向量。
  • Distributional:使用词语的上下文来表示其语义,Word2vec和基于计数的词向量表示都是分布表示,因为我们都使用词语的上下文来表征它的含义

优势

①容易计算

#N-gram model

在n-gram模型中,给定一个单词序列向量w,要计算:

$$P(w_i|w_{i-1},w_{i-2},…,w_{i-n+1}$$

S2S model

alignment

The mapping between the output and the input is called an alignment

mark

sequence classification
mark

sequence labeling
mark

if help:小手一抖点个广告 or 大手一挥资助一下