赞
踩
实验内容:
1.用python编程实践语言模型(uni-gram和bi-gram),加入平滑技术。
2.计算test.txt中句子的PPL,对比uni-gram和bi-gram语言模型效果。
问题1:
程序运行速度很慢,特别是 bi-gram阶段,耗费较多时间。
解答:原本的程序是每次向函数中传入一个测试语句,然后对整体词典进行一次平滑处理操作。且使用实参传入时需要使用 copy函数。尤其是在进行 bi-gram过程时,需要使用 deepcopy函数,非常慢。之后直接对整个 test文本进行一次平滑操作。前后结果基本没有发生变化。
问题2:由于这里是对词进行处理,可能相同的词存在不同的大小写,而且对于句子中的标点符号该怎么处理?
解答:Python 、python、PYTHON这些词应该都属于一个词,所以应该将每个词都转换成小写来处理。而且对于句子中的标点符号应该删除。
问题3:
列表和字典作为实参传入函数时,在函数体内部改变形参,会导致实参也发生改变。
解决:一维列表传入使用list.copy(),二维字典传入使用 copy.deepcopy(dict)
问题4:
bi-gram的概率计算方式和平滑处理方式不合适,导致困惑度偏大
解答:
给句子添加首位,令 abc变成 begin abc end。这样的话,我们统计的时候,就可以仅统计 P(a|b)形式的词频就好了,因为 P(begin abc end) = P(begin)P(a|begin)P(b|a)P(c|b)P(end|c)。一句话的开头, P(begin) = 1。所以可以写成 P(begin abc end) = P(a|begin)P(b|a)P(c|b)P(end|c)。全是 P(a|b)形式,容易平滑和处理.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。