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

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

  • 命名实体识别

在我的业务场景中,需要识别出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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,347评论 19 139
  • 常用概念: 自然语言处理(NLP) 数据挖掘 推荐算法 用户画像 知识图谱 信息检索 文本分类 常用技术: 词级别...
    御风之星阅读 13,095评论 1 25
  • 1 NER简介 NER(Named Entity Recognition,命名实体识别)又称作专名识别,是自然语言...
    达观数据阅读 7,225评论 1 13
  • 蜘蛛:人类阿拉克尼吹嘘自己的织布手艺胜过了雅典娜,在与雅典娜比拼手艺的时候,织了一副取笑宙斯和他的众多妻子的渎神之...
    宝朴阅读 2,523评论 0 0
  • 古时,月亮的叫法很多,有“婵娟”,“玉轮”等,而其中用“兔”命名,指代月亮的为数最多,诗词歌赋中也素以“玄兔”代月...
    zi珣阅读 3,751评论 10 13