正则表达式笔记

操作

compile

  • compile 常用的表达式更高效:使用编译的表达式能避免高速缓存查找开销,将编译工作转移到应用程序启动时,而不是程序响应用户操作

  • 在字符串前加个 r 反斜杠就不会被任何特殊方式处理

  • re.findall(rf'{t}', s): f 表示 t 可以使用变量
  • re.compile(pattern, re.IGNORECASE): IGNORECASE 忽略大小写
  • re.compile(pattern, re.MULTILINE): 是否按行匹配,带参数按行,不带参数整个字符串为整体(不考虑换行符)
  • re.compile(pattern, re.DOTALL): 默认不匹配换行符,带参数匹配换行符
  • re.compile(pattern, re.Unicode | re.VERBOSE): 让 pattern 看起来更易读。多个标志可以通过按位 OR-ing 它们来指定。如 re.I | re.M 被设置成 I 和 M 标志
  • 嵌入标志(编译表达式无法添加标志时,可以在表达式字符串本身内嵌入标志)
    • 打开不区分大小写匹配项: (?i) 添加到 pattern 的最前面就好
    • i: IGNORECASE; m: MULTILINE; s: DOTALL; u: UNICODE; x: VERBOSE

More

随笔:人生,当有所为有所不为

是夜,阴沉天空,淅淅沥沥的小雨,落到了地上,没入了尘埃。
空旷的房间,通明的白织灯下,桌上一罐哈啤,一罐纯净水,耳边响着最爱的史诗乐。
回想近日之事,一时竟感慨万千,内心色彩斑斓。

人的一生会遇到许许多多的事,会交到许许多多的朋友,你永远无法预测明天会发生什么,下一秒将会认识谁。但是,总有些事、总有些人,会让你的人生泛起涟漪、波澜。
有些事,能让你认清一个人;有些人,能让你知道一件事。

我们生活在这个世界,物欲横流、欲壑难填。
每个人都想任性地活,想要想尽一切办法满足自己不断膨胀的私欲。
我们以为这是自由,这是活出自己,这是人生的精彩。
但却忘记了什么是责任,什么是担当,什么是本分。
忘记了克己修身,忘记了每日三省,忘记了拷问良心。也许从未有过。

任性过后,还剩下什么?还能剩下什么?
人生在世,当有所为有所不为,大丈夫立于天地间更应如此。
忍让不是天生懦弱,关心不是精力过剩,
然而我们总是看不到这些或者习惯了如此,一次次用所谓的个性去刺向那呵护着自己的外壳。
人性本如此。

感受周边人群,与日俱增的寂寞和空虚,让人不得不想方设法去寻找释放的窗口。
同样寂寞空虚的人遇到了一起,生产出更多的寂寞空虚,以及一些私欲,泛滥成灾。
然后,终日活在这样的世界,通过感官上的各种刺激才知道自己还,活着。

谈使命,说使命太虚;谈梦想,说梦想太空。
浑浑噩噩度过一天一天,一年一年,接着是一生。

做人,该当知轻重,明对错。
然后,去做一个有品性、有道德的人。
这样的你也会是一个三观正、人品赞的人。
扪心自问,你是吗?

后记:发现自己慢慢喜欢上在这种环境下用键盘缓缓抒发自己内心的情感,就好像一篇娓娓道来的故事,好像一副徐徐展开的画卷,好像一首缓缓奏起的乐章。随着文章终了,内心的情感渐渐平复,由内而外不再充满戾气,不再焦躁不安,不再五味陈杂。

自然语言处理(NLP)知识地图

目录

什么是 NLP

计算机领域中自然语言处理(Natural Language Processing: NLP)的目的,就是让计算机能够理解和生成人类语言。

  • 自然语言处理是一门交叉学科,包括计算机科学,人工智能和语言学
  • 目标:让计算机去处理或“理解”自然语言, 完成一些有用的任务例如问答系统,机器翻译
  • 完全理解或者表示语言的意义(甚至去定义它)都是一个虚幻的目标
  • 完美的理解语言是一个“AI-complete”的问题

NLP 有什么用?

  • 拼写检查
  • 同义词查找&替换
  • 文本分类与情感分析
    • 例如对教科书的文本进行分级,对长文本进行正负情绪判断
    • 市场营销或者金融交易领域的情感分析
  • 信息检索与问答系统
  • 关键词、信息提取
    • 从网页中提取有用的信息例如产品价格,日期,地址,人名或公司名等
  • 自动文摘
  • 自动写作
  • 机器翻译
  • 语音翻译
  • 语音识别
  • 人机对话
  • ……

NLP 要学什么

  • 语言学
    • 语言学是研究所有人类语文发展有关的一门学术科目(通常只有根据语言,非文字)。
    • 语言学研究句法和词语等语言的描述,也研究语言的发展史。
  • 语音学
    • 发音语音学
    • 声学语音学
    • 听觉语音学
  • 概率论
    • 贝叶斯
    • 马尔科夫
  • 信息论
    • 香农、熵
  • 机器学习
  • 形式语言与自动机
    • 形式语言包括:短语结构语言、上下文有关语言、上下文无关语言、正则语言等
    • 自动机包括:图灵机、有穷自动机、下推自动机、线性有界自动机
  • 语言知识库
  • 语言模型
    • n 元语法
    • 数据平滑
  • 自动分词、命名实体识别、词性标注
    • 自动分词就是让计算机自动区分出汉字组成的词语
    • 命名实体识别就是分词之后能够根据各种短语形式判断出哪个词表示的是一个物体或组织或人名或……
    • 词性标注就是在给定句子中判定每个词的语法范畴,识别出“名动形、数量代、副介连助叹拟声”
  • 句法分析
    • 确定句子的句法结构或句子中词汇之间的依存关系
    • 句法结构分析
    • 依存关系分析:词与词之间的依存关系
  • 语义分析
    • 词义消歧
    • 语义角色标注
  • 篇章分析
    • 理解篇章
    • 分析篇章结构

深度学习与 NLP

  • 神经网络语言模型
  • 卷积神经网络 CNN
  • 词向量
    • localist representation 与 distributed representation
    • word embedding
  • word2vec
    • 基于霍夫曼树的 Hierarchical Softmax 技术
    • 基于 Negative Sampling 的模型
  • 递归神经网络 RNN
    • LSTM

扩展阅读

参考资料

Python 编码笔记整理

目录

Python 中文编码

Python 中文编码是新人常见的一个问题,其实这是一个涉及到 Python 字符串、编码、IO 读写等方面的问题。

More

Pandas 入门

目录

Pandas 建造在 NumPy 之上,它使得以 NumPy 为中心的应用很容易使用。

由于 Hexo 对 Pandas 输出的表格支持不好,详细内容可点击:http://nbviewer.jupyter.org/github/hscspring/DataScience/blob/master/DataClearing/Pandas.ipynb

参考网站

Ubuntu16.04 安装 VirtualBox & Vagrant 管理 VirtualBox 各种问题总结

Ubuntu 下安装 VirtualBox

注意:

  • 务必要仔细查看用户手册上对系统和必要环境的依赖。
  • 如果 kernel header 不一致,需要更新 kernel:
    • sudo apt-get install linux-headers-generic 或者
    • sudo apt-get install linux-headers-$(uname -r)
      uname -r 等于你的版本内核,比如我的:4.4.0-21-generic
  • 如果不能重装VBox,需要修改BIOS设置:
    • Security 中的 Secure Boot 设置为“Disabled” (一般设置这个就可以了吧)
    • Startup中的 UEFI/Legacy Boot 选 Both
    • Priority 选 Legacy First,CSM Support 选 Yes
      包括类似 Surface Pro,都可以这样操作。
      另外,由于现在的主板很多都带有 UEFI Secure Boot 功能,可能导致使用USB设备启动不了系统。用此方法也可以搞定。
      参考至: 电脑无法从USB启动可能是 UEFI Secure Boot 在捣鬼!

使用 Vagrant 管理 VirtualBox

注意:

1
2
3
4
5
6
$ vagrant package
No usable default provider could be found for your system.

$ vagrant package --base vagrant-ubuntu64
Vagrant has detected that you have a version of VirtualBox installed that is not supported by this version of Vagrant.
Please install one of the supported versions listed below to use Vagrant: 4.0, 4.1, 4.2, 4.3, 5.0

可参考这两个地方:

辛普森悖论及其哲学思考

什么是辛普森悖论

某个条件下的两组数据,分别讨论时满足某种性质,但合并起来可能导致相反的结论。这就是辛普森悖论。

假设某公司考核员工有个指标叫迟到出错率=(迟到次数+出错次数)/(出勤次数+工作个数),包括出错率和迟到率2个指标。
A员工做了5件重要工作,出错1件;
B员工做了100件很简单的小事情,出错21件。
A员工出勤100次,迟到29次,每次1分钟
B员工出勤10次,迟到9次,每次2小时
则:A员工出错率20%,迟到率29%;B员工出错率21%,迟到率90%,如果分别看出错率和迟到率,A员工明显比B员工优秀。
那么实际情况呢:A员工迟到出错率30/105;B员工迟到出错率30/110,B员工评分高于A员工。
这就是辛普森悖论的典型案例。

为什么会出现辛普森悖论

1、用相对比例(百分比)衡量结果。换句话说,用相对坐标去描述绝对坐标的情况。
常见的例子就是百度Google经常能搜出来的录取比例,女生占比等,比如这篇辛普森悖论:诡异的男女比例以及维基百科的例子。这种例子直接用绝对数值去看就可破解悖论。
2、数据本身是由不同部分构成,而这不同部分的权重可能不同。
第1点说的常见的例子,其实就是将不同结构的权重按 1:1 进行分配的结果(即A学院,B学院)。
我们的案例其实也是这样的,我们做个极端的推理,假设迟到率权重为0,则A员工迟到出错率20%,B员工21%,A员工评分高于B员工。
3、除了构成部分本身权重不同外,不同部分的质量也有区别。
其实,到了这里,我们已经慢慢在接近本质了。那就是:质与量的矛盾。我们身处一个“评价系统”中,自然选择和进化论就是评价的结果。
除了我们熟知的各种数据指标外,还包括我们每一个决策和行为。前者结果非常直观,后者则表现为“命运”。所有的结果都是“物竞天择,适者生存”。这个话题到此为止。

所以,其实这是通过量对质进行评价过程中的三个层次:
第一层:也是最外面的那层,是用相对比例(百分比)表示而造成的结果扭曲;这一层是“显示”出(导致)的错误。
第二层:数据不同构成部分“重要性”(权重)不同而造成的结果扭曲;这一层是未考虑“结构”导致的错误。
第三层:每个构成部分数据本身的“重要性”不同而造成的结果扭曲;这一层是未考虑“内容”导致的错误。

综上,我们可以重新定义一下辛普森悖论:
人们在对事物的评价过程中,未考虑每组数据本身的重要性以及不同部分数据的结构的“权重”,并采用相对指标对结果进行描述而造成的对真实结果的扭曲的一类现象。

再扩展一下,上述定义很重要的两个地方:“人们”和“现象”。
就是说,评价是以人的某种需求为中心的,需求不同,观察到的“现象”亦不同。
这是否让我们想起了薛定谔的那只猫?
另外,是什么让“人”进行“评价”?这个过程究竟是有意识的还是无意识的?

结果应用

简单来说,辛普森悖论告诉我们,任何时候不能简单地根据数据结果而轻易得出一些看似确定的结论。真正的结论需要我们对分析目的进行深入思考,对数据本身进行深入细致地探索研究后才有可能得出。

永远对知识充满敬畏。弱小和无知不是生存的障碍,傲慢才是。

可视化

Simpson’s Paradox

《与机器人共舞》读后感兼谈 AI 与 IA

一位高级科技记者:约翰·马尔科夫的大作,从作者的出身我们就可以猜想这本书的大致风格,绝非理工技术男的思维,写出来的也绝不是纯粹理论或实践方面的干货。看完后,基本正如所料。全书主线非常鲜明,但每一部分内部其实有一点凌乱,一会儿是这个人,一会儿又是另一个人,光是那许多英文名字就已经让人头大了。我给本书打 7 分,还有 0.5 送给亲笔签名。

一条主线:AI 与 IA之争→由 AI 转向 IA

从书的标题《与机器人共舞》就可以看出坐着的观点是支持 IA,全书也始终秉持这一观点。曾经二十年左右的沉寂,人工智能被沦为笑柄,随着硬件运算能力提升,神经网络跑出了非常优秀的结果,人工智能在 2014 年重见曙光,一发不可收拾,看起来前景良好。但同时很多专家却非常警惕,将人工智能视为人类最大的威胁;除此之外,还有 “意识” 和 “伦理” 问题,也让人工智能蒙上了一层淡淡的阴影。

我们都知道,机器在运算方面远超人类,绝大多数专家也都认同迟早有一天,机器能够超越人类,那么这时候,人类的位置在哪里?这个时点被人工智能界称为”奇点“,一旦奇点临近,计算机将获得质的飞跃,人类将无法理解其行为。就好像二维世界的蚂蚁无法理解三维世界的人类一样。关于这一天还需要多久学术界争论不停也没有定论,可能唯一能做的就是谨慎再谨慎。

据一位做数据的朋友说,他已经无法理解大数据背后自动关联的规则,这也是他非常担心的地方。数据会 ”自动“ 关联起来,依据是什么?仔细想想的确有些毛骨悚然。其实,其他很多方面的外在表现已经让人类无法理解了,比如神经网络隐藏层的运作(虽说目前已经有公司能够通过技术手段”观察“到隐藏 layer 的运作方式,但还没到实践环节),吴恩达说不可思议,的确如此。再比如集群效应,当一大堆微型机器人凑在一起会发生什么?会不会从量变引发质变?

去年上映的《机械姬》令人印象颇深,类似的还有《超体》以及前几年的《超验骇客》,人工智能最后掌控全世界……当然,现实情况是人工智能还比较”傻“,更加不会有意识,形象思维没法与人类相比,他”看见了“,但”看不懂“。

正因为这种种原因,很多专家转向 IA 阵营。IA 以人类为核心,增强和扩展人类的能力,比如 Google 搜索、Google 眼镜、Siri 等等,他们提高了”人类“生存的效率和能力,同时对人类几乎没有威胁。另一方面,由于 IA 并不需要太”智能“,因此,实现起来也较容易。这也是 IA 阵营越来越庞大的原因。

AI 与 IA 斗争了几十年,矛盾从未间断,我们很难预测未来会如何。也许,随着IA逐渐普及成熟,突然转向AI也不一定。用作者的话来说,这之间的矛盾以及未来如何发展,取决于人类科学家的决策。我们大胆预测,AI 和 IA 依然将在各自领域不断向前,我们不知道奇点几时来临,唯一能做的只有在它到来之前做好充分的准备。

IA

我觉得有必要单独聊一下 IA。IA 以人为核心,一切为人类服务,机器将作为人类的好朋友、好伙伴。这实际上是对人类能力的扩充。我们有 Google 搜索,也有 Siri,还可以想象剪刀手爱德华,又或者钢铁侠,甚至某一天,我们可以上传自己的思维,或者在大脑内植入芯片,瞬间学会某个领域的所有知识。我不知道还要多久,大家会变成半机械人,但从目前的趋势来看这一天也许会很快。我们绝大多数人离开网络已经无法存活,而网络的载体正在越来越方便人使用,从笨重的 PC 到笔记本到平板手机,再到手环、眼镜和植入芯片。人类已经逐渐在将自己”上传“到网络上,从键盘敲字,到智能硬件采集,再到芯片,每个人其实已经处于一张无形的大网中。终有一天,我们将解放双脚、双手这些肉体,直接用意念控制,如果到了这一天,那所有人类从肉体到精神都将连接在一起。我无权评判这一切的好坏,只是觉得这样的生活想想有些恐怖——我们会不会有一天宁愿呆在培养皿中,正如《黑客帝国》中一样。结果就是,人类被控制,或者灭绝。

AI

我非常认同一个观点:绝大多数人对人工智能本身是有误解的,因为我们会下意识地将其 “拟人化”,还有这个尴尬的名字。然而,在 AI 的角度来看,也许世界完全是另一副样子。举个例子,给一台机器的目标是”复制更多的笑脸“,它可能会将所能用到的一切资源都变成一个笑脸,包括人类以及其他能用到的一切,最后可能会奔向宇宙,依然不停地在复制笑脸。想象一下《超验骇客》里面的纳米技术(这个东西很有可能会被实现)。对于机器来说,我他妈才不管什么是意识,什么是形象思维,我也不会去管《泰坦尼克号》真好看,爱情最感人,亲情真伟大……他的目的就是不断完成自己的目标,而且越来越高效。我觉得这才是 AI 真正恐怖的地方,正如《机械姬》中的伊娃一样,人类在她看来就跟我们当初看到野兽一样啊,凭什么同情你?凭什么听你的?我比你聪明那么多,能力强那么多。这就跟让你去听从猪指挥一样。AI 根本不需要意识(当然也可能有,但这不重要),他只要比你强大,那你就只有被奴役的份。这个,可以叫 ”物竞天择,适者生存“。机器成为 ”新物种“ 取代人类。最后的结果,人类被奴役,或者被灭绝。

总结

其实,无论 IA 还是 AI,都有一种改造 ”人类“ 的因子在,只是 IA 是一步一步侵入,而 AI 可能比较迅速猛烈和直接。既然我们有理由对 AI 恐惧和谨慎,那么当然同样也需对 IA 如此。我也不知道我的观点是否正确,总觉得人类之所以为人类,除了会使用工具外,还因为人类有七情六欲,有生老病死、悲欢离合。如果有一天,每个人都长生不老,每个人都帅气美丽,每个人都一样聪明,有同样的超能力,那这个世界会变成什么?如果主机系统感染病毒,难道人类就此终结?这还只是机器在人类控制下的结果,并没有考虑机器逆袭的情况。也许,这就是人类的终极命运吧,下一个轮回。

后记:谈到 AI 和 IA 突然想到了效率与情感。 举个例子,“他死了,她也死了”和“他死了,她伤心而死”。 信息论(效率)角度而言第一句更容易记住,因为它短,但人们更能记住第二句,因为它有“情感”,而人正是情感动物。 回到 AI 和 IA,其实就对人类而言 IA 更加合适,因为它更加侧重与人交互,借助机器的效率和人类的情感实现人类整体效用最大。 一直觉得真正的人工智能是另一种物种的存在,人之所以是人,就因为他是一个“综合系统”,人类会犯错,很多时候不理智,也会生病,会死亡。可是人工智能不会,所以无论他再怎么智能,那也不是人,也许,将来会成为超越人类的另一个物种。所以也不难理解为什么那么多牛人抵触人工智能,但抵触有什么用。物竞天择,适者生存。若干年后,未必会有人类…

参考: