这篇文章我将分享我自己学习NLP的经验,没有接触过任何CS相关的正式培训。我所有的正规教育都是在电气工程方面。所以,我们开始吧。
在字符串算法方面有一个坚实的基础。这一步甚至在任何真正的NLP开始之前。你可以选择任何语言,但Python是很好的入门工具。
年超实用的Python零基础入门到进阶视频源码淘宝¥2购买已下架这里列出了一些需要了解的好的字符串算法。a)字符串操作--反转、切分、双指针操作,如反转字符串中的所有元音b)检查重合体、变形体等--充分掌握哈希表,了解常数查询的作用。c)寻找另一个字符串中的子字符串--例如,寻找DNA序列中重复出现的10个遗传核苷酸。哈希表在这里再次发挥了作用。这些Leetcode问题对我很有帮助。学习正则表达式。它们很难入门,而且看起来很奇怪。但是一旦开始学习,就非常容易上手。它们遵循一个我喜欢的逻辑结构。上边课程关于正则表达式的课程对我很有帮助。
在这里要学习的东西有:向前看,向后看,替换一个字符,在一个词的字符之间创建空格,寻找模式等。是时候进行NLP了!符号化、词干化、POS标记、词法化等等。这里有很多概念,但标记化是开始任何NLP任务的关键。现在你想把标记化为单字、大字还是更多?这是要根据你所构建的内容来考虑的问题。大多数问题是将句子标记为单字(unigrams)。Python有很好的API来完成这些任务。ML的时间--ML的基础知识可以从AndrewNg的Coursera课程中挑选。对于Python来说,scikit-learn和nltk是被普遍推荐的。nltk原生支持NaiveBayes,但性能并不出色。对我来说,真正有用的是使用SklearnClassifier类,它将scikit-learn的算法,如LogisticRegression和SVC等,包装到nltk中。这是一个很好的入门教程。他对ML的其他方面也有很好的教程。我开始使用NaiveBayes进行一些文本分类,然后转到更好的LogisticSGD。
学习评估指标——非常重要,但经常被忽视。混淆矩阵、精确度、召回率、F分数、ROC曲线、真阳性率和假阳性率之间的权衡。如果你正在使用ML--使用交叉验证和学习曲线的评估管道。过度拟合、欠拟合、偏差与方差的权衡都适用于此。AndrewNg在他的Coursera课程的第6周中再次对此做了很好的说明。是时候进行深度学习了吗?在所有的步骤之后,如果你认为你的分类器有非常高的偏差,而且你需要更多的复杂性--这时你需要DL。如果你发现你有高的方差,你也许应该寻找更多的训练数据,而不是直接尝试DL。DL对于需要高度非线性特征空间的非常具体的任务来说是非常有用的,Keras在这方面真的很好。递归神经网络在基于文本的深度学习中特别常见。对于大多数情况,基于scikit-learn的正常算法应该是不错的。
主题建模、词嵌入、使用LSTM、GRU等进行翻译。这是最近得到大量