IK分词器

Elasticsearch——IK分词器 分词器的作用是什么?创建倒排索引时,对文档分词用户搜索时,对输入的内容分词IK分词器有几种模式?ik_smart:智能切分,粗粒度ik_max_word:最细切分,细粒度IK分词器如何拓展词条?如何停用词条?利用config目录的IkAnalyzer.cfg.xml文件添加拓展词典和停用词典在词典中添加拓展词条或者停用词条。 阅读详情

IK分词器原理详解:中文分词的智慧引擎

核心设计思想

IK分词器(Intelligent Keyword Analyzer)是专为中文分词设计的开源工具,其核心采用‌正向最大匹配(FMM)算法‌与‌细粒度切分优化‌相结合的分层处理架构,解决了中文分词中三大核心难题:

  1. ‌歧义切分问题‌:"乒乓球拍卖完了" → "乒乓球拍/卖/完了" vs "乒乓球/拍卖/完了"
  2. ‌未登录词识别‌:新词(如网络热词)、专业术语、人名地名识别
  3. ‌上下文感知‌:根据语境动态调整切分策略

系统架构与处理流程


mermaidCopy Code

graph TD A[原始文本] --> B(正向最大匹配) B --> C{词典匹配?} C -->|匹配成功| D[输出候选词] C -->|匹配失败| E(细粒度切分) E --> F[歧义分析] F --> G[上下文优化] G --> H[输出最终分词] D --> I[合并连续词] H --> I I --> J[特殊规则处理] J --> K[最终分词结果]

1. 词典管理机制(核心基石)


javaCopy Code

// 词典数据结构示例 public class DictSegment implements Comparable<DictSegment> { private Character nodeChar; // 当前节点字符 private Map<Character, DictSegment> children; // 子节点 private boolean isEnd; // 是否词语结尾 private int frequency; // 词频(用于歧义消解) }

‌词典层级结构:‌

  • ‌主词典‌:核心词库(6万多常用词)
  • ‌量词词典‌:"个、只、条"等量词
  • ‌后缀词典‌:"们、性、化"等后缀词
  • ‌停用词词典‌:"的、了、是"等无用词
  • ‌扩展词典‌:用户自定义词(如"区块链"、"元宇宙")

‌动态加载机制:‌


javaCopy Code

// 热更新词典(不重启生效) public void addWords(List<String> words) { for (String word : words) { char[] chars = word.trim().toCharArray(); DictSegment ds = MAIN_DICT; for (char c : chars) { ds = ds.addChild(c); } ds.isEnd = true; ds.frequency++; // 增加词频 } }

2. 分词核心算法

(1) 正向最大匹配(FMM)

javaCopy Code

public List<String> forwardMaxMatch(String text) { List<String> result = new ArrayList<>(); int index = 0; while (index < text.length()) { String word = null; // 从最大长度开始匹配 (MAX_LENGTH=8) for (int i = Math.min(MAX_LENGTH, text.length() - index); i > 0; i--) { String candidate = text.substring(index, index + i); if (MAIN_DICT.contains(candidate)) { word = candidate; break; } } if (word != null) { result.add(word); index += word.length(); } else { // 未匹配的单字处理 result.add(text.substring(index, index + 1)); index++; } } return result; }

(2) 细粒度切分优化

当FMM产生歧义时,启动细粒度处理:


javaCopy Code

// 歧义处理流程 public List<String> refineSegmentation(String text) { List<String> fmmResult = forwardMaxMatch(text); if (!hasAmbiguity(fmmResult)) return fmmResult; // 生成所有可能切分组合 List<List<String>> candidates = generateCandidates(text); // 基于规则和词频评分 return selectBestCandidate(candidates); }

‌评分算法示例:‌


javaCopy Code

private double calculateScore(List<String> segmentation) { double score = 0; for (String word : segmentation) { // 词频权重(高频词优先) score += Math.log(MAIN_DICT.getFrequency(word)); // 词长权重(长词优先) score += word.length() * LENGTH_WEIGHT; } // 特殊规则加分(如成语匹配) if (isIdiom(segmentation)) score += IDIOM_BONUS; return score; }

3. 上下文优化策略

IK分词器通过分析上下文动态调整切分:


javaCopy Code

public List<String> contextualSegmentation(String text) { List<String> result = new ArrayList<>(); int index = 0; while (index < text.length()) { // 优先级1:数字/字母连续组合 if (isDigitOrLetter(text.charAt(index))) { int end = scanDigitOrLetter(text, index); result.add(text.substring(index, end)); index = end; continue; } // 优先级2:量词特殊处理 if (isMeasureWord(text.charAt(index))) { result.addAll(handleMeasureWord(text, index)); continue; } // 优先级3:标准FMM处理 result.addAll(forwardMaxMatch(text.substring(index))); } return result; }

4. 特殊场景处理

(1) 未登录词识别

javaCopy Code

// 未登录词识别流程 private void recognizeUnknownWords(String text) { // 人名识别(姓氏+名字模式) if (isSurname(text.charAt(0)) && text.length() >= 2) { String nameCandidate = text.substring(0, 2); if (isCommonName(nameCandidate)) { addToResult(nameCandidate); return; } } // 机构名识别(后缀词触发) if (text.endsWith("公司") || text.endsWith("大学")) { for (int i = 2; i <= 6; i++) { String orgName = text.substring(0, text.length() - 2 + i); if (isValidOrgName(orgName)) { addToResult(orgName); break; } } } }

(2) 量词组合优化

javaCopy Code

private List<String> handleMeasureWord(String text, int start) { List<String> result = new ArrayList<>(); // 处理 "200万元" 场景 if (start > 0 && Character.isDigit(text.charAt(start - 1))) { String numPart = text.substring(0, start); String measurePart = text.substring(start, start + 1); result.add(numPart); result.add(measurePart); } // 处理 "每个" 场景 else if (start > 0 && text.charAt(start - 1) == '每') { result.add("每" + text.charAt(start)); } return result; }

性能优化技术

1. 词典索引加速


javaCopy Code

// 基于哈希和Trie树的混合索引 public class HybridDictionary { private Map<Character, DictSegment> firstCharMap; // 首字符哈希索引 private DoubleArrayTrie dat; // 双数组Trie树核心 public boolean contains(String word) { // 首字符快速过滤 if (!firstCharMap.containsKey(word.charAt(0))) return false; // 双数组Trie查询 return dat.exactMatchSearch(word) >= 0; } }

2. 内存优化


javaCopy Code

// 字典树节点压缩存储 public class CompressedDictSegment { private char[] childrenChars; // 子节点字符数组 private short[] childrenIndex; // 子节点索引 public DictSegment getChild(char c) { // 二分查找定位子节点 int idx = Arrays.binarySearch(childrenChars, c); if (idx >= 0) { return allNodes[childrenIndex[idx]]; } return null; } }

3. 多线程安全


javaCopy Code

// 读写锁保护词典更新 private final ReentrantReadWriteLock dictLock = new ReentrantReadWriteLock(); public void updateDictionary() { dictLock.writeLock().lock(); try { // 创建新词典版本 HybridDictionary newDict = loadNewDict(); // 原子切换引用 currentDict = newDict; } finally { dictLock.writeLock().unlock(); } } public List<String> segment(String text) { dictLock.readLock().lock(); try { return doSegmentation(text); } finally { dictLock.readLock().unlock(); } }

实际应用效果

分词质量对比

语句IK分词结果普通分词器结果
乒乓球拍卖完了[乒乓球拍, 卖, 完了][乒乓球, 拍卖, 完了]
我爱北京天安门[我, 爱, 北京, 天安门][我, 爱, 北京, 天安, 门]
区块链技术很火[区块链, 技术, 很火][区块, 链, 技术, 很火]

性能基准测试


textCopy Code

测试文本:100万字中文新闻语料 测试环境:4核CPU/8GB内存 | 分词器 | 耗时 | 内存占用 | 准确率 | |---------------|---------|----------|--------| | IK Smart Mode | 3.2s | 350MB | 98.7% | | IK Max Mode | 4.1s | 380MB | 99.2% | | 其他中文分词器 | 5.8s+ | 500MB+ | 95-97% |

扩展应用场景

1. Elasticsearch集成


jsonCopy Code

PUT /my_index { "settings": { "analysis": { "analyzer": { "ik_analyzer": { "type": "custom", "tokenizer": "ik_max_word" } } } } }

2. 实时热词发现


javaCopy Code

// 动态学习新词 public void detectNewWords(List<String> documents) { // 1. 统计连续字组合频率 Map<String, Integer> ngramStats = new HashMap<>(); for (String doc : documents) { for (int i = 0; i < doc.length() - 1; i++) { String bigram = doc.substring(i, i + 2); ngramStats.put(bigram, ngramStats.getOrDefault(bigram, 0) + 1); // 三字词、四字词同理 } } // 2. 过滤低概率组合 ngramStats.entrySet().removeIf(entry -> entry.getValue() < THRESHOLD); // 3. 互信息计算筛选 for (String term : ngramStats.keySet()) { double mi = calculateMutualInformation(term); if (mi > MI_THRESHOLD) { addToExtendDict(term); // 加入扩展词典 } } }

演进方向与未来发展

1. 深度学习融合


pythonCopy Code

# 基于BERT的消歧模型 def disambiguate_with_bert(sentence, candidates): inputs = tokenizer(sentence, return_tensors="pt") outputs = model(**inputs) # 计算每个候选分词的得分 scores = [] for cand in candidates: start_idx, end_idx = find_position(cand) embedding = outputs.last_hidden_state[0, start_idx:end_idx].mean() scores.append(embedding) return candidates[torch.argmax(scores)]

2. 领域自适应


javaCopy Code

// 动态领域词典加载 public void loadDomainDictionary(String domain) { // 加载领域专用词典 DictSegment domainDict = loadDict("/dict/" + domain + ".dic"); // 创建领域感知分词器 this.domainAwareSegmenter = new HybridSegmenter( MAIN_DICT, domainDict, // 领域词典优先 EXTEND_DICT ); }

IK分词器通过‌词典管理+规则引擎+上下文优化‌三层架构,在保持高性能的同时实现了精准的中文分词。未来将通过与深度学习的结合,进一步提升对新兴语言现象和复杂语义的处理能力,成为中文NLP处理不可或缺的基础设施。

elasticsearch学习(六):IK分词器 IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始IKAnalyzer已经推出 了3个大版本。最初,它是以开源项目Lucene为应用主体的,结合词典分词和文法分析算法的中文分词组件。新版本的IKAnalyzer3.0则发展为 面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。1)采用了特有的“正向迭代最细粒度切分算法“,具有60万字/秒的高速处理能力。 阅读详情

相关推荐

ES安装中文IK分词器

ik分词器安装

yangkei 7133

IK分词器详解

IK分词器详解

MrWangisgoodboy的博客 3463

解决springboot+ellasticsearch+ik分词器,其中ik分词器无法添加到mapping节点问题

1.ellasticsearch添加IK分词器插件 打开网址,我们在使用分词器的时候一定要 使用与elasticsearch版本相同的分词器,对应官网下载地址为IK下载地址,下载解压以后,在elasticsearch的plugins下新建ik文件夹,将下载的ik解压到ik文件下里面即可。 2.用head插件,查看ik分词器是否起作用 我们重启elasticsearch.bat服务,在head页面复...

Z__Sheng的博客 2307

ElasticSearch之IK分词器

IK分词器:IK分词器由林良易在2006年开源发布,采用正向迭代最细粒度切分算法。它的特点是性能高,但自2012年以后不再维护,后续由其他开发者进行升级和维护。IK分词器的使用:IK分词器常用于中文分词,特别是在与Elasticsearch(简称ES)结合时,能够提供较好的分词效果。分词是倒排索引中不可或缺的一部分,尤其是在中文处理上,IK分词器提供了非常高效的分词功能。IK分词器的两种模式分别适合不同的场景,ik_smart适用于一般分词需求,而适用于细粒度分词。

2301_80093566的博客 2675

【Elasticsearch】内置分词器和IK分词器

Elasticsearch是一个基于Lucene的分布式、RESTful风格的搜索和数据分析引擎。它旨在快速地存储、搜索和分析大量的数据,被广泛应用于各种领域,如日志分析、电商搜索、企业内容管理等。Elasticsearch的核心优势在于其分布式架构,能够处理PB级别的数据,并提供高可用性和可扩展性。它通过将数据分片存储在多个节点上,实现数据的并行处理和容错能力。同时,提供了简单易用的,方便开发者进行数据的索引搜索和管理。

在技术的广袤天地里,本博客如精准罗盘。剖析前沿科技,深掘代码奥秘,以精炼笔触,带您穿越复杂技术迷宫,速达知识彼岸。 5993

OriginPro实战:5步搞定碳材料拉曼光谱D峰G峰分析(附完整数据处理流程)

本文详细介绍了使用OriginPro进行碳材料拉曼光谱D峰G峰分析的完整流程,涵盖数据预处理、多图层可视化、高精度分峰拟合等关键步骤。特别针对材料科学研究中的基线漂移、多峰重叠等问题提供专业解决方案,帮助研究者快速完成从原始数据到科研级图表的全流程分析,提升碳材料表征效率与准确性。

vodka的博客 942

Elasticsearch教程(35) ik中文分词器+pinyin拼音分词器+同义词

ik分词器+pinyin分词器+同义词 股票名称搜索

Java Spring Elasticsearch 4988

高斯投影坐标正反算算法(python)

高斯坐标正反算算法,在正算的时候,y的第一个数字表示是用几度带换算的,第二个数字和第三个数字表示带号。该程序是根据武汉大学出版社出版的第三版的《大地测量学基础》编写, 用于课程实验学习。

weixin_64338372的博客 4586

elasticsearch中IK分词器

分词器的作用是什么?创建倒排索引时,对文档分词用户搜索时,对输入的内容分词IK分词器有几种模式?ik_smart:智能切分,粗粒度:最细切分,细粒度IK分词器如何拓展词条?如何停用词条?利用config目录的文件添加拓展词典和停用词典在词典中添加拓展词条或者停用词条。

m0_68597716的博客 1587

S32K3 eMIOS使用介绍(PWM输出与输入捕获)——基于MCAL

本文基于 S32K3xx系列芯片、S32 Design Studio for S32 Platform开发平台以及EB tresos 28.0.0、 MCAL层,介绍pwm的输出及输入捕获。

HeFlyYoung的博客 2万+

ros2 humble中使用realsense t265与d435

前提,安装realsense SDK 2.51.1版本并且能成功启动realsense-viewer V2.51.1想要在ros2中使用realsense t265,必须配合realsense SDK v2.51.1使用realsense-ros 4.51.1版本,因为新版本realsense ros2不再对t265支持下面记录源码编译安装 realsense-ros 4.51.1版本。

m0_72797388的博客 952

ElasticSearch——IK分词器的下载及使用

ElasticSearch——IK分词器的下载及使用 1、什么是IK分词器 ElasticSearch 几种常用分词器如下: 分词器 分词方式 StandardAnalyzer 单字分词 CJKAnalyzer 二分法 IKAnalyzer 词库分词 分词∶即把一段中文或者别的划分成一个个的关键字,我们在搜索时候会把自己的信息进行分词,会把数据库中或者索引库中的数据进行分词,然后进行一个匹配操作,默认的中文分词是将每个字看成一个词,比如“我爱中国"会被分为"我"“爱”“中”"国”

万里顾一程的博客 3万+

面向网络攻击行为可视化分析系统实现【WebSocket + 可视化】

本系统主要应用于网站运维管理,它解决了网站运维人员排查网络攻击行为复杂且繁琐等问题,提高了运维人员网络安全分析的效率和准确性。

oNew_Lifeo的博客 1620

【Elasticsearch系列十八】Ik 分词器

自己建立词库:每年都会涌现一些特殊的流行词,网红,蓝瘦香菇,喊麦,鬼畜,一般不会在 ik 的原生词典里自己补充自己的最新的词语,到 ik 的词库里面IKAnalyzer.cfg.xml:ext_dict,创建 mydict.dic。补充自己的词语,然后需要重启 es,才能生效自己建立停用词库:比如了,的,啥,么,我们可能并不想去建立索引,让人家搜索custom/ext_stopword.dic,已经有了常用的中文停用词,可以补充自己的停用词,然后重启 es。

优快云站内信: https://i.youkuaiyun.com/#/msg/chat/qyj19920704 2万+

【YOLO11改进 - 特征融合】利用Hyper-YOLO 的混合聚合网络(MANet)改进yolo11,提升基础网络的特征提取能力

【YOLO11改进 - 特征融合】利用Hyper-YOLO 的混合聚合网络(MANet)改进yolo11,提升基础网络的特征提取能力

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 904

【图像超分】论文复现:Pytorch实现ESPCN

论文精读:由于ESPCN没有公布源码,我们选择github上一个高star的项目来复现。准备数据集,以及数据预处理搭建网络模型设置参数并训练测试训练好的模型用训练好的模型测试自己的数据本文我们使用pycharm链接服务器训练。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 1万+

分词器以及ik中文分词器

文章目录分词器以及ik中文分词器概念ik分词器的安装环境准备设置jdk环境变量下载maven安装包并解压设置path验证maven是否安装成功下载IK分词器并安装使用IK分词器查询文档term词条查询match全文查询 分词器以及ik中文分词器 概念 ik分词器的安装 因为es自带的分词器对英文非常友好,但是对中文很不友好,所以我们需要安装一个ik分词器。 特点 ​ IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包; ​ 是一个基于Maven构建的项目; ​ 具有6

xzy的博客 5262

vs2017配置liblas库+测试代码

之前已经配置好pcl(vs2017配置pcl),可以单独配置liblas,也可以在原有pcl属性表的基础上继续配置

孙悟空 4023

什么是IK分词器

我们在浏览器地址栏输入http://127.0.0.1:9200/_analyze? analyzer=chinese&pretty=true&text=我是程序员,浏览器显示效果如下 { "tokens" : [ { "token" : "我", "start_offset" : 0, "end_offset" : 1, "type" : "", "position" : 0 ...

L__MY的博客 3420

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

IK分词器下载、使用和测试

对于Win10x86、Ubuntu环境均适用~1.下载为什么要使用IK分词器呢?最后面有测评~访问:https://github.com/medcl/elasticsearch-analysis-ik/releases,找到与自己的ES相同的版本, 可以下载源码,然后自己编译,也可以直接下载编译好的压缩包,比如我这里是5.4.0版本:如果选择下载源码然后自己编译的话,使用maven进行编译: 在

gxx_csdn的博客 2万+

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

ElasticSearch 学习8 :ik分词器的扩展,及java调用ik分词器的analyzer

上篇已经说过ik的集成,这篇说下ik的实际使用。

zhaofuqiangmycomm的博客 4406
上一篇: kafka消费顺序保障
下一篇: HDFS核心角色
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值