NLP中文面试学习资料:面向算法面试,理论代码俱全,登上GitHub趋势榜
鱼羊 发自 凹非寺
量子位 报道 | 公众号 QbitAI
一年一度的秋招已经悄悄来临,征战在求职路上的你,准备好了吗?
工欲善其事,必先利其器。
这里有一份NLP面试大全,全中文教学,囊括机器学习及NLP算法面试中常考的知识点,还有算法实战代码,实乃算法工程师求职路上,必备良品。
宜入门,亦宜复习。还登上了GitHub趋势榜。
学习目录
这份学习资料分为机器学习、深度学习和NLP三个部分。
机器学习有16节:
深度学习有8节:
NLP有8节:
都是由浅入深,干货十足。
事不宜迟,一起来看看具体该如何食用这份学习大餐吧。
以机器学习的第一节线性回归为例。
在每一节的一开始都有该节的内容目录,详尽列举了这一节中都有哪些知识点,新手可以按部就班地学习,而倘若你只是想在面试开始前再巩固一下知识点,就可以哪里不熟点哪里了。
基础到什么是线性、非线性:
进一步到损失函数如何计算,过拟合、欠拟合如何解决:
再到应用场景:
没有多余的废话,尽是知识要点。拿着这样一份重点笔记有针对性地学习、复习,岂不爽哉?
光看理论记不住?放心,每一节的文末都有配套的课后习题,边学边练,事半功倍。
课后习题不仅包括题目、数据和代码实现,项目作者还结合自身的经验,把整个解题的思路完整呈现了出来,可以参考学习。
比如机器学习入门中的经典题房价预测。
题目是:
从给定的房屋基本信息以及房屋销售信息等,建立一个回归模型预测房屋的销售价格。
测试数据主要包括3000条记录,13个字段,跟训练数据不同的是测试数据并不包括房屋销售价格,学员需要通过由训练数据所建立的模型以及所给的测试数据,得出测试数据相应的房屋销售价格预测。
脑子一团浆糊不知道从何着手?
可以参考一下作者的思路:
1、选择合适的模型,比如这里,选择多元线性回归模型。
2、对缺失的值进行补齐操作,可以使用均值的方式补齐数据,使得准确度更高。
3、数据的取值一般跟属性有关,为了提高预测的准确度,需统一数据维度进行计算,方法有特征缩放和归一法等。
#读取数据 housing = pd.read_csv('kc_train.csv') target=pd.read_csv('kc_train2.csv') #销售价格 t=pd.read_csv('kc_test.csv') #测试数据 #数据预处理 housing.info() #查看是否有缺失值 #特征缩放 from sklearn.preprocessing import MinMaxScaler minmax_scaler=MinMaxScaler() minmax_scaler.fit(housing) #进行内部拟合,内部参数会发生变化 scaler_housing=minmax_scaler.transform(housing) scaler_housing=pd.DataFrame(scaler_housing,columns=housing.columns)
4、调用模型库进行训练。
#选择基于梯度下降的线性回归模型 from sklearn.linear_model import LinearRegression LR_reg=LinearRegression() #进行拟合 LR_reg.fit(scaler_housing,target) #使用均方误差用于评价模型好坏 from sklearn.metrics import mean_squared_error preds=LR_reg.predict(scaler_housing) #输入数据进行预测得到结果 mse=mean_squared_error(preds,target) #使用均方误差来评价模型好坏,可以输出mse进行查看评价值 #绘图进行比较 plot.figure(figsize=(10,7)) #画布大小 num=100 x=np.arange(1,num+1) #取100个点进行比较 plot.plot(x,target[:num],label='target') #目标取值 plot.plot(x,preds[:num],label='preds') #预测取值 plot.legend(loc='upper right') #线条显示位置 plot.show()
5、使用测试数据进行目标函数预测输出,观察结果是否符合预期。或者通过画出对比函数进行结果线条对比。
当然,最后都会附上参考答案。
NLP部分也是一样的节奏,比如全局向量词嵌入(GloVe)。
先说明概念:
GloVe的全称叫Global Vectors for Word Representation,它是一个基于全局词频统计(count-based & overall statistics)的词表征(word representation)工具,它可以把一个单词表达成一个由实数组成的向量,这些向量捕捉到了单词之间一些语义特性,比如相似性(similarity)、类比性(analogy)等。我们通过对向量的运算,比如欧几里得距离或者cosine相似度,可以计算出两个单词之间的语义相似性。
再详述实现步骤:
1、构建共现矩阵。
2、词向量和共现矩阵的近似关系。
3、构造损失函数。
4、训练GloVe模型。
还分析了一番GloVe与LSA(Latent Semantic Analysis,潜在语义分析)、Word2Vec(词嵌入)的比较。
LSA(Latent Semantic Analysis)是一种比较早的count-based的词向量表征工具,它也是基于co-occurance matrix的,只不过采用了基于奇异值分解(SVD)的矩阵分解技术对大矩阵进行降维,而我们知道SVD的复杂度是很高的,所以它的计算代价比较大。还有一点是它对所有单词的统计权重都是一致的。而这些缺点在GloVe中被一一克服了。
而word2vec最大的缺点则是没有充分利用所有的语料,所以GloVe其实是把两者的优点结合了起来。从这篇论文给出的实验结果来看,GloVe的性能是远超LSA和word2vec的,但网上也有人说GloVe和word2vec实际表现其实差不多。
最后,还是附上代码实现。
One More Thing
面向面试,重点明确,这份资源实在火。连外国友人都来求英文版了。
虽然有部分章节还在施工中,还是很值得Mark一下啊~
传送门:
https://github.com/NLP-LOVE/ML-NLP
— 完 —
- 从骁龙8至尊版,我看到了AI手机的未来 | 智在终端2024-12-17
- o1被曝“心机深”:逃避监督还会撒谎,骗人能力一骑绝尘2024-12-09
- 低成本机器人“皮肤”登上Nature子刊:实现三维力的自解耦,来自法国国家科学研究中心&香港大学2024-11-23
- OpenAI重夺竞技场第一,但这波靠的是4o2024-11-21