网站空间支持功能,网站招工费怎么做会计分录,wordpress ftp 插件,电脑上自己做科目一的网站今天介绍CRFs在中文分词中的应用 工具#xff1a;CRF,可以去 https://taku910.github.io/crfpp/ 下载#xff0c;训练数据和测试数据可以考虑使用bakeoff2005,这是链接 http://sighan.cs.uchicago.edu/bakeoff2005/ 首先需要了解一些概念 字标记法——统计分词模型常用的方法… 今天介绍CRFs在中文分词中的应用 工具CRF,可以去 https://taku910.github.io/crfpp/ 下载训练数据和测试数据可以考虑使用bakeoff2005,这是链接 http://sighan.cs.uchicago.edu/bakeoff2005/ 首先需要了解一些概念 字标记法——统计分词模型常用的方法可以将分词问题转化为分类问题。这里我们介绍一下4-tag字标记法4-tag指的是文档中的每个字都对应一个标记一共有4类标记分别是B、M、E、S分别代表一个字处于词的开始位置、中间位置、 结束位置以及一个单子构成一个词。以“我是中国人”为例来说明标记完的结果是 我 S 是 S 中 B 国 M 人 E 这样给文档中的每个字都赋予一个标记那么我们可以将分词任务视为一个分类问题--将文档中的每个字分别赋予一个类标记。 然而如果将分词仅仅视为一个分类任务来考虑那么得到的结果很可能不太理想因为分词需要考虑上下文如果仅考虑字本身的特征还是无法得到想要的效果而CRFs模型天然考虑了上下文特征通常在需要考虑上下文特征的序列标注问题中能取得不错的效果。 在CRFs模型中我们将一句话视为一个最大团最大团的概念可以回顾下CRF第一篇这样我们只需要求得所有候选词序列的联合概率分布的最大值每个词对应一个随机变量那么就可以得到一个分词的标注序列。 n-gram模型——用于限定我们考虑特征的范围以uni-gram和bi-gram为例来说明uni-gram窗口大小为1cut-off1只考虑单字的特征bi-gram窗口大小为2cut-off2考虑两个连续字的特征比如“我是中国人”bi-gram在取每个字的特征的时候只分别考虑“我是”、“是中”、“中国”、“国人”、“人”范围内的特征。笔者推测这样划分的原理应该是句子马尔科夫链的性质——一个字只和它周围的若干字有关联越远关联越弱。 下面介绍CRF工具包 CRF工具包输入数据的格式是这样的 D B D M月 W E D B D M日 W E S S中 W B共 W M中 W M央 W E 第一列是文档中的字第二列是字的特征比如我们规定数字用D表示普通字用W表示标点符号用S表示等第三列是4-tag字标记。CRF引入了特征模板的概念用于扩展特征集显然上面的输入数据格式能提供的特征太少了模板这样定义的以上面的输入数据为例假设当前字符为“共” templateexpanded feature%x[0,0]共%x[0,1]W%x[-1,0]中%x[-2,1]S%x[0,0]/%x[0,1]共/WABC%x[0,1]123ABCW123 %x[row,column]row是相对当前字符的行下标column是列下标。 特征模板长这样 # Unigram
U00:%x[-2,0]
U01:%x[-1,0]
U02:%x[0,0]
U03:%x[1,0]
U04:%x[2,0]
U05:%x[-1,0]/%x[0,0]
U06:%x[0,0]/%x[1,0]U10:%x[-2,1]
U11:%x[-1,1]
U12:%x[0,1]
U13:%x[1,1]
U14:%x[2,1]
U15:%x[-2,1]/%x[-1,1]
U16:%x[-1,1]/%x[0,1]
U17:%x[0,1]/%x[1,1]
U18:%x[1,1]/%x[2,1]U20:%x[-2,1]/%x[-1,1]/%x[0,1]
U21:%x[-1,1]/%x[0,1]/%x[1,1]
U22:%x[0,1]/%x[1,1]/%x[2,1]# Bigram
B 其中U01这些是特征ID空行没任何意义#Unigram #Bigram这些是解释说明指的是下面用的是哪类模型。 训练的话可以在命令行进入项目根目录之后或者添加环境变量方便在任意位置识别训练程序输入 crf_learn template_file train_file model_file crf_learn是训练程序template_file指的是模板路径train_file指的是训练数据路径model_file指的是生成的模型文件路径目录文件 有4个可选参数分别是-a CRF-L2 or CRF-L1: 选择L1正则化还是L2正则化正则化的目的是防止过拟合一般而言L2正则化更优因为L1正则化偏向于减少项的个数而L2正则化偏向于降低每一项前面的系数使之趋向于0而不是减少为0 -c float 这个参数设置CRF的hyper-parameter。c的数值越大CRF拟合训练数据的程度越高。这个参数可以调整过拟合和欠拟合之间的平衡度。这个参数可以通过交叉验证等方法寻找较优的参数。 -f NUM 这个参数设置特征的cut-off threshold。CRF使用训练数据中至少NUM次出现的特征。默认值为1。当使用CRF到大规模数据时只针对特定数据的特征可能会有几百万这个选项就会在这样的情况下起到作用。 -p NUM 如果电脑有多个CPU那么那么可以通过多线程提升训练速度。NUM是线程数量。 所以我们在命令行训练数据也可以这样写 crf_learn -f 3 -c 1.5 template_file train_file model_file 下面是测试数据的命令行 crf_test -m model_file test_files model_file指的是模型文件的路径test_files指的是测试数据文件的路径这里就不需要指定模板文件的路径了因为其路径已经写入模型文件中测试数据的文件格式与训练数据文件格式相同运行测试命令会增加第四列表示预测的各个字符的标记然后可以用程序将其转化为我们想要的分词形式即可。 由于训练时间太长笔者决定下期发布相关代码敬请期待转载于:https://www.cnblogs.com/xueyinzhe/p/7225923.html