精华内容
下载资源
问答
  • 词性标注 (2000) A Statistical Part-of-Speech Tagger Seminal paper demonstrating a powerful HMM-based POS tagger. Many tips and tricks for building such classical systems included. (2003) Feature-...

    词性标注

    展开全文
  • 一、词性标注简介 import nltk text1=nltk.word_tokenize("It is a pleasant day today") print(nltk.pos_tag(text1)) Number Tag Description 1. CC ...

    一、词性标注简介

    import nltk
    text1=nltk.word_tokenize("It is a pleasant day today")
    print(nltk.pos_tag(text1))

    Number

    Tag

    Description

    1. CC Coordinating conjunction
    2. CD Cardinal number
    3. DT Determiner
    4. EX Existential there
    5. FW Foreign word
    6. IN Preposition or subordinating conjunction
    7. JJ Adjective
    8. JJR Adjective, comparative
    9. JJS Adjective, superlative
    10. LS List item marker
    11. MD Modal
    12. NN Noun, singular or mass
    13. NNS Noun, plural
    14. NNP Proper noun, singular
    15. NNPS Proper noun, plural
    16. PDT Predeterminer
    17. POS Possessive ending
    18. PRP Personal pronoun
    19. PRP$ Possessive pronoun
    20. RB Adverb
    21. RBR Adverb, comparative
    22. RBS Adverb, superlative
    23. RP Particle
    24. SYM Symbol
    25. TO to
    26. UH Interjection
    27. VB Verb, base form
    28. VBD Verb, past tense
    29. VBG Verb, gerund or present participle
    30. VBN Verb, past participle
    31. VBP Verb, non-3rd person singular present
    32. VBZ Verb, 3rd person singular present
    33. WDT Wh-determiner
    34. WP Wh-pronoun
    35. WP$ Possessive wh-pronoun
    36. WRB Wh-adverb

    构建(标识符,标记)组成的元组

    import nltk
    taggedword=nltk.tag.str2tuple('bear/NN')
    print(taggedword)
    print(taggedword[0])
    print(taggedword[1])

    import nltk
    sentence='''The/DT sacred/VBN Ganga/NNP flows/VBZ in/IN this/DT region/NN ./. This/DT is/VBZ a/DT pilgrimage/NN ./. People/NNP from/IN all/DT over/IN the/DT country/NN visit/NN this/DT place/NN ./. '''
    print([nltk.tag.str2tuple(t) for t in sentence.split()])

    将元组返回成字符串

    import nltk
    taggedtok = ('bear', 'NN')
    from nltk.tag.util import tuple2str
    print(tuple2str(taggedtok))

    统计标记出现的频率

    import nltk
    from nltk.corpus import treebank
    treebank_tagged = treebank.tagged_words(tagset='universal')
    tag = nltk.FreqDist(tag for (word, tag) in treebank_tagged)
    print(tag.most_common())

    设置默认标记和去除标记

    import nltk
    from nltk.tag import DefaultTagger
    tag = DefaultTagger('NN')
    print(tag.tag(['Beautiful', 'morning']))

    import nltk
    from nltk.tag import untag
    print(untag([('beautiful', 'NN'), ('morning', 'NN')]))

    用NLTK库实现标注任务的方式主要有两种

    1、使用NLTK库或者其他库中的预置标注器,并将其运用到测试数据上(足够英文和不特殊的任务)

    2、基于测试数据来创建或训练适用的标注器,这意味着要处理一个非常特殊的用例

    一个典型的标准器需要大量的训练数据,他主要被用于标注出句子的各个单词,人们已经花了大量力气去标注一些内容,如果需要训练处自己的POS标准器,应该也算的上高手了....我们下面了解一些标注器的性能

    • 顺序标注器 
    • 让我们的标注器的tag都是 ‘NN’ 这样一个标记.....

    import nltk
    from nltk.corpus import brown

    brown_tagged_sents=brown.tagged_sents(categories='news')
    default_tagger=nltk.DefaultTagger('NN')
    print( default_tagger.evaluate(brown_tagged_sents))  #0.13 效率低下说明这样的标注器是个shi...

    • 使用我们前几章说的N-grams的标注器

    我们使用N-gram前面90%作为训练集,训练他的规则,然后拿剩下10%作为测试集,看这样的标注器效果如何

    import nltk
    from nltk.corpus import brown
    from nltk.tag import UnigramTagger
    from nltk.tag import DefaultTagger
    from nltk.tag import BigramTagger
    from nltk.tag import TrigramTagger
    brown_tagged_sents=brown.tagged_sents(categories='news')
    default_tagger=nltk.DefaultTagger('NN')
    train_data=brown_tagged_sents[:int(len(brown_tagged_sents)*0.9)]
    test_data=brown_tagged_sents[int(len(brown_tagged_sents)*0.9):]
    unigram_tagger=UnigramTagger(train_data,backoff=default_tagger)
    print( unigram_tagger.evaluate(test_data) )

    bigram_tagger=BigramTagger(train_data,backoff=unigram_tagger)
    print( bigram_tagger.evaluate(test_data) )

    trigram_tagger=TrigramTagger(train_data,backoff=bigram_tagger)
    print( trigram_tagger.evaluate(test_data) )

    为了更加清楚训练和测试的过程,下面给出下面的代码

    import nltk
    from nltk.corpus import treebank
    from nltk.tag import UnigramTagger
    unitag = UnigramTagger(model={'Vinken': 'NN'})   # 只标记一个tag,让这样一个数据进行训练
    print(unitag.tag(treebank.sents()[0]))

    import nltk
    from nltk.corpus import treebank
    from nltk.tag import UnigramTagger
    training= treebank.tagged_sents()[:7000]
    unitagger=UnigramTagger(training)    #使用数据集训练 
    testing = treebank.tagged_sents()[2000:]
    print(unitagger.evaluate(testing))

    谈谈回退机制backoff的作用

    这是顺序标记的一个主要特征吧,如果这有限的训练集中,你无法得到这次数据的Tag,可以使用下一个标注器来标注这个单词;

    当然还有很多标准器,可以读一下源码......

    import nltk
    from nltk.tag import AffixTagger
    from nltk.corpus import treebank
    testing = treebank.tagged_sents()[2000:]
    training= treebank.tagged_sents()[:7000]
    prefixtag = AffixTagger(training, affix_length=4)   #使用四个前缀...
    print(prefixtag.evaluate(testing))

    import nltk
    from nltk.tag import AffixTagger
    from nltk.corpus import treebank
    testing = treebank.tagged_sents()[2000:]
    training= treebank.tagged_sents()[:7000]
    suffixtag = AffixTagger(training, affix_length=-3)    #使用三个后缀...
    print(suffixtag.evaluate(testing))

    基于机器学习的训练模型...后面再继续学习

     

     

     

     

     

     

    展开全文
  • 转载自: 作者:qq280929090 来源:CSDN 原文:...自然语言处理词性标注简称详解 CC Coordinating conjunction 连接词 CD Cardinal number 基数词 DT Determiner 限定...

    转载自:

    作者:qq280929090
    来源:CSDN
    原文:https://blog.csdn.net/qq280929090/article/details/70162081

    自然语言处理词性标注简称详解

    1.  CC      Coordinating conjunction 连接词
      
    2. CD     Cardinal number  基数词
      
    3. DT     Determiner  限定词(如this,that,these,those,such,不定限定词:no,some,any,each,every,enough,either,neither,all,both,half,several,many,much,(a) few,(a) little,other,another.
      
    4. EX     Existential there 存在句
      
    5. FW     Foreign word 外来词
      
    6. IN     Preposition or subordinating conjunction 介词或从属连词
      
    7. JJ     Adjective 形容词或序数词
      
    8. JJR     Adjective, comparative 形容词比较级
      
    9. JJS     Adjective, superlative 形容词最高级
      
    10. LS     List item marker 列表标示
      
    11. MD     Modal 情态助动词
      
    12. NN     Noun, singular or mass 常用名词 单数形式
      
    13. NNS     Noun, plural  常用名词 复数形式
      
    14. NNP     Proper noun, singular  专有名词,单数形式
      
    15. NNPS     Proper noun, plural  专有名词,复数形式
      
    16. PDT     Predeterminer 前位限定词
      
    17. POS     Possessive ending 所有格结束词
      
    18. PRP     Personal pronoun 人称代词
      
    19. PRP$     Possessive pronoun 所有格代名词
      
    20. RB     Adverb 副词
      
    21. RBR     Adverb, comparative 副词比较级
      
    22. RBS     Adverb, superlative 副词最高级
      
    23. RP     Particle 小品词
      
    24. SYM     Symbol 符号
      
    25. TO     to 作为介词或不定式格式
      
    26. UH     Interjection 感叹词
      
    27. VB     Verb, base form 动词基本形式
      
    28. VBD     Verb, past tense 动词过去式
      
    29. VBG     Verb, gerund or present participle 动名词和现在分词
      
    30. VBN     Verb, past participle 过去分词
      
    31. VBP     Verb, non-3rd person singular present 动词非第三人称单数
      
    32. VBZ     Verb, 3rd person singular present 动词第三人称单数
      
    33. WDT     Wh-determiner 限定词(如关系限定词:whose,which.疑问限定词:what,which,whose.)
      
    34. WP      Wh-pronoun 代词(who whose which)
      
    35. WP$     Possessive wh-pronoun 所有格代词
      
    36. WRB     Wh-adverb   疑问代词(how where when)
      
    展开全文
  • 词性标注即在给定的句子中判定每个单词最合适的词性标记。是自然语言处理的基础。这里用的词性标注模型是ngram模型。

    引言

    词性标注即在给定的句子中判定每个单词最合适的词性标记。是自然语言处理的基础。这里用的词性标注模型是ngram模型。

    词性标注原理

    假设句子S=(w1,w2,w3,,wn)S=(w_1,w_2,w_3,\cdots ,w_n),对应每个词的词性标注序列T=(t1,t2,t3,,tn)T=(t_1,t_2,t_3,\cdots ,t_n)

    我们要求给定句子SS得出词性序列TT的概率p(TS)p(T|S)

    p(TS)=p(ST)p(T)=p(w1w2wnt1t2tn)p(t1t2tn)=i=1np(witi)p(t1)p(t2t1)p(t3t2)p(tntn1) p(T|S) = p(S|T) \cdot p(T) \\ = p(w_1w_2\cdots w_n|t_1t_2\cdots t_n) \cdot p(t_1t_2\cdots t_n) \\ = \prod_{i=1}^n p(w_i|t_i) \cdot p(t_1)p(t_2|t_1)p(t_3|t_2)\cdots p(t_n|t_{n-1})

    其中我们假定p(w1w2wnt1t2tn)p(w_1w_2\cdots w_n|t_1t_2\cdots t_n)是相互独立的,p(T)p(T)用到了bigram模型。

    我们要求出最好的序列T^\hat T

    T^=argmaxp(TS)=argmaxi=1np(witi)p(zi)k=2np(tkzk1)=argmaxlog(i=1np(witi)p(zi)k=2np(tkzk1))=argmaxi=1nlogp(witi)+logp(ti)+k=2np(tktk1) \hat T = \arg \, \max p(T|S) \\ = \arg \, \max \prod_{i=1}^n p(w_i|t_i) \cdot p(z_i) \cdot \prod_{k=2}^n p(t_k|z_{k-1}) \\ = \arg \, \max \log \left( \prod_{i=1}^n p(w_i|t_i) \cdot p(z_i) \cdot \prod_{k=2}^n p(t_k|z_{k-1}) \right) \\ = \arg \, \max \sum_{i=1}^n \log p(w_i|t_i) + \log p(t_i) + \sum_{k=2}^n p(t_k|t_{k-1})

    我们要计算出三个概率:p(witi),p(ti),p(tktk1)p(w_i|t_i),p(t_i),p(t_k|t_{k-1}),分别记为A,π,BA,\pi,B

    我们可以看成有三个参数A,π,BA,\pi,B。当我们求出这个三个参数后,就可以使用维特比算法来求出最大的T^\hat T

    我们先来看下AA,它可以表示为一个矩阵。行是词性数量,列是单词数。
    在这里插入图片描述
    假设上面有一行向量代表动词(vb),表示每个单词是动词的概率。上面这个矩阵我们可以通过语料库计算出来。

    下面来看下π\pi,即p(ti)p(t_i),它表示每个词性出现在句首的概率。显示用一个向量就可以表示,向量的大小就是词性数量。

    在这里插入图片描述

    剩下的BB可以用状态转移矩阵来表示,所谓状态转移,这里指的是一个词性后面接另一个词性。
    BB的大小是N×NN \times N

    在这里插入图片描述
    计算这个BB和计算语言模型的Bigram是一样的。

    Newsweek/NNP
    ,/,
    trying/VBG
    to/TO
    keep/VB
    pace/NN
    with/IN
    rival/JJ
    Time/NNP
    magazine/NN
    

    上面是我们语料库中一句话,左边是单词,右边是词性。

    训练数据下载地址: https://download.csdn.net/download/yjw123456/12776403

    把上面这句话转换成:

    NNP,VBG,TO,VB,NN,IN,JJ,NNP,NN
    

    就可以计算这个词性的Bigram。

    下面就通过我们的语料库来统计下π,A,B\pi,A,B

    代码实现

    在这里插入图片描述
    这里我们认为英文句号"."代表一个句子结束。它后面第一个单词/词性代表句首。

    首先我们用4个字典来保存词性、单词与索引相关信息

    # 词性到索引 以及 索引到词性的字典
    tag2id, id2tag = {},{} 
    # 单词到索引,索引到单词
    word2id,id2word = {}, {}
    
    # 读取训练数据
    for line ine open(./data/traindata.txt):
        items = line.split('/')# 单词/词性
        word, tag = items[0],items[1].strip() #去掉换行符 
        
        if word not in word2id:
            word2id[word] = len(word2id)
            id2word[len(id2word)] = word
        if tag not in tag2id:
            tag2id[tag] = len(tag2id)
            tag2id[len(tag2id)] = tag
            
    M = len(word2id) #单词数量
    N = len(tag2id) #词性数量
    

    下面我们要计算π,A,B\pi,A,B

    import numpy as np
    
    pi =np.zeros(N)#每个词性出现在句首的概率
    A = np.zeros((N,M))#A[i][j]表示 给定词性 i,出现单词j的概率
    B = np.zeros((N,N)) #B[i][j],词性i后面接j的概率
    
    # 构建 π,A,B
    
    pre_tag = ''#前一个词性
    for line in open('./data/traindata.txt'):
        items = line.split('/')
        # 单词索引和词性索引
        wordId,tagId = word2id[items[0]],tag2id[items[1].rstrip()]
        
        A[tagId][wordId] += 1#tag下面 单词出现的次数 加1
    
        if pre_tag == '': #表示句首
            # 需要计算 π
            pi[tagId] += 1 #先统计次数,后面再除以总数
        else: #不是句首
            B[tag2id[pre_tag]][tagId] += 1
        
        pre_tag = items[1].rstrip()
        if items[0] == '.': #表示后面就是句首了,要清空pre_tag
            pre_tag = ''
    
    # 把次数转换为概率
    pi = pi / sum(pi)
    
    for i in range(N):
        A[i] /= sum(A[i])
        B[i] /= sum(B[i])
    

    参数都计算出来了。下面就可以计算给定一句话的词性了。
    在这里插入图片描述
    “Newsweek(NNP) said(VBD) it(PRP) will(MD) introduce(VB) the(DT)”。
    假定我们的句子是这样的,下面我们要求出每个单词的词性。

    我们列出每个单词和每一种词性:
    在这里插入图片描述

    我们要从中找出一个路径,假定上图标出的绿色路径为r1r_1,我们要如何计算这条路径的得分呢。

    用到下面的公式就可以

    T^=argmaxi=1nlogp(witi)+logp(ti)+k=2np(tktk1) \hat T = \arg \, \max \sum_{i=1}^n \log p(w_i|t_i) + \log p(t_i) + \sum_{k=2}^n p(t_k|t_{k-1})

    在这里插入图片描述
    下面我们用动态规划(维特比算法)的方式来求出最好的路径,定义dp[i,j](i,j分别代表列和行)表示到从起点w1w_1到这个矩阵中dp[i,j]位置最短的路径。

    那如何计算dp[i,j]呢,假设它是从词性nnp过来的:

    dp[i,j] = dp[i-1,0] + log p(dt|nnp) + log p(w_i|dt)

    可以这样表示出从每个词性过来的公式,我们最终选择的就是整个式子得分最大的那个。

    好,下面用代码实现上面的过程。

    import numpy as np
    
    def log(v):
        if v == 0:
            return np.log(v + 0.000001)
        return np.log(v)
    
    
    def viterbi(x,pi,A,B):
        '''
        x : 句子
        pi : tag出现在句首的概率
        A: A[i][j]表示 给定词性 i,出现单词j的概率
        B: B[i][j],词性i后面接j的概率
        '''
        # 简单的对应英文进行分词,并转换为词典中的索引
        x =  [word2id[word] for word in x.split(" ")]
        T = len(x) #句子长度
        dp = np.zeros((T,N)) # dp[i][j] 代表w1 到wi,并假设wi的tag是第j个
        # 采用动态规划的方式,由左到右填充dp矩阵,先填充第一列,就是某个词性作为句首的情况,因此用到的是pi
        for j in range(N):
            # j 作为tag的概率 加上 j是tag的情况下,看到单词x[0]的概率(A)
            dp[0][j] = log(pi[j]) + log(A[j][x[0]])
        
        # 记录路径 保存到当前词性的最佳词性
        path = np.array([[0 for x in range(N)] for y in range(T)]) # T x N
        
        
        for i in range(1,T): #从第2个单词开始
            for j in range(N): #遍历每个词性
                # 目前词性为j
                dp[i][j] = -float('inf')
                for k in range(N): #从词性k到达词性j
                    score = dp[i-1][k] + log(B[k][j]) + log(A[j][x[i]])
                    if score > dp[i][j]:
                        dp[i][j] = score
                        path[i][j] = k
                        
        # 把最好的路径打印出来
        best_tag_seq = [0] * T
        # 从后往前求
        # 找出最后一个单词的词性
        best_tag_seq[T-1] = np.argmax(dp[T-1]) #最后一列,值最大的对应的索引
        # 通过从后到前的循环来求出依次每个单词的词性
        for i in range(T-2,-1,-1):
            # 第i个单词最好的词性 保存到了i+1个单词上
            best_tag_seq[i] = path[i+1][best_tag_seq[i+1]]
        
        for i in range(len(best_tag_seq)):
            print(id2tag[best_tag_seq[i]])
            
            
    

    然后我们用训练数据中的一个句子测试一下:

    x = 'Social Security number , passport number and details about the services provided for the payment'
    viterbi(x,pi,A,B)
    

    在这里插入图片描述

    展开全文
  • 文章目录自然语言处理系列二十一词性标注词性标注原理总结 自然语言处理系列二十一 词性标注 词性标注(Part-Of-Speech tagging, POS tagging)也被称为语法标注(grammatical tagging)或词类消疑(word-category ...
  • 自然语言处理词性标注

    千次阅读 2019-08-27 00:17:25
    词性标注作为NLP领域的一项基本任务,其与分词任务同等重要,是很多任务的基础,比如句法分析,命名实体识别等。命名实体识别在一定程度上也属于标注任务,不过,难度相比一般的词性标注而言,上升了不少。对于词性...
  • 词性标注 一、词性标注简介 1、词性 词汇基本的语法属性,通常也称为词类。 2、词性标注 在给定句子中判定每个词的语法范畴,确定其词性并加以标注的过程。 名词:表示人、地点、事物以及其他抽...
  • 文章目录自然语言处理系列二十五词性标注CRF词性标注总结 自然语言处理系列二十五 词性标注 词性标注(Part-Of-Speech tagging, POS tagging)也被称为语法标注(grammatical tagging)或词类消疑(word-category ...
  • 文章目录自然语言处理系列二十三词性标注HMM词性标注总结 自然语言处理系列二十三 词性标注 词性标注(Part-Of-Speech tagging, POS tagging)也被称为语法标注(grammatical tagging)或词类消疑(word-category ...
  • 文章目录自然语言处理系列二十四词性标注感知器词性标注总结 自然语言处理系列二十四 词性标注 词性标注(Part-Of-Speech tagging, POS tagging)也被称为语法标注(grammatical tagging)或词类消疑(word-category...
  • 词性标注知识点 知识点 分别计算tags, words tag2id, id2tag = {},{} word2id, id2word = {},{} for line in open('traindata.txt'): items = line.split('/') word, tag = items[0], items[1].rstrip() ...
  • 词性标注(Part-of-Speech tagging 或POS tagging),又称词类标注或者简称标注,是指为分词结果中的每个单词标注一个正确的词性的程序,也即确定每个词是名词、动词、形容词或其他词性的过程。 代码 名称 ...
  • 自然语言文本处理通常需要进行词性标注,下面是常见标注   ROOT:要处理文本的语句 IP:简单从句 NP:名词短语 VP:动词短语 PU:断句符,通常是句号、问号、感叹号等标点符号 LCP:方位词短语 PP:介词短语 CP:...
  • 自然语言处理3 -- 词性标注

    万次阅读 热门讨论 2018-08-21 14:35:01
    词性标注自然语言处理中也属于基础性的模块,为句法分析、信息抽取等工作打下基础。和分词一样,中文词性标注也存在着很多难点,比如一词多词性,未登录词处理等诸多问题。通过基于字符串匹配的字典查询算法和基于...
  • 今天总结一下自然语言处理基础技术之词性标注,后附现有比较好的开源实现工具(基于python实现包)~~~词性定义百度百科定义:词性指以词的特点作为划分词类的根据。词类是一个语言学术语,是一种语言中词的语法分类,...
  • 1 概述词性标注自然语言处理中也属于基础性的模块,为句法分析、信息抽取等工作打下基础。和分词一样,中文词性标注也存在着很多难点,比如一词多词性,未登录词处理等诸多问题。通过基于字符串匹配的字典查询算法...
  • 文章目录自然语言处理系列二十二词性标注词性介绍总结 自然语言处理系列二十二 词性标注 词性标注(Part-Of-Speech tagging, POS tagging)也被称为语法标注(grammatical tagging)或词类消疑(word-category ...
  • 文章目录词性标注规范前言北大词性标注集宾州词性标注词性标注规范 前言          词性标注在中文领域暂无统一的标注标准,最常见较为...
  • Python与自然语言处理——词性标注与命名实体识别词性标注与命名实体识别(一)词性标注词性标注简介词性标注规范Jieba的词性标注命名实体识别(NER)命名实体识别简介基于随机条件场的命名实体识别 词性标注与命名...
  • codecs模块为我们解决的字符编码的处理提供了lookup方法,它接受一个字符编码名称的参数,并返回指定字符编码对应的 encoder、decoder、StreamReader和StreamWriter的函数对象和类对象的引用。为了简化对lookup方法...
  • 词性标注是对给定句子中的单词进行词性(Parts of Speech,POS)分类的过程。实现标注目的的软件称为词性标注器(tagger)。NLTK支持多种标注器。1.内置的词性标注器创建一个新文件,命名为Exploring.py,输入以下代码:...
  • 声明:转载请注明出处,谢谢:...另外,更多实时更新的个人学习笔记分享,请关注: ...公众号:StudyForAI   今天总结一下自然语言处理词性标注,后附现有比较好的开源实现工具(基于...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,320
精华内容 528
关键字:

自然语言处理词性标注