#Machl #AI 非常希望去学习一些自然语言处理和机器学习相关的技术
至于面向 Compiler 技术向的解析技术,我也不甚了解,我没写过 ANTLR,不知道 LALR、LL、LR 解析算法是怎么执行的,不知道自底向上分析和自底向下推导的区别,不了解 PCRE Regex 匹配算法,不清楚 infix operator 们的优先级和结合性的问题,
#parser #NLP 至于自然语言处理(NLP),我发现因为可能是考虑过一个比较有幼稚 niave 的梦想『Semic 机器人』的原因,我对结构化自然语言还有点直觉
但是我不是特别了解自然语言,也不了解音标记法(当然不是一个层面的东西)
我觉得这个可以考虑多去分析一些小说什么的来提升
至于机器学习,我看过冰封他学姐写的博文,虽然因为我完全没有 ANN(人工神经网络)和机器学习的基础(其实我有一点 KNN 回归量化评估分析的基础,《算法图解》看的)(数学上,我们最近高二也在上回归,不过和 KNN 那种简单的回归而不是函数回归没有特别大的关系)
理解非常的困难,我不知道啥是 Layer、不知道啥是导数、不知道啥是反向传播啥是 bootstrap 函数,但幸亏我有函数式的基础,所以
(事实是,很多(尤其是对于一些比较 trivial 的业务范围,比如 #Android 开发和 #Web 前端来说)工业界的程序员压根不能理解 FP 范式的一些东西,或者使用的理解式变通太多了,以至于直觉不太好)
比如说这个 Haskell 里一些 function 扩展和 Monad 们的 Kotlin 版本,大家可以看看自己看不看得懂(挫败感?
想必很多不是特别熟悉 Kotlin,而只是把 Kotlin 写成 Java (甚至 Java 7 而不是 8)的程序员要开始烧脑一战了(
至于面向 Compiler 技术向的解析技术,我也不甚了解,我没写过 ANTLR,不知道 LALR、LL、LR 解析算法是怎么执行的,不知道自底向上分析和自底向下推导的区别,不了解 PCRE Regex 匹配算法,不清楚 infix operator 们的优先级和结合性的问题,
infixl infilr
傻傻分不清(几乎)#parser #NLP 至于自然语言处理(NLP),我发现因为可能是考虑过一个比较有幼稚 niave 的梦想『Semic 机器人』的原因,我对结构化自然语言还有点直觉
但是我不是特别了解自然语言,也不了解音标记法(当然不是一个层面的东西)
我觉得这个可以考虑多去分析一些小说什么的来提升
至于机器学习,我看过冰封他学姐写的博文,虽然因为我完全没有 ANN(人工神经网络)和机器学习的基础(其实我有一点 KNN 回归量化评估分析的基础,《算法图解》看的)(数学上,我们最近高二也在上回归,不过和 KNN 那种简单的回归而不是函数回归没有特别大的关系)
理解非常的困难,我不知道啥是 Layer、不知道啥是导数、不知道啥是反向传播啥是 bootstrap 函数,但幸亏我有函数式的基础,所以
fun Scale(d: Weight) = { lf: LossFunction -> { w: Weight -> d * lf(w) } }
这种 FP 风格的 #Kotlin 代码我至少还不至于看不懂,给我尝试去理解这类玩意创造了一个最基本的条件 — 如果你连别人说啥都搞不懂,怎么 get 得到知识点呢?(事实是,很多(尤其是对于一些比较 trivial 的业务范围,比如 #Android 开发和 #Web 前端来说)工业界的程序员压根不能理解 FP 范式的一些东西,或者使用的理解式变通太多了,以至于直觉不太好)
比如说这个 Haskell 里一些 function 扩展和 Monad 们的 Kotlin 版本,大家可以看看自己看不看得懂(挫败感?
fun <T : Any> T?.toMaybe() = this?.let(::Some) ?: None
尤其是最后那个 #FP CoinductiveList,我也是最近才理解,而这个 fibonacci Sequence 才是最骚的(也很能体现一个 CS lover 的水平 — 你究竟只能算是『工程师』还是能算是『爱好者』呢?):fib = 1 : 2 : zipWith (+) fib (tail fib)(这里是有限构造的 List,不是 Coinductive 的,虽然 Haskell 是 Built-in Laziness 所以可以当成是 Coinductive 的,对应到 Kotlin 就是 Kotlin std 的 Sequence)
Prelude> take 10 fib
[1,2,3,5,8,13,21,34,55,89]
-- 数学定义
fib' 1 = 1
fib' 2 = 2
fib' n = fib (n - 1) + fib (n - 2)
想必很多不是特别熟悉 Kotlin,而只是把 Kotlin 写成 Java (甚至 Java 7 而不是 8)的程序员要开始烧脑一战了(
GitHub
ice1000/Ruiko.kt
Kotlin version of Ruiko.fs. Contribute to ice1000/Ruiko.kt development by creating an account on GitHub.
Forwarded from duangsuse Throws
#life #dev duangsuse 落实 10:30 准时睡觉『政策』。 🐱
考虑到健康原因(不让自己的努力白费),每晚 10:30(h:m) 必须立即睡觉
== duangsuse::Echo 参考 #Telegram hashtags
duangsuse::Echo 常年利用 hastags 标记消息所含知识领域,并且,这也会为未来 Echo 频道进行简单准确的数据统计带来可能(不然,我也有其他手段,比如 NLP、统计预测)
以下是新的标签实例(不区分大小写、不能保证消息只含这些标签):
== 消息平台部分
#Telegram #zhihu #Github #so #Coolapk #book #wiki
== 注释部分
#life #China #School #Statement #lib #recommended #low #fix
#project #blog #share #Learn #paper
#dev #tech #art #meetUp #conference
#Moha #Haha
#gnu
#Microsoft #Mozilla #WeChat #QQ #Weibo #Tencent #Baidu #Ali #Qihoo
#tools #code
== 程序设计语言部分
#Kotlin #Java #JavaScript #JavaScript_ES6 #TypeScript
#Rust #Go #Swift #Dart #Crystal
#Ruby #Python #Perl #Tcl #Lua #PHP
#C #D #Cplusplus #CSharp #Objc
#Pascal #Fortran #Delphi #Ada #Basic #VisualBasic
#Scheme #Haskell #Scala #Clojure
#TeX #Graphviz
#Octave #Matlab
#Shell
(有些写出来是为了鼓励我去写,其实不一定真的写过)
== 软件平台部分
#Android #Windows #Win32 #MacOS #Java #Java_JVM #CLR #Qt #GTK #Tk #WxWidgets
#CSS #XML #JSON #KDE #Postgres #dotnet
== 软件技术领域部分
#backend #sysadmin #frontend #sysadmin_net
#OI #CS #IT #Informatics
#stat #ann #ann_dnn #machl
#math #math_linearAlgebra #math_discrete
#se #se_dia #se_ci #se_ee
#comm #net #www #web #http #html #mail #wireless
#circuit #embedded #os #db #db_relAlgebra #SQL
#bin #encoding #encoding_audio #encoding_image #encoding_video #encoding_text
#hpc #parallelism #distributed #simd #gpgpu #crypto
#pl #pl_plt #ce_vee #ce #ce_optimize #fp_monad #fp_proof #fp #oop #oop_arch #sp #parser
#algorithm #struct #lists #maps #sets
#security #security_lowlevel
#signalProc #nlp #phonetic
#cg #cg_dip #cg_3d #cg_2d #cg_lowlevel
#gui #gui_animation #gui_layouts #cli #visualization
考虑到健康原因(不让自己的努力白费),每晚 10:30(h:m) 必须立即睡觉
== duangsuse::Echo 参考 #Telegram hashtags
duangsuse::Echo 常年利用 hastags 标记消息所含知识领域,并且,这也会为未来 Echo 频道进行简单准确的数据统计带来可能(不然,我也有其他手段,比如 NLP、统计预测)
以下是新的标签实例(不区分大小写、不能保证消息只含这些标签):
== 消息平台部分
#Telegram #zhihu #Github #so #Coolapk #book #wiki
== 注释部分
#life #China #School #Statement #lib #recommended #low #fix
#project #blog #share #Learn #paper
#dev #tech #art #meetUp #conference
#Moha #Haha
#gnu
#Microsoft #Mozilla #WeChat #QQ #Weibo #Tencent #Baidu #Ali #Qihoo
#tools #code
== 程序设计语言部分
#Kotlin #Java #JavaScript #JavaScript_ES6 #TypeScript
#Rust #Go #Swift #Dart #Crystal
#Ruby #Python #Perl #Tcl #Lua #PHP
#C #D #Cplusplus #CSharp #Objc
#Pascal #Fortran #Delphi #Ada #Basic #VisualBasic
#Scheme #Haskell #Scala #Clojure
#TeX #Graphviz
#Octave #Matlab
#Shell
(有些写出来是为了鼓励我去写,其实不一定真的写过)
== 软件平台部分
#Android #Windows #Win32 #MacOS #Java #Java_JVM #CLR #Qt #GTK #Tk #WxWidgets
#CSS #XML #JSON #KDE #Postgres #dotnet
== 软件技术领域部分
#backend #sysadmin #frontend #sysadmin_net
#OI #CS #IT #Informatics
#stat #ann #ann_dnn #machl
#math #math_linearAlgebra #math_discrete
#se #se_dia #se_ci #se_ee
#comm #net #www #web #http #html #mail #wireless
#circuit #embedded #os #db #db_relAlgebra #SQL
#bin #encoding #encoding_audio #encoding_image #encoding_video #encoding_text
#hpc #parallelism #distributed #simd #gpgpu #crypto
#pl #pl_plt #ce_vee #ce #ce_optimize #fp_monad #fp_proof #fp #oop #oop_arch #sp #parser
#algorithm #struct #lists #maps #sets
#security #security_lowlevel
#signalProc #nlp #phonetic
#cg #cg_dip #cg_3d #cg_2d #cg_lowlevel
#gui #gui_animation #gui_layouts #cli #visualization
duangsuse::Echo
其实虽然对于计算机视觉来说,肯定是比简单的计算机图形学生成算法要耗时的 但是可以考虑有一些算法低劣的 spam bot,没有自动生成图片,沿用老图片在,所以可以保存已经判断为 spam 的图片 hashcode 再发封禁 再不济一点,可以找一下有没有图像的 SimHash 实现,先对比图片像素大小,完全等同就对比哈希码,类似就认为是 spam 图片,或者让机器人自动收集所有是 spam 的图片使用机器学习找出其中类似的像素簇、然后按大小模糊判定再加权回归,是个比执行 OCR 算法要好的方案或许吧(考虑到很少有…
因为我也不是机器学习和计算机图形学、信息学、密码学领域的人 #machl #ann #cg ....
自然语言处理我也是正在想办法准备学
所以我只好看看关键字匹配... 发现的确就是分词算法啊
https://github.com/CNBlackListR/CNBlackListSoamChecker/blob/aa281efd716a8c11876d755868125cd117aa38cb/CommandObject/SpamMessageChecker.cs#L37
简而言之,spam 打分算法就是接受 SpamMessage 配置和目标判断消息,返回 possibility 值的函数
这个关键字匹配算法虽然优化过,不过也是『简单』算法,因为它还是得判断 n 次加权(一个关键字判断一次,不能扫描一遍消息一起判断了)
具体的匹配算法就是:
如有字符串 "abcde" 关键字列表 [(1, "a"), (2, "de")]
这里要的是匹配,比如我们有字符串
a "hello fish sea world" 和 b "fish"
要判断 b 在 a 里出现了几次,我们可以这样:
枚举 a 里的索引『i』且『i + (b 的长度)小于 a 的长度』(就是所有 b 可能和 a 的某个子序列匹配的索引们)
对于所有 b 里的字符
如果『该字符』等于『a 枚举到的字符』继续判断
假如已经枚举到了最后一个字符,则匹配成功
否则 打断循环,跳过当前字符串的长度 — 我们只需要判断一个字符串,前面的索引 n 都不匹配后面的 x > n 匹配也没有用, skip 掉
好吧,如果你觉得上面的还是难于理解,那么这是一种算法:
它是从这里,Line range 47-75 抽提出来的一种字符序列匹配算法
它有两个输入,String str 和 String part、一个输出,int,返回 str 中 part 子序列的个数
比如 str = "12345ab3243ab..23ab", part = "ab" 输出 3
显然,它要计数数目、检查 str 和 part 相关索引的匹配,有
int count
size si, pi
size matched — 已经匹配的长度
它的逻辑很简单,就是枚举所有 str 和 part 可能重合的索引(str.length - part.length)
(si, pi) =>
再进行
然后得基于当前的 si 位置再进行匹配,如果成功,则 ++count,如果还在判断 ++matched; ++pi; ++si,如果失败 si += (part.length - matched); pi = 0 // 跳过剩余,重新 match
这样碰到显然不是子序列的,直接跳过就好。
如果你还是无法理解,我正在做动态图....
自然语言处理我也是正在想办法准备学
所以我只好看看关键字匹配... 发现的确就是分词算法啊
https://github.com/CNBlackListR/CNBlackListSoamChecker/blob/aa281efd716a8c11876d755868125cd117aa38cb/CommandObject/SpamMessageChecker.cs#L37
简而言之,spam 打分算法就是接受 SpamMessage 配置和目标判断消息,返回 possibility 值的函数
这个关键字匹配算法虽然优化过,不过也是『简单』算法,因为它还是得判断 n 次加权(一个关键字判断一次,不能扫描一遍消息一起判断了)
具体的匹配算法就是:
如有字符串 "abcde" 关键字列表 [(1, "a"), (2, "de")]
foreach kw in kws
if strstr(snd kw, mesg) > 0: points +=
fst kw
而 strstr 是 libc 里的一个字符串搜索子串函数这里要的是匹配,比如我们有字符串
a "hello fish sea world" 和 b "fish"
要判断 b 在 a 里出现了几次,我们可以这样:
枚举 a 里的索引『i』且『i + (b 的长度)小于 a 的长度』(就是所有 b 可能和 a 的某个子序列匹配的索引们)
对于所有 b 里的字符
如果『该字符』等于『a 枚举到的字符』继续判断
假如已经枚举到了最后一个字符,则匹配成功
否则 打断循环,跳过当前字符串的长度 — 我们只需要判断一个字符串,前面的索引 n 都不匹配后面的 x > n 匹配也没有用, skip 掉
好吧,如果你觉得上面的还是难于理解,那么这是一种算法:
它是从这里,Line range 47-75 抽提出来的一种字符序列匹配算法
它有两个输入,String str 和 String part、一个输出,int,返回 str 中 part 子序列的个数
比如 str = "12345ab3243ab..23ab", part = "ab" 输出 3
显然,它要计数数目、检查 str 和 part 相关索引的匹配,有
int count
size si, pi
size matched — 已经匹配的长度
它的逻辑很简单,就是枚举所有 str 和 part 可能重合的索引(str.length - part.length)
(si, pi) =>
再进行
str.subseq[si..].startWith(part)
判断然后得基于当前的 si 位置再进行匹配,如果成功,则 ++count,如果还在判断 ++matched; ++pi; ++si,如果失败 si += (part.length - matched); pi = 0 // 跳过剩余,重新 match
这样碰到显然不是子序列的,直接跳过就好。
如果你还是无法理解,我正在做动态图....
GitHub
CNBlackListR/CNBlackListSoamChecker
Contribute to CNBlackListR/CNBlackListSoamChecker development by creating an account on GitHub.
duangsuse::Echo
唉,没用的,只有讨论那些有前途的工程技术才可能有人看,我这种人.... 呃.... 你们懒得看。 什么 C 啊、Haskell 啊、编译器啊、静态分析静态检查啊、关系代数啊,算法啊、操作系统啊、软件工程理论啊.... 如果只是作为『赠品』都是浮云 流行的就是那么一点,一招鲜吃遍天,开始的专业得选流行的做才好。 我以后要是上大学,不管专科本科,就和 drakeet 一样,我要学开发,写应用。 偶尔写点好玩点的库什么的... 虽然应用层真的是水浅... 真的就是无脑的堆积,没意思的复制抄改.... 离了网络不能编程...…
Forwarded from duangsuse
说到 Spam 自动分类,除开自然语言处理模式识别这种重量级算法,最好用的就是 Naive Bayes Classifier 了,不过这是一种机器学习算法,我自己也只是会 KNN 机器学习推荐系统而已...
https://zh.wikipedia.org/wiki/%E6%9C%B4%E7%B4%A0%E8%B4%9D%E5%8F%B6%E6%96%AF%E5%88%86%E7%B1%BB%E5%99%A8#%E6%96%87%E6%9C%AC%E5%88%86%E7%B1%BB
反正说到机器学习和人工智能,没有一个是简单的,唉... 😢 #machl
https://zh.wikipedia.org/wiki/%E6%9C%B4%E7%B4%A0%E8%B4%9D%E5%8F%B6%E6%96%AF%E5%88%86%E7%B1%BB%E5%99%A8#%E6%96%87%E6%9C%AC%E5%88%86%E7%B1%BB
反正说到机器学习和人工智能,没有一个是简单的,唉... 😢 #machl
Wikipedia
Naive Bayes classifier
In statistics, naive Bayes classifiers are a family of linear "probabilistic classifiers" which assumes that the features are conditionally independent, given the target class. The strength (naivety) of this assumption is what gives the classifier its name.…
#Machl #DIP https://github.com/zhiying8710/geetest_crack
发现了好东西。
= Geetest 是一种「验证不是机器人」(I'm not a robot, captcha)(验证码) 系统,基于「挑战」式检验
基于「生成歪七扭八的数据很容易,让机器恢复它们很难」的「事实?」设计
G2 是移动滑块的验证,用简单卷积识别应该可做
G3 第一部分是纯逻辑(不含「非精确的计算」)验证,直接可做
也可能是 G2 的滑块,通过率都是 99% (OpenCV) #CV
G4 是找七扭八扭又歪的汉字,需要 YOLO3 定位、CNN 识别汉字、CRNN 校验识别正确性
G5 也是一样,加个字典按照「语序」单词顺序就可以了
发现了好东西。
= Geetest 是一种「验证不是机器人」(I'm not a robot, captcha)(验证码) 系统,基于「挑战」式检验
基于「生成歪七扭八的数据很容易,让机器恢复它们很难」的「事实?」设计
G2 是移动滑块的验证,用简单卷积识别应该可做
G3 第一部分是纯逻辑(不含「非精确的计算」)验证,直接可做
也可能是 G2 的滑块,通过率都是 99% (OpenCV) #CV
G4 是找七扭八扭又歪的汉字,需要 YOLO3 定位、CNN 识别汉字、CRNN 校验识别正确性
G5 也是一样,加个字典按照「语序」单词顺序就可以了
GitHub
GitHub - zhiying8710/geetest_crack: geetest极验二代滑动、三代滑动和汉字点选破解
geetest极验二代滑动、三代滑动和汉字点选破解. Contribute to zhiying8710/geetest_crack development by creating an account on GitHub.