山大NLP实验1

实验内容:

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)形式,容易平滑和处理.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值