前言仅代表个人观点
不会谈恋爱,是部分人都面临的问题,其实矛盾的诞生,源自于你读不懂对方当前的话语背后的情绪,其实标题也可以是你和上司(不要跑偏)。
其实这一篇,我本来不想写的,聊聊容器它不香吗,OK,我不全是为了流量,头发都薅掉不少。
回归正题,目前大模型、机器学习风头正盛,对于我们正常打工人来说,离得远,也不远。你可能早已听说,但如果让你来做,无从下手,什么?先买 1000 张 RTX 5000 显卡吗?
所以本篇,简单讲讲我是如何基于神经网络实现情绪分析的。
大家可以一起训练模型,造福更多人
别划走,OK,先看效果,
Eclipse Deeplearning4j
- 是一套用于在 JVM 上运行深度学习的工具。它是唯一一个允许您从 java 训练模型,同时通过我们的 cpython 绑定、模型导入支持以及其他运行时
- (例如 tensorflow-java 和 onnxruntime)的互操作混合执行 python 与 python 生态系统进行互操作的框架。
hanNLP
- 中国人民大学自然语言处理与社会人文计算实验室开发和维护。它提供了一系列中文文本处理的功能,包括分词、词性标注、命名实体识别、依存句法分析等。
情感分析适用算法
- 朴素贝叶斯
- 支持向量机
- 决策树
- 随机森林
- 深度学习模型
(这些都太麻烦了,我这里采用 多层感知 (MLP)算法 实现)
数据太少了,如果有 1000 万 ,就可以预测 八九不离十了
嗯,敷衍
没事,敷衍
嗯嗯,敷衍
还行吧,敷衍
没意思,敷衍
我要睡了,敷衍
早上好,正常
中午好,正常
晚上好,正常
我刚吃了午饭,正常
肚子饿了,正常
我在开会,正常
哈哈哈哈哈,开心
嘿嘿,开心
发工资啦,开心
吃好吃去,开心
吃火锅去,开心
我被踩了一脚,愤怒
明天要加班,愤怒
今天迟到了,愤怒
老板是傻子,愤怒
讨厌,开心
你真讨厌,开心
我讨厌你,愤怒
大坏蛋,开心
汉语博大精深
public static List<String> segment(String sentence) {
List<Term> termList = HanLP.segment(sentence);
List<String> tokens = new ArrayList<>();
for (Term term : termList) {
tokens.add(term.word);
}
return tokens;
}
private static INDArray sentenceToFeatures(List<String> tokens, int uniqueTokensSize, int embeddingSize) {
INDArray features = Nd4j.create(1, uniqueTokensSize * embeddingSize);
for (String token : tokens) {
int index = hashFunction(token) % (uniqueTokensSize * embeddingSize);
features.putScalar(index, 1.0);
}
return features;
}
构建一个多层感知模型并定义神经网络层级
.layer(new DenseLayer.Builder()
.nIn(uniqueTokens.size() * embeddingSize)
.nOut(128)
.weightInit(WeightInit.XAVIER)
.activation(Activation.RELU)
.build())
.layer(new OutputLayer.Builder(LossFunctions.LossFunction.NEGATIVELOGLIKELIHOOD)
.nIn(128)
.nOut(numClasses)
.weightInit(WeightInit.XAVIER)
.activation(Activation.SOFTMAX)
.build())
从数据中提取到特征,并塞入模型进行训练,最后分析模型准确度,对算法或模型层级进行微调
========================Evaluation Metrics========================
# of classes: 5
Accuracy: 0.4400
Precision: 0.4929 (1 class excluded from average)
Recall: 0.4244 (1 class excluded from average)
F1 Score: 0.5079 (2 classes excluded from average)
Precision, recall & F1: macro-averaged (equally weighted avg. of 5 classes)
Warning: 1 class was never predicted by the model and was excluded from average precision
Classes excluded from average precision: [1]
Warning: 1 class was never predicted by the model and was excluded from average recall
Classes excluded from average recall: [3]
=========================Confusion Matrix=========================
0 1 2 3 4
-----------
3 0 3 5 2 | 0 = 0
0 0 1 0 0 | 1 = 1
0 0 4 0 1 | 2 = 2
0 0 0 0 0 | 3 = 3
0 0 2 0 4 | 4 = 4
Confusion matrix format: Actual (rowClass) predicted as (columnClass) N times
==================================================================
大致意思就是,一共有 5 个指标,模型准确率只有 0.4 也就是 44 % (完全是样本不足)
期间需要关注混淆矩阵,可以告诉你每个类被预测到目标类的情况,然后结合实际情况进行调整
这只是机器学习中深度学习内最基础的神经网络,你可以感受到它的魅力吗?
关注公众号并回复源码,即可获取到本程序源码。
祝你好运。