前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在 NLP 中训练 Unigram 标记器

在 NLP 中训练 Unigram 标记器

作者头像
很酷的站长
发布2023-08-11 15:46:35
2710
发布2023-08-11 15:46:35
举报
文章被收录于专栏:站长的编程笔记

介绍

单个标记称为 unigram。Unigram 标记器是一种只需要一个单词来推断单词的词性标记器类型。它有一个单词的上下文。NLTK库为我们提供了UnigramTagger,并从NgramTagger继承而来。

在本文中,让我们了解 Unigram Tagger 在 NLP 中的训练过程。

Unigram Tagger及其使用NLTK的培训

加工

  • UnigramTagger继承自ContextTagger。实现了 context() 方法。上下文方法具有与 choose_tag() 相同的参数
  • 从 context() 方法中,将使用单词标记来创建模型。这个词用于寻找最好的标签。
  • UnigramTagger将创建一个带有上下文的模型。

蟒蛇实现

代码语言:javascript
复制
import nltk nltk.download('treebank') from nltk.tag import UnigramTagger from nltk.corpus import treebank as tb sentences_trained = treebank.tagged_sents()[:4000] uni_tagger = UnigramTagger(sentences_trained) print("Sample Sentence : ",tb.sents()[1]) print("Tag sample sentence : ", uni_tagger.tag(tb.sents()[1]))

输出

代码语言:javascript
复制
Sample Sentence :  ['Mr.', 'Vinken', 'is', 'chairman', 'of', 'Elsevier', 'N.V.', ',', 'the', 'Dutch', 'publishing', 'group', '.'] Tag sample sentence :  [('Mr.', 'NNP'), ('Vinken', 'NNP'), ('is', 'VBZ'), ('chairman', 'NN'), ('of', 'IN'), ('Elsevier', 'NNP'), ('N.V.', 'NNP'), (',', ','), ('the', 'DT'), ('Dutch', 'JJ'), ('publishing', 'NN'), ('group', 'NN'), ('.', '.')]

在上面的代码示例中,第一个 Unigram 标记器是在 Treebank 的前 4000 个句子上进行训练的。训练句子后,对任何句子使用相同的标记器对其进行标记。在上面的代码示例中,使用了句子 1。

下面的代码示例可用于测试Unigram标记器并对其进行评估。

代码语言:javascript
复制
from nltk.corpus import treebank as tb sentences_trained = treebank.tagged_sents()[:4000] uni_tagger = UnigramTagger(sentences_trained) sent_tested = treebank.tagged_sents()[3000:] print("Test score : ",uni_tagger.evaluate(sent_tested))

输出

代码语言:javascript
复制
Test score :  0.96

在上面的代码示例中,unigram 标记器经过训练和 4000 个句子,然后在最后 1000 个句子上进行评估。

平滑技术

在许多情况下,我们需要在NLP中构建统计模型,例如,可以根据训练数据或句子的自动完成来预测下一个单词。在如此多的单词组合或可能性的宇宙中,获得最准确的单词预测是必不可少的。在这种情况下,可以使用平滑。平滑是一种调整训练模型中概率的方法,以便它可以更准确地预测单词,甚至预测训练语料库中不存在的适当单词。

平滑的类型

拉普拉斯平滑

它也被称为加 1 一平滑,我们在分母中的字数上加 1,这样我们就不会产生 0 值或除以 0 条件

例如

代码语言:javascript
复制
Problaplace (wi | w(i-1)) = (count(wi w(i-1)) +1 ) / (count(w(i-1)) + N) N = total words in the training corpus Prob("He likes coffee") = Prob( I | <S>)* Prob( likes | I)* Prob( coffee | likes)* Prob(<E> | coffee) = ((1+1) / (4+6))   *  ((1+1) / (1+8))  *  ((0+1) / (1+5))  *  ((1+1) / (4+8)) = 0.00123

退避和插值

它涉及两个步骤

退库流程
  • 我们从 n-gram 开始,
  • 如果观察不充分,我们会检查 n-1 克
  • 如果我们有足够的观察,我们使用 n-2 克
插值过程
  • 我们使用不同 n 元语法模型的合并

例如,考虑到他去的句子xxx,我们可以说他去的三元语法已经出现过一次,如果单词是to,他去的单词的概率是1,对于所有其他单词都是0。

结论

UnigramTagger是一个有用的NLTK工具,用于训练一个标记器,该标记器可以仅使用单个单词作为上下文来确定句子的词性。UnigramTagger 在 NLTK 工具包中可用,该工具包使用 Ngarm Tagger a sits 父类。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • Unigram Tagger及其使用NLTK的培训
    • 加工
      • 蟒蛇实现
        • 输出
          • 输出
            • 平滑技术
              • 平滑的类型
                • 拉普拉斯平滑
              • 退避和插值
                • 退库流程
                • 插值过程
            • 结论
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档