人机文本分类特征构造——困惑度计算

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Totoro1745/article/details/80962218

最近在2018smp的一个比赛中锻炼了一下,该任务为文本分类,重点在于辨别人类作者和机器所写文章的不同,在一番仔细斟酌之后发现两者之间的区别有以下3点:
(1)语序
机器所写的可能想表达的是一样的说法,是基于文本规则对抽取词汇的排列,但是结果呈现在词序的排序上却会出现一些偏差,举个栗子:

正确的句子:
这将是最好的未来 。
错误的句子:
这是将最好的未来 。

(2)语义
机器所写的内容可能存在重复或者上下表达一致,也有出现多个文本内容的糅合,举个例子:

南澳 I 号 涉嫌 武装 走私 。 深圳 261 保障房 申请 户 造假 被 处 5000 元 罚款 。 广东 惠州 破获 操纵 未成年人 犯罪团伙 头目 判 死刑 。 广州 花都 原 区委书记 受贿 500 多 万元 受审 ( 图 ) 。

(3)语法
机器所写的内容有时候会出现少部分的病句,而且在标点符号上也有使用不规范的情况。

对以上的特点,在语序方面采取训练SRILM模型并计算单个句子的困惑度作为特征输入,以下就是具体的流程。

关于SRILM模型

SRILM的主要目标是支持语言模型的估计和评测。估计是从训练数据(训练集)中得到一个模型,包括最大似然估计及相应的平滑算法;而评测则是从测试集中计算其困惑度。其最基础和最核心的模块是n-gram模块,这也是最早实现的模块,包括两个工 具:ngram-count和ngram,相应的被用来估计语言模型和计算语言模型的困惑度

安装及使用

1.所需要的依赖包

c/c++ compiler,GNU make,GNU gawk,GNU gzip,Tcl
先提前安装好

2.安装SRILM

(1)下载
SRILM下载地址:http://www.speech.sri.com/projects/srilm/download.html
选择适合的版本,然后accept the license即可,解压后记住自己的所放路径(后面需要)
(2)修改srilm/MakeFile:

# SRILM = /home/speech/stolcke/project/srilm/devel (原) 
 SRILM = $(PWD)

(3)修改srilm/common/Makefile.machine.*:
所填的内容和本机硬件平台有关。可以在终端输入一下命令查看:

  uname -i

比如我的机子是x86_64,那我修改的是Makefile.machine.i686-m64这个文件。

找到:
    TCL_INCLUDE =
    TCL_LIBRARY =
修改为:
    TCL_INCLUDE =
    TCL_LIBRARY =
        NO_TCL = X  
找到:
    GAWK = /usr/bin/awk   
修改为:
      GAWK = /usr/bin/gawk

(4)编译
在SRILM目录下输入:

make World

(5)修改环境变量

export PATH=(你的安装路径):$PATH

(6)测试
在终端输入:

make test

3.SRILM的简单使用

1:词频统计

ngram-count -text trainfile.txt -order 3 -write trainfile.count
其中-order 33-gram,trainfile.count为统计词频的文本

2:模型训练

ngram-count -read trainfile.count -order 3 -lm trainfile.lm  -interpolate -kndiscount
其中trainfile.lm为生成的语言模型,-interpolate-kndiscount为插值与折回参数

3:测试(困惑度计算)

ngram -ppl testfile.txt -order 3 -lm trainfile.lm -debug 2 > file.ppl
参数:
-debug 0 只输出整体情况
-debug 1 具体到句子
-degub 2 具体到每个词的概率

猜你喜欢

转载自blog.csdn.net/Totoro1745/article/details/80962218
今日推荐