基于HTK语音工具包进行孤立词识别的使用教程

选自:http://my.oschina.net/jamesju/blog/116151

1前言

最近一直在研究HTK语音识别工具包,前几天完成了工具包的安装编译和测试,这几天又按耐不住好奇,决定自己动手搞一搞,尝试一下用这个工具包,进行简单的孤立词识别,看了几天的文档,做了各种尝试,总算跌跌撞撞的实现了,把步骤记录下来,以后作为参考。

2孤立词识别系统

在本系统中我们将要实现三个词的识别系统,词汇集为:{brightness, channel,color}。

2.1搭建步骤

A:创建语料库,brightness, channel,color各录制5次。

B:声学分析,把wavform的声音文件转换为mfcc格式。

C:模型定义,为词典里面的每一个词建立一个HMM原型。

D:模型训练,HMM模型初始化和迭代。

E:问题定义,即语法定义。

F:对测试结合进行识别

G:评测

2.2 工作环境搭建

创建如下目录结构:

(1) data/:存储训练和测试数据(语音文件、语音标签、特征矢量文件)。子目录:data/train/lab data/train/wav data/train/mfcc data/test/lab data/test/wav data/test/mfcc

(2) analysis/: 存储声学分析步骤的文件

(3) training/: 存储初始化和训练步骤的文件

(4) model/: 存储识别系统的模型(HMMs)的相关文件。子目录:model/proto

(5) def/: 存储任务定义的相关文件

(6) test:/ 存储测试相关文件

2.3 标准HTK工具选项

一些标准选项对于每个HTK工具都是通用的。

(1) -A: 显示命令行参数

(2) -D: 显示配置设置

(3) -T 1: 显示算法动作的相关信息

完整的选项列表请参见:htkbook

3 语料库的准备

我们来录制{brightness, channel,color}这个三个词的读音。同时每个录音都要进行标注,也就是有一个文

本文件与其对应描述它的内容。

3.1 录音

我们将上述三个词各录制5次,保存为wav格式。并存放
   
 在data/train/wav/brightness data/train/wav/channel data/train/wav/channel中。

3.2 标注

我们可以用相关的语音处理软件进行标注。并把标注的文件放到 data/train/lab/brightness data/train/lab/brightness data/train/lab/color中。

标注.lab文件的格式如下:

4 声学分析

从原始的声音文件转换为特征矢量文件:

需要创建的文件:

(1) analysis.conf

创建目录:training/

说明:配置文件,说明了特征矢量的特性

内容:

注:参数意义详见:htkbook

(1) targetlist_train.txt

创建目录:training/

说明:列出源文件和目的的文件的位置,即声音文件和特征文件

内容:

指令:Hcopy -A -D -C training/analysis.conf -S training/targetlist_train.txt

运行结果:

我们会看到:

5 HMM定义

需要创建的文件:hmm_brightness hmm_channel hmm_color hmm_silb hmm_sile

创建目录:model/proto

说明:用来定义单词的HMM模型

内容:

hmm_brightness:

~o <VecSize> 39 <MFCC_0_D_A>

~h "brightness"

<BeginHMM>

<NumStates> 10

<State> 2

<Mean> 39

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

<Variance> 39

1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0

1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0

1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0

<State> 3

<Mean> 39

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

<Variance> 39

1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0

1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0

1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0

<State> 4

<Mean> 39

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

<Variance> 39

1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0

1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0

1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0

<State> 5

<Mean> 39

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

<Variance> 39

1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0

1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0

1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0

<State> 6

<Mean> 39

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

<Variance> 39

1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0

1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0

1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0

<State> 7

<Mean> 39

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

<Variance> 39

1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0

1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0

1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0

<State> 8

<Mean> 39

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

<Variance> 39

1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0

1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0

1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0

<State> 9

<Mean> 39

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

<Variance> 39

1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0

1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0

1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0

<TransP> 10

0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

0.0 0.5 0.5 0.0 0.0 0.0 0.0 0.0 0.0 0.0

0.0 0.0 0.5 0.5 0.0 0.0 0.0 0.0 0.0 0.0

0.0 0.0 0.0 0.5 0.5 0.0 0.0 0.0 0.0 0.0

0.0 0.0 0.0 0.0 0.5 0.5 0.0 0.0 0.0 0.0

0.0 0.0 0.0 0.0 0.0 0.5 0.5 0.0 0.0 0.0

0.0 0.0 0.0 0.0 0.0 0.0 0.5 0.5 0.0 0.0

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.5 0.5 0.0

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.5 0.5

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

<EndHMM>

注:hmm_channel hmm_color同hmm_brightness,不过最上面的名字要分别换成channel和color
hmm_silb:

~o <VecSize> 39 <MFCC_0_D_A>

~h "silb"

<BeginHMM>

<NumStates> 3

<State> 2

<Mean> 39

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

<Variance> 39

1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0

1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0

1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0

<TransP> 3

0.0 1.0 0.0

0.0 0.5 0.5

0.0 0.0 0.0

<EndHMM>

注:hmm_sile同hmm_silb,只修改名字就好。

6 HMM训练

6.1 初始化

需要创建的文件:

(1) trainlist_brightness.txt trainlist_channel.txt trainlist_color.txt trainlist_silb.txt trainlist_sile.txt

创建目录:training/

说明:特征矢量文件路径

内容:

(2) hmm0目录

创建目录:model/

说明:初始化后的HMM模型存放的位置

指令:

Hinit -A -D -T 1 -S training/trainlist_brightness.txt -M model/hmm0 -H model/proto/hmm_brightness -l brightness -L data/train/lab/brightness brightness

Hinit -A -D -T 1 -S training/trainlist_channel.txt -M model/hmm0 -H model/proto/hmm_channel -l channel -L data/train/lab/channel channel

Hinit -A -D -T 1 -S training/trainlist_color.txt -M model/hmm0 -H model/proto/hmm_color -l color -L data/train/lab/color color

Hinit -A -D -T 1 -S training/trainlist_silb.txt -M model/hmm0 -H model/proto/hmm_silb -l silb -L data/train/lab/brightness silb

Hinit -A -D -T 1 -S training/trainlist_sile.txt -M model/hmm0 -H model/proto/hmm_sile -l sile -L data/train/lab/brightness sile

初始化之后我们可以再hmm0文件夹中看到:

6.2 训练

需要创建的目录:hmm1 hmm2 hmm3

创建位置: model/

每次,HRest迭代(即当前再估计迭代中的迭代)显示在屏幕上,通过change

量度标示收敛性。一旦这个量度值不再从一个HRest迭代到下个迭代减少(绝对值),过程就该停止了,迭代一般2-3次就可以了。

指令:

HRest -A -D -T 1 -S training/trainlist_brightness.txt -M model/hmm1 -H model/hmm0/hmm_brightness  -l brightness  -L data/train/lab/brightness brightness

HRest -A -D -T 1 -S training/trainlist_brightness.txt -M model/hmm2 -H model/hmm1/hmm_brightness  -l brightness  -L data/train/lab/brightness brightness

HRest -A -D -T 1 -S training/trainlist_brightness.txt -M model/hmm3 -H model/hmm2/hmm_brightness  -l brightness  -L data/train/lab/brightness brightness

HRest -A -D -T 1 -S training/trainlist_channel.txt -M model/hmm1 -H model/hmm0/hmm_channel  -l channel  -L data/train/lab/channel channel

HRest -A -D -T 1 -S training/trainlist_channel.txt -M model/hmm2 -H model/hmm1/hmm_channel  -l channel  -L data/train/lab/channel channel

HRest -A -D -T 1 -S training/trainlist_channel.txt -M model/hmm3 -H model/hmm2/hmm_channel  -l channel  -L data/train/lab/channel channel

HRest -A -D -T 1 -S training/trainlist_color.txt -M model/hmm1 -H model/hmm0/hmm_color  -l color  -L data/train/lab/color color

HRest -A -D -T 1 -S training/trainlist_color.txt -M model/hmm2 -H model/hmm1/hmm_color  -l color  -L data/train/lab/color color

HRest -A -D -T 1 -S training/trainlist_color.txt -M model/hmm3 -H model/hmm2/hmm_color  -l color  -L data/train/lab/color color

HRest -A -D -T 1 -S training/trainlist_silb.txt -M model/hmm1 -H model/hmm0/hmm_silb  -l silb  -L data/train/lab/brightness silb

HRest -A -D -T 1 -S training/trainlist_silb.txt -M model/hmm2 -H model/hmm1/hmm_silb  -l silb  -L data/train/lab/brightness silb

HRest -A -D -T 1 -S training/trainlist_silb.txt -M model/hmm3 -H model/hmm2/hmm_silb  -l silb  -L data/train/lab/brightness silb

HRest -A -D -T 1 -S training/trainlist_sile.txt -M model/hmm1 -H model/hmm0/hmm_sile  -l sile  -L data/train/lab/brightness sile

HRest -A -D -T 1 -S training/trainlist_sile.txt -M model/hmm2 -H model/hmm1/hmm_sile  -l sile  -L data/train/lab/brightness sile

HRest -A -D -T 1 -S training/trainlist_sile.txt -M model/hmm3 -H model/hmm2/hmm_sile  -l sile  -L data/train/lab/brightness sile

7.任务定义

7.1 建立语法规则和字典

需要创建的文件:

(1) gram.txt

创建的目录:def

说明:在使用我们的单词模型之前,要定义识别器的基本结构(任务语法)。我们首先定义最简单的语法:开始停顿、接着简单单词(这里指brightness, channel, color)、结束停顿。

内容:

注:用括号{}括住START_SIL和END_SIL表示其可不存在或者重复多次(允许在单词之前或之后长时间的停顿,或者根本没有停顿)。括号[]括住$WORD表示零个或一次出现(如果没有单词,可能只是识别停顿)。

(2) dict.txt

创建的目录:def

说明:系统要知道HMM模型与语法变量BRIGHTNESS、CHANNEL、COLOR、START_SIL和END_SIL的对应关系。这种信息存储在文本文件中,命名为任务字典。

内容:

7.2 网络

建立任务网络:

生成的文件:net.slf

命令:Hparse -A -D -T 1 def/gram.txt def/net.slf

运行结果:

8 识别

8.1 准备测试数据

需要准备的文件:

(1) hmmlist.txt

创建的目录:test/

说明:列出了要使用的模型的名字(brightness, channel,color,silb,sile) ,每个一行,最后要加一个空行。

内容:

(2) targetlist_test.txt

创建的目录:test/

内容:

命令:

Hcopy -A -D -C test/analysis.conf -S test/targetlist_test.txt

8.2 识别

基本方法:

需要创建的文件:

(1) result文件夹

(2) reco.mlf

创建的目录:result/

初始内容:

#!MLF!#

(3) hmmsdef.mmf

创建的目录:test

命令等同于:-H model/hmm3/hmm_brightness  -H model/hmm3/hmm_channel  -H model/hmm3/hmm_color -H model/hmm_silb -H model/hmm3/hmm_sile

内容:hmm3中的所有文件的内容一起粘贴。

注意:只保留一个"~O"

命令:

Hvite -A -D -T 1 -H test/hmmsdef.mmf -i result/reco.mlf -w def/net.slf def/dict.txt test/hmmlist.txt data/test/mfcc/brightness/brightness1.mfcc

结果会在reco.mlf中显示:

交互方式:

需要创建的文件:

directin.conf

创建的目录:test

说明:是Hvite的配置文件,允许使用直接音频输入,为了允许从输入信号中直接提取声学系数,这个文件必须包含前面训练数据使用的声学分析配置参数。

内容:

指令:

Hvite -A -D -T 1 -C test/directin.conf -g -H test/hmmsedf.mmf -w def/net.mlf def/dict.txt test/hmmlist.txt

9 性能测试

9.1 主标签文件

在性能评测之前,我们需要创建两个文件,命名为主标签文件,扩展名是.mlf:

·第一个文件包含整个训练集的正确副本,即是通过手工标注的副本。把ref.mlf记作参考副本。

·第二个文件包含整个测试集的识别副本,即识别器产生的假设副本。把reco.mlf记为识别副本。

通过比较每项数据的参考副本和识别假设,进行性能评测。

内容:

ref.mlf

需要创建的文件:testlist.txt

说明:测试路径

内容:

命令:

Hvite -A -D -T 1 -S test/testlist.txt -H test/hmmsdef.mmf -i result/reco.mlf -w def/net.slf def/dict.txt test/hmmlist.txt

运行之后会看到:

reco.mlf中:

9.2 错误率

需要创建的文件:

labellist.txt

说明:出现在副本文件中的标签列表

创建的目录:result

内容:

results.txt

创建的目录:result

说明:存放错误率结果

命令:

HResults -A -D -T 1 -e ??? sil -

I  result/ref.mlf  result/labellist.txt result/reco.mlf > result/results.txt

最后显示结果为:

注:由于选取的数据集很小只有9个词,非常有限,所以识别率是100%。

第一行(SENT)给出句子的识别率(%Correct=100.00),第二行(WORD)给出的是单词的识别率(%Corr=100.00)。上图中,这两个比率是相同的,这是因为我们的任务语法仅使用一个单词(除了停顿之外)作为句子。这是孤立词识别任务。这里只要考虑第一行(SENT)就够了。H=9 给出的是测试数据被正确识别的数量,S=0,表示识别相反的数量。N=0表示测试数据总数。

10 总结

经过了几天的学习和测试,终于完成了基于HTK工具包进行孤立词识别的工作,掌握了孤立词识别的基本使用方法,具体的细节参数使用在日后的工作中还需要再斟酌。

时间: 2024-10-09 19:21:18

基于HTK语音工具包进行孤立词识别的使用教程的相关文章

Yes Or No孤立词识别

本实验中,我们将基于HTK工具集建立一个2-单词识别系统,词汇集是{Yes,No}.这是可以设计出来的最基本的自动语音识别(Automatic speech recognition,ASR)系统. 目标:建立一个孤立词识别系统,只包含yes和no两个词. 步骤: A: 创建一个语料库,确定识别基本元(如单词yes,no等),yes和no各录5次 B: 声学分析,把waveform的声音文件转换为mfcc()格式 ,即对语音材料库中的声音文件提取MFCC声纹特征 (梅尔频率倒谱系数,这个部分的详解

HTK孤立词识别简单流程

1.数据准备 [command] HSLab one.wav [Rec    ] 开始录音 [Stop   ] 录音结束 [Mark   ] 选择需要标注的区域 [Labelas] 输入标注 回车确定 [Save   ] 保存 孤立词标注3个部分:起始静音(sil) 词语音(one) 结束静音(sil) 按照上述步骤,录制训练集和测试集 编写EBNF文法,并生成最终的解码网络 [command] HParse -T 1 gram.txt net.sf [gram.txt] # WORD = on

讯飞语音——离线命令词识别

离线命令词识别 效果图 示例源码 地址:http://download.csdn.net/detail/q4878802/9023825 步骤: 1. 下载SDK 前面文章有,就不在复述了.这里要选择离线命令词的服务以后,重新加载,因为需要下载离线命令词识别的资源文件 地址:http://blog.csdn.net/q4878802/article/details/47762169 2. 集成方法 前面文章有,就不在复述了. 地址:http://blog.csdn.net/q4878802/ar

基于科大讯飞语音云windows平台开发

前记: 前段时间公司没事干,突发奇想想做一个语音识别系统,看起来应该很简单的,但做起来却是各种问题,这个对电气毕业的我,却是挺为难的.谷姐已经离我们而去,感谢度娘,感谢CSDN各位大神,好歹也做的是那么回事了,虽然还是不好用,但基本功能实现了. 该软件使用VS2008C++/CLR开发,由于科大讯飞提供的是C的API接口,结果到这边就是各种不兼容,CLR是基于托管堆运行的,而这个API有是非托管堆的,使用了各种指针,原本打算使用C#来做,最后门外汉的我也没能做到C#和C指针完美结合,真怀恋单片机

转:基于科大讯飞语音API语音识别开发详解

最近项目需要用到android语音识别,立马就想到科大讯飞,结合官方实例及阅读API文档,初步的完成了Android语音识别,下面是实现过程实录. 一.准备工作 1.你需要android手机应用开发基础 2.科大讯飞语音识别SDK android版 3.科大讯飞语音识别开发API文档 4.android手机 关于科大讯飞SDK及API文档,请到科大语音官网下载:http://open.voicecloud.cn/ 当然SDK和API有多个版本可选,按照你的需要下载,其次,下载需要填写资料申请注册

[转]Kaldi命令词识别

转自: http://www.jianshu.com/p/5b19605792ab?utm_campaign=maleskine&utm_content=note&utm_medium=pc_all_hots&utm_source=recommendation http://www.jianshu.com/p/6338fab6bd0a 刚刚拿到一个简单语料库练手,发现只有语音和对应文字, 这篇文章记录了从数据预处理到kaldi对数据进行训练和测试的全过程,这里首先训练单音节模型,其

【基于WPF+OneNote+Oracle的中文图片识别系统阶段总结】之篇四:关于OneNote入库处理以及审核

篇一:WPF常用知识以及本项目设计总结:http://www.cnblogs.com/baiboy/p/wpf.html 篇二:基于OneNote难点突破和批量识别:http://www.cnblogs.com/baiboy/p/wpf1.html 篇三:批量处理后的txt文件入库处理:http://www.cnblogs.com/baiboy/p/wpf2.html 篇四:关于OneNote入库处理以及审核:http://www.cnblogs.com/baiboy/p/wpf3.html [

【基于WPF+OneNote+Oracle的中文图片识别系统阶段总结】之篇三:批量处理后的txt文件入库处理

篇一:WPF常用知识以及本项目设计总结:http://www.cnblogs.com/baiboy/p/wpf.html 篇二:基于OneNote难点突破和批量识别:http://www.cnblogs.com/baiboy/p/wpf1.html 篇三:批量处理后的txt文件入库处理:http://www.cnblogs.com/baiboy/p/wpf2.html 篇四:关于OneNote入库处理以及审核:http://www.cnblogs.com/baiboy/p/wpf3.html [

CRF技能词识别过程

最近在用CRF做未登录技能词识别,虽然艰难,但是感觉很爽,效率非常高. (1)数据准备: 选取30000行精语料作为训练数据.每一个br作为一条数据.使用已有的技能词典对数据进行无标注分词. (2)训练数据标注: 对分词后的语料进行标注.如果某分词结果在技能词典中,则该词作为技能词进行标注:如果某分词结果不在词典中,则该词作为与技能无关词进行标注.标注规则如下: 标注采用3列,4-tag方式标注:B:技能词开头字:M:技能词中间字:E:技能词结尾字:A:与技能词无关字. (3)修改模板: 技能词