美文网首页
CRF 实现中文分词与词性标记

CRF 实现中文分词与词性标记

作者: 阳春是你 | 来源:发表于2017-03-10 16:10 被阅读1550次

** 关于命名实体识别和商品打标 **

  • 命名实体识别

在我的业务场景中,需要识别出sku是一件什么物品,比如 sku“良食记东北优质大米 5kg”(标记为“#1”)是大米,sku“德芙丝滑牛奶巧克力碗装 252g”(标记为“#2”)是巧克力。我把以上2个例子中的大米巧克力定义为实体。
对于只包含一个实体词的 #1,可以得到如下的标记

良食记  品牌
东北  产地
优质  修饰
大米  实体
5kg  规格

这种只包含一个实体词的商品,相对易于识别。

对于包含多个实体词的 #2,可以得到如下标记

德芙  品牌
丝滑  修饰
牛奶  实体(实际为修饰,可能是牛奶味,也可能是成分包含牛奶)
巧克力  实体
碗装  规格
252g  规格

对于这种包含多个实体的商品,如何进行实体判别,则需要引入其他条件。
第一个想到的,即是品牌,我们可以计算品牌和实体词的同现度。

  • 商品打标

  • 词的相关性
    比如“烧烤炉”和“烧烤盘”是相关的

  • 特征词
    在title为“海蒂诗 更衣室板 塑料白色 四钩”的sku中,“更衣室”、“板”2者联合可以作为此sku的实体词,二者取其一,搜索结果准确率都会下降

**Stanford Named Entity Recognizer **

词性标记
http://x-algo.cn/index.php/2016/02/28/crf-tagging/

CRF++ 实现中文分词与词性标记

cd CRF++-0.58
./configure
make
sudo make install
  • 安装python

在crf++目录下,提供了python的工具包,需要进行安装

cd CRF++-0.58/python
python setup.py build
sudo python setup.py install

** 利用CRF++实现中文分词 **

  • 步骤
  • 生成CRF++所需格式的训练数据
  • 利用训练数据训练出模型
  • 对测试数据集进行分词

以下为详解

  • 生成CRF++所需格式的训练数据
    在backoff2005的数据集中,有一份训练数据,是分好词的一份文件。


    文件16M左右,每个词以空格隔开。我们需要把这个文件转换为crf++训练数据集所需要的格式。。

crf++所需要的格式如下

“   S
人   B
们   E
常   S
说   S
生   B
活   E

利用训练数据训练出模型

./CRF/crf_learn -f 3 -c 4.0 ./CRF/example/seg/template tmp.data model

生成的模型文件model是一个二进制文件,51M左右。

  • 对测试文件进行分词测试
    下载crf_segmenter
    运行脚本python crf_segmenter.py crf++/crf++/CRF++-0.58/model ./news.txt crf_4tag_news_out.utf8
feature_index.cpp(193) [mmap_.open(model_filename)] ./mmap.h(153) [(fd = ::open(filename, flag | O_BINARY)) >= 0] open failed: model

相关文章

网友评论

      本文标题:CRF 实现中文分词与词性标记

      本文链接:https://www.haomeiwen.com/subject/ufsngttx.html