21 | NLP基础(上):详解自然语言处理原理与常用算法
NLP 的应用无处不在
- 深入了解
- 翻译
- 解释
- 总结
本文深入介绍了自然语言处理(NLP)领域的重要内容,包括文本表示方法和关键词提取。在文本表示方面,传统机器学习算法使用了各种文本表示方法,如独热表示法和count-based表示方法,以及基于统计特征、词图模型和主题模型的关键词提取方法。文章重点介绍了TF-IDF方法和TextRank算法,并提供了相应的代码示例。此外,还介绍了jieba工具的集成算法用于关键词提取。总的来说,本文通过简洁明了的语言和丰富的技术细节,为读者提供了快速了解NLP原理和常用算法的基础认知和实践经验。文章还提到了LDA模型的训练过程和NLP的应用场景,强调了工具的使用需要理解其内部原理。同时,鼓励读者在课后深入了解jieba、gensim和NLTK等工具的具体使用和功能,以及Word Embedding的训练生成和使用。整体而言,本文为读者提供了全面的NLP基础知识和实践指导,是一篇值得深入阅读和学习的技术文章。
《PyTorch 深度学习实战》,新⼈⾸单¥59
全部留言(13)
- 最新
- 精选
- ZeurdTF-IDF因为各种问题,比如文章长度问题,长的文章一个词出现的次数肯定比短的来的多,又比如都是经济学的文章,一个出现80次,一个出现100次,不能代表100次的那个比80次的有用25%,存在边际效用递减的问题,所以一般会对文章数量做指数化以及归一化处理,尽可能减小误差
作者回复: 👍🏻👍🏻👍🏻👍🏻👍🏻👍🏻 ^^ 加油~
2022-04-2625 - John(易筋)tf-idf的理论依据及不足 编辑 tf-idf算法是建立在这样一个假设之上的:对区别文档最有意义的词语应该是那些在文档中出现频率高,而在整个文档集合的其他文档中出现频率少的词语,所以如果特征空间坐标系取tf词频作为测度,就可以体现同类文本的特点。另外考虑到单词区别不同类别的能力,tf-idf法认为一个单词出现的文本频数越小,它区别不同类别文本的能力就越大。因此引入了逆文本频度idf的概念,以tf和idf的乘积作为特征空间坐标系的取值测度,并用它完成对权值tf的调整,调整权值的目的在于突出重要单词,抑制次要单词。但是在本质上idf是一种试图抑制雜訊的加权,并且单纯地认为文本頻率小的单词就越重要,文本頻率大的单词就越无用,显然这并不是完全正确的。idf的简单结构并不能有效地反映单词的重要程度和特征词的分布情况,使其无法很好地完成对权值调整的功能,所以tf-idf法的精度并不是很高。 此外,在tf-idf算法中并没有体现出单词的位置信息,对于Web文档而言,权重的计算方法应该体现出HTML的结构特征。特征词在不同的标记符中对文章内容的反映程度不同,其权重的计算方法也应不同。因此应该对于处于网页不同位置的特征词分别赋予不同的系数,然后乘以特征词的词频,以提高文本表示的效果。 -- 维基百科
作者回复: 👍🏻👍🏻👍🏻^^
2022-08-25归属地:北京3 - 林于翔from nltk import word_tokenize from nltk import TextCollection sents=['i like jike','i want to eat apple','i like lady gaga'] # 首先进行分词 sents=[word_tokenize(sent) for sent in sents] # 构建语料库 corpus=TextCollection(sents) # 计算IDF idf=corpus.idf('like') print(idf)#0.4054651081081644 请问这个idf值应该怎么算呢?如果按照公式,文档总数为3, 包含词条‘like’的文档数为2,分母再加上1,那么idf=ln(3/(2+1)=0?? 为什么会跟结果不符合呢?
作者回复: hello,林于翔。谢谢留言。 idf的计算,实际上就是“包含该词语的文件的数目除以总文件数目”,本身是没有+1操作的,+1是为了防止出现分母为0的情况而做的平滑。实际情况下,语料的数量很庞大,所以“分母为零”的情况要远多于“分母+1=分子”的情况,所以就成了我们更多的使用普遍形式,即+1。而在文章的代码例子中,我特意选择的就是后面的情况,意在告诉大家,写代码要根据实际情况来进行边缘条件的判断。
2021-12-161 - John(易筋)方老师,最后一段代码有误,for少了in, input_content 应该是texts。修正后如下 from gensim import corpora, models import jieba.posseg as jp import jieba texts = [line.strip() for line in open('input.txt', 'r')] # 老规矩,先分词 words_list = [] for text in texts: words = [w.word for w in jp.cut(text)] words_list.append(words) # 构建文本统计信息, 遍历所有的文本,为每个不重复的单词分配序列id,同时收集该单词出现的次数 dictionary = corpora.Dictionary(words_list) # 构建语料,将dictionary转化为一个词袋。 # corpus是一个向量的列表,向量的个数就是文档数。你可以输出看一下它内部的结构是怎样的。 corpus = [dictionary.doc2bow(words) for words in words_list] # 开始训练LDA模型 lda_model = models.ldamodel.LdaModel(corpus=corpus, num_topics=8, id2word=dictionary, passes=10)
作者回复: 好的,多谢。我看一下。👍🏻👍🏻👍🏻👍🏻👍🏻👍🏻
2022-09-09归属地:北京 - 思勇LDA模型示例无法跑通,从网上找了一个,可以跑: https://zhuanlan.zhihu.com/p/134161509
作者回复: 你好,感谢留言。 具体是提示什么错误呢?
2022-06-22 - 亚林nltk 计算TF-IDF的时候,如果是无限个文档或是很大量的文档,这改怎么玩类
作者回复: tf-idf本身是基于统计值的一个过程,所以能够处理极大量的文档。但是在另一方面,大量的文档会带来更多的term,但是这个term量在单一语言中也是有一个理论上限的,并不会特别巨大。放到更广泛的情况下,例如你用tf-idf做nlp之外的的任务,那么term的量就会变得非常非常大,这个时候你就需要对数据做采样逼近,或者使用分布式等方法进行统计。
2022-05-31 - 官只用TF-IDF的话,在不设置停用词的情况,有很多常见的冠词还有谓语动词出现的次数会非常高,比如 is the ,或者汉语“是”,“我”等。而在研究段落主题或者文章含义的时候,这些词实际含义并不大,所以在使用TF-IDF之前需要对文本进行一些预处理。2021-11-305
- Sam WangTFIDF缺少了semantic meaning2021-12-102
- ifelse学习打卡2023-12-10归属地:浙江
- Matthew离线下载安装NLTK的nltk_data数据包: https://blog.csdn.net/qq_43140627/article/details/103895811 其中,tokenizers/ 下的 punkt.zip 需要解压缩2023-03-07归属地:江苏