我大学期间是电气工程专业的,没有接触过CS相关的正式培训。以下是我自学NLP的经验,希望我的分享能帮到你:
1.扎实掌握基础的字符串算法。该步骤是真正开始学习NLP的关键一步,你可以选择任何语言,但是我认为Python非常适合入门。以下是一些你需要了解的比较优秀的字符串算法列表:
a)字符串操作:反转,切片,双指针操作,例如反转字符串中的所有元音。
b)检查回文,字谜等:需要掌握哈希表,并了解如何进行常量查找。
c)在另一个字符串中找到一个子字符串:例如,在DNA序列中找到10个重复出现的遗传核苷酸,哈希表在这里也很有用。
这些问题都可以在Leetcode上找到,对我很有帮助。
2.学习正则表达式。它很难上手,但是一旦开始掌握,就变得比较容易了,而且我很喜欢它的逻辑结构。你可以听一些有关正则表达式网络课程。
正则表达式里你要学习的东西:前瞻性,后瞻性,替换字符,在单词的字符之间创建空格,寻找样式等。
3.一些关于NLP的基础概念:标记化,词干化,POS标记,词形化等。这里有很多概念,但是标记化对于开始任何的NLP任务都是必不可少的,是否要标记成字母组合,二元或更多就是根据你正在构建的内容来考虑的事情。大多数问题将句子标记为单个单词(字母组合),其中,Python有出色的API来完成此任务。
4.一些关于ML的基础概念:ML的基础知识可以从Andrew Ng的Coursera课程中学习。对于Python,通常建议使用scikit-learn和nltk。
nltk本机支持Naive Bayes,但性能不佳。对我真正有用的是使用SklearnClassifier类,该类将scikit学习算法(如Logistic回归和SVC等)包装到nltk中,它是一个很好的入门指南,在ML的其他方面也有出色的教程。
刚开始时,我使用朴素贝叶斯(Naive Bayes)进行一些文本分类,然后转到性能更好的Logistic SGD。
5.学习评估指标:非常重要,经常被忽视。混淆矩阵,精度,召回率,F得分,ROC曲线会在真阳性率和假阳性率之间进行权衡。如果你使用的是ML中的交叉验证和学习曲线的评估管道,那么过度拟合,欠拟合,偏差与方差的权衡在这里都适用。
6.一些关于DL的基础知识:完成所有步骤后,如果你需要更多的复杂性,可以开始尝试DL。但如果你发现方差很大,则应该寻找更多的训练数据,而不是直接尝试DL。
DL对于需要高度非线性特征空间的非常特定的任务很有用。而且, keras真的很好用。循环神经网络在基于文本的深度学习中特别常见。在大多数情况下,基于scikit-learn的常规算法很好用。
7.主题建模,单词嵌入,使用LSTM,GRU等进行翻译。这个领域引起了很多关注,真正了解逻辑回归以及我们为什么需要非线性激活函数,梯度消失的问题,ReLU如何帮助解决它都是学习这些领域的先决条件。
互联网上的内容非常多,而且多数文章的回答都很复杂,有许多初学者看不懂的复杂方程式,很难让人感兴趣继续下去。但是,无论如何,我希望你能意识到基础非常重要,你需要对ML实际的工作原理真正地理解,亲自动手对模型进行建模。