当前位置:   article > 正文

语言模型 python实现uni-gram和bi-gram 使用ppl困惑度对比模型效果 山东大学2019 NLP实验1_1.用python编程实践语言模型(uni-gram和bi-gram),加入平滑技术。 2.计算te

1.用python编程实践语言模型(uni-gram和bi-gram),加入平滑技术。 2.计算test.txt

实验目的

理解并实践语言模型

实验内容

  1. 用python 编程实践语言模型(uni-gram 和bi-gram) ,加入平滑技术。
  2. 计算测试集中句子的perplexity,对比uni-gram 和bi-gram 语言模型效果。

数据集

Example:

(每行数据是一段对话,句子间用__eou__分隔)
How much can I change 100 dollars for ? __eou__ What kind of currency do you
want ? __eou__ How much will it be in Chinese currency ? __eou__ That’s 680 Yuan .
__eou__
What kind of account do you prefer ? Checking account or savings account ?
__eou__ I would like to open a checking account . __eou__ Ok , please just fill out
this form and show us your ID card . __eou__ Here you are . __eou__

实验环境

  1. python 3.7.1
  2. nltk
    • 安装过程:
      1. pip install nltk
      2. 进入python命令行模式
      3. 执行以下命令
        import nltk
        nltk.download()
        
        • 1
        • 2
        下载安装所有文件

实验思路

train
  1. 对训练集进行预处理
    • 全部转化为小写
    • 去标点
    • 分句(使用bi-gram时,句尾句首词不会组成二元组,保证句子间独立性)
      *在bi-gram中,将词组成二元组,并且储存以wi为前缀的bi-gram的种类数量(例:词表中只存在go to和go back两种组合,则wgo的值为2)
  2. 训练
    • 以词作为基元,对每个分句进行分词,并统计每个基元在整个数据集中出现的频数
    • 加入未登录词,并将频数置为0(注意维护wi为前缀的bi-gram的种类数量)
    • 对数据进行平滑并利用频数计算词的频率,以此代替词的概率(此次实验采用加一平滑法
test
  1. 计算测试集中每个句子的perplexity
    注:因概率值极小,为了减小误差,将先累乘再取对数的运算转化成先取对数再累加
  2. 对测试集句子的perplexity取平均值

代码实现

from nltk.tokenize import word_tokenize
from nltk import bigrams, FreqDist
from math import log
  • 1
  • 2
  • 3
# 读取数据 小写 替换符号 分句 
dataset = open("train_LM.txt", 'r+', encoding='utf-8').read().lower()\
                .replace(',',' ').replace('.',' ').replace('?',
  • 1
  • 2
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/397409
推荐阅读
相关标签
  

闽ICP备14008679号