【NLP】如何理解n-gram模型

最近在研究NLP的相关知识,然后就遇到了n-gram这个模型。拜读了高老师的博客后,觉得通俗易懂,所以对知识进行了以下整理。

维基百科的定义:在计算语言学中,n-gram指的是文本中连续的n个item(item可以是phoneme, syllable, letter, word或base pairs)

n-gram 中如果n=1则为unigram,n=2则为bigram,n=3则为trigram。n>4后,则直接用数字指称,如4-gram,5-gram。

示例

以 “我将要去美国”这句话为例。bigram结果为:

我将
将要
要去
去美
美国

用python3实现bigram模型

sent="我将要去美国"
bigram=[]
for i in range(len(sent)-1):
   bigram.append(sent[i] + sent[i+1])
print(bigram)

输出结果:['我将', '将要', '要去', '去美', '美国']

示例

还是以 “我将要去美国”这句话为例。trigram结果为:

我将要
将要去
要去美
去美国

用python3实现trigram模型

sent="我将要去美国"
bigram=[]
for i in range(len(sent)-2):
   trigram.append(sent[i] + sent[i+1] + sent[i+2])
print(trigram)

输出结果:['我将要', '将要去', '要去美', '去美国']

是不是感觉很简单呢?那我们继续来实现n-gram模型吧

def nGram(lst,n):
    ngram=[]
    for i in range(len(lst)-n+1):
        ngram.append(lst[i:i+n])
    print(ngram)

调用nGram()即可,sent="我将要去美国",n可以为小于len(lst)的一个数字

参考文献:http://blog.sina.com.cn/s/blog_5f4150730102wkdq.html

猜你喜欢

转载自blog.csdn.net/dylan_me/article/details/80931518
今日推荐