自然语言处理(2)

简介:

从trie树说起

Trie树,又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。

Trie树,又称字典树,单词查找树或者前缀树,是一种用于快速检索的多叉树结构,如英文字母的字典树是一个26叉树,数字的字典树是一个10叉树。

Trie树可以利用字符串的公共前缀来节约存储空间。如下图所示,该trie树用10个节点保存了6个字符串tea,ten,to,in,inn,int:

image

 

trie树的优缺点

在该trie树中,字符串in,inn和int的公共前缀是“in”,因此可以只存储一份“in”以节省空间。当然,如果系统中存在大量字符串且这些字符串基本没有公共前缀,则相应的trie树将非常消耗内存,这也是trie树的一个缺点。

Trie树的基本性质可以归纳为:

(1)根节点不包含字符,除根节点意外每个节点只包含一个字符。

(2)从根节点到某一个节点,路径上经过的字符连接起来,为该节点对应的字符串。

(3)每个节点的所有子节点包含的字符串不相同。

 

trie树的demo

Ansj作者ansjsun为此数据结构专门开了一个项目,clone下来之后可以用作者提供的一个demo进行测试:

import java.io.BufferedReader;
import java.io.StringReader;

import love.cq.domain.Forest;
import love.cq.library.Library;
import love.cq.splitWord.GetWord;

/**
 * @author feng
 *
 */
public class TreeSplitTest {

    /**
     * @param args
     * @throws Exception 
     */
    public static void main(String[] args) throws Exception {
        /**
         * 词典的构造.一行一个词后面是参数.可以从文件读取.可以是read流.
         */
        String dic = "中国\t1\tzg\n人名\t2\n中国人民\t4\n人民\t3\n孙健\t5\nCSDN\t6\njava\t7\njava学习\t10\n";
        Forest forest = Library.makeForest(new BufferedReader(new StringReader(
                dic)));

        /**
         * 删除一个单词
         */
        Library.removeWord(forest, "中国");
        /**
         * 增加一个新词
         */
        Library.insertWord(forest, "中国人");
        String content = "中国人名识别是中国人民的一个骄傲.孙健人民在CSDN中学到了很多最早iteye是java学习笔记叫javaeye但是java123只是一部分";
        GetWord udg = forest.getWord(content);

        String temp = null;
        while ((temp = udg.getFrontWords()) != null)
            System.out.println(temp + "\t\t" + udg.getParam(1) + "\t\t"
                    + udg.getParam(2));
    }

}

以上代码完全来自ansjsun的demo,运行后的输出结果为:

image

这段demo的目的是利用一个小词典对后面一句话进行分词,词典被用来构造了一颗Trie树,也就是代码中的forest。这个版本的分词器中需要引入条件概率(隐马尔可夫模型)提高分词的准确性。

 

CRF 简介入门

Conditional Random Field:条件随机场,一种机器学习技术(模型)。

CRF由John Lafferty最早用于NLP技术领域,其在NLP技术领域中主要用于文本标注,并有多种应用场景,例如:

  • 分词(标注字的词位信息,由字构词)
  • 词性标注(标注分词的词性,例如:名词,动词,助词)
  • 命名实体识别(识别人名,地名,机构名,商品名等具有一定内在规律的实体名词)

 

使用CRF进行中文分词

 1)CRF VS 词典统计分词

    • 基于词典的分词过度依赖词典和规则库,因此对于歧义词和未登录词的识别能力较低;其优点是速度快,效率高
    • CRF代表了新一代的机器学习技术分词,其基本思路是对汉字进行标注即由字构词(组词),不仅考虑了文字词语出现的频率信息,同时考虑上下文语境,具备较好的学习能力,因此其对歧义词和未登录词的识别都具有良好的效果;其不足之处是训练周期较长,运营时计算量较大,性能不如词典分词

 2)CRF VS HMM,MEMM

    • 首先,CRF,HMM(隐马模型),MEMM(最大熵隐马模型)都常用来做序列标注的建模,像分词、词性标注,以及命名实体标注
    • 隐马模型一个最大的缺点就是由于其输出独立性假设,导致其不能考虑上下文的特征,限制了特征的选择
    • 最大熵隐马模型则解决了隐马的问题,可以任意选择特征,但由于其在每一节点都要进行归一化,所以只能找到局部的最优值,同时也带来了标记偏见的问题,即凡是训练语料中未出现的情况全都忽略掉
    • 条件随机场则很好的解决了这一问题,他并不在每一个节点进行归一化,而是所有特征进行全局归一化,因此可以求得全局的最优值。

CRF 原理

    1)CRF把分词当做字的词位分类问题,通常定义字的词位信息如下:

    • 词首,常用B表示
    • 词中,常用M表示
    • 词尾,常用E表示
    • 单子词,常用S表示

    2)CRF分词的过程就是对词位标注后,将B和E之间的字,以及S单字构成分词

    3)CRF分词实例:

    • 原始例句:我爱北京天安门
    • CRF标注后:我/S 爱/S 北/B 京/E 天/B 安/M 门/E
    • 分词结果:我/爱/北京/天安门 

CRF 分词及使用

目前常见的CRF工具包有pocket crf, flexcrf 车crf++。下面的链接是使用CRF进行中文分词的示例:

http://x-algo.cn/index.php/2016/02/27/crf-of-chinese-word-segmentation/

总结

在下面将介绍中文分词中的几个经典算法,包括正向最大匹配、逆向最大匹配、逐词匹配、最少切分和全切分。

作者:skyme 出处: http://www.niubua.com/

联系方式: 
邮箱【cloudskyme@163.com】 
QQ【270800073】

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

目录
相关文章
|
前端开发 JavaScript API
前端 excelex 包可将数据保存为 xls、xlsx、csv、txt 文件(支持单元格样式、合并单元格等)
前端 excelex 包可将数据保存为 xls、xlsx、csv、txt 文件(支持单元格样式、合并单元格等)
393 1
|
Web App开发 大数据 应用服务中间件
什么是 HTTP Range请求(范围请求)
HTTP Range 请求是一种非常有用的 HTTP 功能,允许客户端请求资源的特定部分,从而提高传输效率和用户体验。通过合理使用 Range 请求,可以实现断点续传、视频流播放和按需加载等功能。了解并掌握 HTTP Range 请求的工作原理和应用场景,对开发高效的网络应用至关重要。
1785 16
|
前端开发 数据可视化 容器
前端基础(十六)_BFC、box-shadow(盒子阴影)、text-shadow(文字阴影)
本文介绍了前端开发中块级格式化上下文(BFC)的概念和作用,以及如何创建BFC。同时,文章还讲解了`box-shadow`和`text-shadow`属性的用法,包括如何为元素添加阴影效果,并通过示例代码展示了这些属性的具体应用。
283 0
前端基础(十六)_BFC、box-shadow(盒子阴影)、text-shadow(文字阴影)
|
存储 搜索推荐 Java
ElasticSearch 的概念解析与使用方式(一)
ElasticSearch 的概念解析与使用方式(一)
437 1
|
消息中间件 PHP 数据安全/隐私保护
docker安装rabbitmq并配置hyperf使用
通过以上步骤,您可以实现在Docker容器中安装和配置RabbitMQ,并在PHP的Hyperf框架中进行集成和使用。这种方式为开发者提供了快速部署并实现消息队列解决方案的能力,同时维持了环境与生产环境的一致性,从而为开发高效的分布式应用程序提供了便利。
500 3
docker安装rabbitmq并配置hyperf使用
|
人工智能 自然语言处理 搜索推荐
只用文本,3分钟生成一个网站!首个ChatGPT版网站开发平台
【2月更文挑战第30天】Dora AI是一个创新的生成式AI网站开发平台,让用户通过文本输入快速创建各类网站,无需模板,支持动态生成和个性化定制。平台提供直观的拖拽编辑,降低使用门槛,3分钟内即可生成网页。用户输入提示词或选择“Surprise Me”可获得不同风格的页面。尽管部分高级功能需会员,但基本编辑功能对所有用户开放。Dora AI正研发更多高级功能,如文本生成动画和3D网站,以提升用户体验。
621 2
只用文本,3分钟生成一个网站!首个ChatGPT版网站开发平台
|
智能硬件
Wi-Fi 与蓝牙:差异解析
【8月更文挑战第24天】
3504 0
|
存储 Cloud Native 关系型数据库
Ganos三维引擎系列(四):路网与地形贴合
本文介绍了阿里云多模态时空数据库Ganos三维引擎在交通领域的专题应用,帮助业务侧快速实现三维地形与高精路网的自动贴合。Ganos三维引擎支持三大类存储结构:表面网格模型、体网格模型与3D实景模型,其中表面网格模型(SFMesh)提供了三维地形数据的存储能力,同时提供了与矢量三维(Polygon3D)的贴合功能,帮助用户降低交通领域三维数据生产处理的难度。
|
机器学习/深度学习 编解码 计算机视觉
YOLOv5改进 | 主干篇 | EfficientNetV1高效的特征提取网络
YOLOv5改进 | 主干篇 | EfficientNetV1高效的特征提取网络
530 0
|
SQL 弹性计算 分布式计算
阿里云开源大数据平台E-MapReduce 产品新动态及开源大数据前沿技术分享 2023-2月刊
开源大数据平台 EMR 产品技术月刊,涵盖本月技术速递、产品和功能发布、市场和客户应用实践等内容,帮助您快速了解开源大数据最新动态。
10597 8
阿里云开源大数据平台E-MapReduce 产品新动态及开源大数据前沿技术分享 2023-2月刊