Keep going

Listen, smile, agree, and then do whatever the fuck you were gonna do anyway.

最近其实挺迷茫的。

因为还有不到一年的时间就要结束自己的研究生阶段了。但是感觉还有很多事情没有实现。比如到底是继续读博还是工作;是在国内发展还是在国外发展;让体重身材变得正常;说流利的英语;老妈一直关心的找女朋友。

每件事情其实都不是一蹴而就的。我一直相信现在的自己,藏着所有走过的路,读过的书和喜欢崇拜过的人。如果让我现在就决定到底要不要读博士或者去工作的话,真的很难。所以说我只有每天都让自己变得好一点,多看看书,多去健身房运动一下,还有多参加俱乐部认识新的朋友。总有那么一天,在积累了足够多的努力之后,成功就会追上你了。

最近因为学校的事情不得不回学校上课,非常感谢小槐树可以认可我,让我可以假期再回微软玩耍。所以想一想,其实生活中还是有很多好的事情在发生的嘛。

然后是最近的规划。因为刚开学,除了上课还是比较轻松的。希望可以利用这段时间认识一些新的朋友,学一些新的知识,努力充实自己:)

隐含语义分析

最近在做NLP的一些工作。

遇到的问题是:Precisely detect scenario/weather/time/etc in a paragraph-level document.

对于这个问题,我作为一个NLP外行,首先想到的思路是建立相应的词表,然后对每一个Sentence进行Tagging。在完成Coding的工作后,在测试中效果还是可以的(毕竟用Word2Vec聚类建立了好大一份词表)。但主要的问题是Overtrigger,这个模型无法区分那些地方才是真正描述Target的,更无法理解一词多义的情况。

于是在第一版模型可以基本Cover住下游业务需求之后,我Mentor对Precision有了进一步的要求(手动GG)。

在想了好几天之后(其实主要时间都用来划水),我想了一个不太成熟的方案,先记下来等元旦过完了回来再和Mentor讨论一下:

  • 使用TF-IDF-Based Sequenced List取代完整的Word Segment List。
  • 使用BERT取代Word2vec进行Word Embedding。
  • 尝试使用Latent Semantic Analysis,进行第一轮无监督学习,总而获取到Sentence-level的Tagging information(说到底,还不是因为没有Labeler)。
  • 使用SVD左矩阵反推Word-level Influence Factor,生成NER training data(这一步的话,为了保证模型质量,估计还是得请Labeler帮忙看一下。这个样子的话,比从什么都没有标注要轻松一些)。
  • 尝试双向LSTM训练隐含序列,或者直接通过BERT Pre Trained Model 产出Word Embedding(反正BERT的Embedding是自带Context的,啦啦啦)。
  • 使用线性链的条件随机场进行Sequence Tagging。这一步的话,参考目前的NER模型,在Location/Person/Organization上有95+的F1

如果这几个流程可以按照预期来进行的话,那效果应该还是不错的。

归来

到北京之后,才知道自己有这么多好朋友都在北京。

于是开启了天天约饭的任性模式。短短不到48个小时,就已经约了五六个局…

第一天早上和晓波去吃了金鼎轩,据说是北京现在唯一开门的24小时餐厅。菜式的话主要是以广式早茶为主,讲道理味道一般,但是赢在人家是怎么4小时营业的,可以满足我们这些深夜饥饿的灵魂。下午睡了一觉去了中关村,参观了一下微软大厦。本来想拍照一下微软的Logo,但是运气不好被一辆大货车挡住了,没有拍到。晚上在旁边的食宝街和白晨大吃特吃了一场,差点吃到让我对这个美食天堂失去兴趣。白晨在苏州街附近也找了一个实习,以后估计可以经常约饭了。

第二天去了头条面试。因为之前第一次预约的时间面试官有事,于是HR小姐姐特别认真负责的约到了我到北京的第二天现场面试。面试体验说实话不是特别理想,主要体现在一下几个方面:
1. 首先我得承认主要是我自己的责任,这次面试完全没有准备,如果准备一些概念题和Leetcode算法,那应该会好很多。
2. 我不太明白面试官为什么都想秀你一脸的感觉。在面试过程中面试官处于主导地位不错,但是如果一味为了炫技而去问一下明确表示不了解的问题貌似没有什么意义。
3. 很多问题都是名词解释类的问题。比如说你知道XXX吗?那XXX呢?这两个有什么区别啊?我对这种问题其实真的挺反感的。所有的系统框架都是人自己制定的,为什么不允许有别的理解呢?另一个方面,这种类型的问题看似可以很好的考察一个人的水平,但是只要来面试的人事先有过准备,看了这些问题的标准答案,那在面试的过程中真的是可以无往而不利。
虽说面试的感觉不是很理想,但是我也确实发现了我自己存在的一些问题。很多时候为了快速实现一个技术原型,我会使用大量的轮子,但并不会去深入了解具体的实现流程,所以以后一定要在技术深度上努力学习。
晚上去了望京找康凯学长和张冬妮&舒晓波约大烤鸭,饭店的名字叫局气,很有北京味。

然后就到了第三天,也就是今天。由于回国之后有了GFW,我所有G家的服务都用不了了。真的是非常的蛋疼。于是今天来咖啡厅找了一个位置,搭了一个梯子。查了一下这学期考试的成绩,也回复了一下Gmail的邮件。等会打算再看一看Vue.js的教程和GAN的生成模型。

明天和后天都约了小伙伴的局,能够见到好久不见的老朋友真的很开心。希望大家在北京的工作生活都一切顺利,Cheers!

万万没想到 我还是拿到了微软的Offer…

今天正在复习KT的时候,突然收到了微软小冰那边面试小哥的电话。

不知道为啥,我想都没想下意识的就接了电话,然后以为会是告诉我一声我跪了之类的通知。因为这次面试什么都没准备,而且正好是兵荒马乱的考试季,所以整个面试的流程真的是无比的艰辛 (找不到面试的地方,被迫坐在花粉漫天的草坪上面试/ 在Old Arts好不容易找了一个位置,被查夜的保安赶出去…)。 要是按照我自己标准来说,这个面试基本上是全程打铁。

周一的时候和学校沟通了一下申请实习的事情,然后又给微软的小哥发了消息去询问面试的情况,结果就没有回复。于是我就脑补了一百零八种可能性,最后觉得自己可能是凉了,还是好好复习考试吧。

但是万万没有想到,小哥打来电话居然告诉我有Offer了,瞬间目瞪狗呆,真刺激。

多的就不说了,我这两天还是先好好复习考试吧。

最后,感谢微软小哥和隔壁组可爱的小姐姐,考完试见 🙂

Validate IP address

昨天面试了微软北京的组,Coding问了一道判断IP是否合法的问题,然鹅当时脑子打铁,写的完全惨不忍睹,今天早上起床吓得我赶紧重新写了一遍。

class Solution(object):
    def isIPv4(self, s):
            try: 
                return str(int(s)) == s and 0 <= int(s) <= 255
            except: 
                return False
            
    def isIPv6(self, s):
        if len(s) > 4: 
            return False
        try: 
            return int(s, 16) >= 0 and s[0] != '-'
        except: 
            return False

    def validIPAddress(self, IP):
        """
        :type IP: str
        :rtype: str
        """
        if IP.count(".") == 3 and all(self.isIPv4(i) for i in IP.split(".")): 
            return "IPv4"
        if IP.count(":") == 7 and all(self.isIPv6(i) for i in IP.split(":")): 
            return "IPv6"
        return "Neither"
        

Be a survivor of a disaster

这两天全靠红牛和咖啡续命了。

11月1号考完了这学期的第一门Final,在皇家展览馆考的。看了一下考场的座次表,三千人一起考试真的是美滋滋。考场的“服务人员”态度也特别好,看我手画Burndown Chart,就贴心的给我递过来了一把尺子 (可能是看我手画的太惨不忍睹了)。

因为这个暑假有四个月的时间,待在家里的话虽然可以轻松许多,但是还是觉得趁还可以实习,应该多锻炼一下自己。本来以为离放假还有一段时间,打算等考完试再去找实习,但是前两天算了一下日期,我发现再不找实习估计就来不及了,于是赶紧把简历投了起来。运气还不错的是,有好几个大佬都给了机会让我试一试。考完试的第二天,也就是11月2号,我约了微软的面试。正好打算考完试休息放松一天,于是2号就被我完全腾空用来面试了。

Continue reading