自然语言处理_自然语言处理入门 - CSDN
自然语言处理 订阅
自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理是一门融语言学、计算机科学、数学于一体的科学。因此,这一领域的研究将涉及自然语言,即人们日常使用的语言,所以它与语言学的研究有着密切的联系,但又有重要的区别。自然语言处理并不是一般地研究自然语言,而在于研制能有效地实现自然语言通信的计算机系统,特别是其中的软件系统。因而它是计算机科学的一部分。自然语言处理(NLP)是计算机科学,人工智能,语言学关注计算机和人类(自然)语言之间的相互作用的领域。 展开全文
自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理是一门融语言学、计算机科学、数学于一体的科学。因此,这一领域的研究将涉及自然语言,即人们日常使用的语言,所以它与语言学的研究有着密切的联系,但又有重要的区别。自然语言处理并不是一般地研究自然语言,而在于研制能有效地实现自然语言通信的计算机系统,特别是其中的软件系统。因而它是计算机科学的一部分。自然语言处理(NLP)是计算机科学,人工智能,语言学关注计算机和人类(自然)语言之间的相互作用的领域。
信息
缩    写
NLP
适用领域
计算机、人工智能
中文名
自然语言处理
外文名
natural language processing
自然语言处理详细介绍
语言是人类区别其他动物的本质特性。在所有生物中,只有人类才具有语言能力。人类的多种智能都与语言有着密切的关系。人类的逻辑思维以语言为形式,人类的绝大部分知识也是以语言文字的形式记载和流传下来的。因而,它也是人工智能的一个重要,甚至核心部分。用自然语言与计算机进行通信,这是人们长期以来所追求的。因为它既有明显的实际意义,同时也有重要的理论意义:人们可以用自己最习惯的语言来使用计算机,而无需再花大量的时间和精力去学习不很自然和习惯的各种计算机语言;人们也可通过它进一步了解人类的语言能力和智能的机制。实现人机间自然语言通信意味着要使计算机既能理解自然语言文本的意义,也能以自然语言文本来表达给定的意图、思想等。前者称为自然语言理解,后者称为自然语言生成。因此,自然语言处理大体包括了自然语言理解和自然语言生成两个部分。历史上对自然语言理解研究得较多,而对自然语言生成研究得较少。但这种状况已有所改变。无论实现自然语言理解,还是自然语言生成,都远不如人们原来想象的那么简单,而是十分困难的。从现有的理论和技术现状看,通用的、高质量的自然语言处理系统,仍然是较长期的努力目标,但是针对一定应用,具有相当自然语言处理能力的实用系统已经出现,有些已商品化,甚至开始产业化。典型的例子有:多语种数据库和专家系统的自然语言接口、各种机器翻译系统、全文信息检索系统、自动文摘系统等。自然语言处理,即实现人机间自然语言通信,或实现自然语言理解和自然语言生成是十分困难的。造成困难的根本原因是自然语言文本和对话的各个层次上广泛存在的各种各样的歧义性或多义性(ambiguity)。一个中文文本从形式上看是由汉字(包括标点符号等)组成的一个字符串。由字可组成词,由词可组成词组,由词组可组成句子,进而由一些句子组成段、节、章、篇。无论在上述的各种层次:字(符)、词、词组、句子、段,……还是在下一层次向上一层次转变中都存在着歧义和多义现象,即形式上一样的一段字符串,在不同的场景或不同的语境下,可以理解成不同的词串、词组串等,并有不同的意义。一般情况下,它们中的大多数都是可以根据相应的语境和场景的规定而得到解决的。也就是说,从总体上说,并不存在歧义。这也就是我们平时并不感到自然语言歧义,和能用自然语言进行正确交流的原因。但是一方面,我们也看到,为了消解歧义,是需要极其大量的知识和进行推理的。如何将这些知识较完整地加以收集和整理出来;又如何找到合适的形式,将它们存入计算机系统中去;以及如何有效地利用它们来消除歧义,都是工作量极大且十分困难的工作。这不是少数人短时期内可以完成的,还有待长期的、系统的工作。以上说的是,一个中文文本或一个汉字(含标点符号等)串可能有多个含义。它是自然语言理解中的主要困难和障碍。反过来,一个相同或相近的意义同样可以用多个中文文本或多个汉字串来表示。因此,自然语言的形式(字符串)与其意义之间是一种多对多的关系。其实这也正是自然语言的魅力所在。但从计算机处理的角度看,我们必须消除歧义,而且有人认为它正是自然语言理解中的中心问题,即要把带有潜在歧义的自然语言输入转换成某种无歧义的计算机内部表示。歧义现象的广泛存在使得消除它们需要大量的知识和推理,这就给基于语言学的方法、基于知识的方法带来了巨大的困难,因而以这些方法为主流的自然语言处理研究几十年来一方面在理论和方法方面取得了很多成就,但在能处理大规模真实文本的系统研制方面,成绩并不显著。研制的一些系统大多数是小规模的、研究性的演示系统。目前存在的问题有两个方面:一方面,迄今为止的语法都限于分析一个孤立的句子,上下文关系和谈话环境对本句的约束和影响还缺乏系统的研究,因此分析歧义、词语省略、代词所指、同一句话在不同场合或由不同的人说出来所具有的不同含义等问题,尚无明确规律可循,需要加强语用学的研究才能逐步解决。另一方面,人理解一个句子不是单凭语法,还运用了大量的有关知识,包括生活知识和专门知识,这些知识无法全部贮存在计算机里。因此一个书面理解系统只能建立在有限的词汇、句型和特定的主题范围内;计算机的贮存量和运转速度大大提高之后,才有可能适当扩大范围.以上存在的问题成为自然语言理解在机器翻译应用中的主要难题,这也就是当今机器翻译系统的译文质量离理想目标仍相差甚远的原因之一;而译文质量是机译系统成败的关键。中国数学家、语言学家周海中教授曾在经典论文《机器翻译五十年》中指出:要提高机译的质量,首先要解决的是语言本身问题而不是程序设计问题;单靠若干程序来做机译系统,肯定是无法提高机译质量的;另外在人类尚未明了大脑是如何进行语言的模糊识别和逻辑判断的情况下,机译要想达到“信、达、雅”的程度是不可能的。
收起全文
精华内容
参与话题
  • Ai工程师-自然语言处理实战课程

    千人学习 2020-06-24 14:22:02
    AI工程师-自然语言处理实战课程旨在用最接地气的方式讲解复杂的算法原理,基于真实数据集,通过实际案例进行项目实战。整个体系内容包括200+课时,20个项目实战,完美覆盖当下热门技术与经典框架实战。学习路线主要...
  • 自然语言处理(NLP)入门

    万次阅读 多人点赞 2017-11-21 20:32:26
    本文简要介绍Python自然语言处理(NLP),使用Python的NLTK库。NLTK是Python的自然语言处理工具包,在NLP领域中,最常使用的一个Python库。什么是NLP?简单来说,自然语言处理(NLP)就是开发能够理解人类语言的应用程序...

    本文简要介绍Python自然语言处理(NLP),使用Python的NLTK库。NLTK是Python的自然语言处理工具包,在NLP领域中,最常使用的一个Python库。

    什么是NLP?

    简单来说,自然语言处理(NLP)就是开发能够理解人类语言的应用程序或服务。

    这里讨论一些自然语言处理(NLP)的实际应用例子,如语音识别、语音翻译、理解完整的句子、理解匹配词的同义词,以及生成语法正确完整句子和段落。

    这并不是NLP能做的所有事情。

    NLP实现

    搜索引擎: 比如谷歌,Yahoo等。谷歌搜索引擎知道你是一个技术人员,所以它显示与技术相关的结果;

    社交网站推送:比如Facebook News Feed。如果News Feed算法知道你的兴趣是自然语言处理,就会显示相关的广告和帖子。

    语音引擎:比如Apple的Siri。

    垃圾邮件过滤:如谷歌垃圾邮件过滤器。和普通垃圾邮件过滤不同,它通过了解邮件内容里面的的深层意义,来判断是不是垃圾邮件。

    NLP库

    下面是一些开源的自然语言处理库(NLP):

    Natural language toolkit (NLTK);
    Apache OpenNLP;
    Stanford NLP suite;
    Gate NLP library

    其中自然语言工具包(NLTK)是最受欢迎的自然语言处理库(NLP),它是用Python编写的,而且背后有非常强大的社区支持。

    NLTK也很容易上手,实际上,它是最简单的自然语言处理(NLP)库。

    在这个NLP教程中,我们将使用Python NLTK库。

    安装 NLTK

    如果您使用的是Windows/Linux/Mac,您可以使用pip安装NLTK:

    pip install nltk

    打开python终端导入NLTK检查NLTK是否正确安装:

    import nltk

    如果一切顺利,这意味着您已经成功地安装了NLTK库。首次安装了NLTK,需要通过运行以下代码来安装NLTK扩展包:

    import nltk
    
    nltk.download()

    这将弹出NLTK 下载窗口来选择需要安装哪些包:
    这里写图片描述
    您可以安装所有的包,因为它们的大小都很小,所以没有什么问题。

    使用Python Tokenize文本

    首先,我们将抓取一个web页面内容,然后分析文本了解页面的内容。

    我们将使用urllib模块来抓取web页面:

    import urllib.request
    
    response = urllib.request.urlopen('http://php.net/')
    html = response.read()
    print (html)

    从打印结果中可以看到,结果包含许多需要清理的HTML标签。

    然后BeautifulSoup模块来清洗这样的文字:

    from bs4 import BeautifulSoup
    
    import urllib.request
    response = urllib.request.urlopen('http://php.net/')
    html = response.read()
    soup = BeautifulSoup(html,"html5lib")

    这需要安装html5lib模块

    text = soup.get_text(strip=True)
    print (text)

    现在我们从抓取的网页中得到了一个干净的文本。

    下一步,将文本转换为tokens,像这样:

    from bs4 import BeautifulSoup
    import urllib.request
    
    response = urllib.request.urlopen('http://php.net/')
    html = response.read()
    soup = BeautifulSoup(html,"html5lib")
    text = soup.get_text(strip=True)
    tokens = text.split()
    print (tokens)

    统计词频

    text已经处理完毕了,现在使用Python NLTK统计token的频率分布。

    可以通过调用NLTK中的FreqDist()方法实现:

    from bs4 import BeautifulSoup
    import urllib.request
    import nltk
    
    response = urllib.request.urlopen('http://php.net/')
    html = response.read()
    soup = BeautifulSoup(html,"html5lib")
    text = soup.get_text(strip=True)
    tokens = text.split()
    freq = nltk.FreqDist(tokens)
    for key,val in freq.items():
        print (str(key) + ':' + str(val))
    

    如果搜索输出结果,可以发现最常见的token是PHP。

    您可以调用plot函数做出频率分布图:

    freq.plot(20, cumulative=False)
    # 需要安装matplotlib库

    这里写图片描述

    这上面这些单词。比如of,a,an等等,这些词都属于停用词。

    一般来说,停用词应该删除,防止它们影响分析结果。

    处理停用词

    NLTK自带了许多种语言的停用词列表,如果你获取英文停用词:

    from nltk.corpus import stopwords
    
    stopwords.words('english')

    现在,修改下代码,在绘图之前清除一些无效的token:

    clean_tokens = list()
    sr = stopwords.words('english')
    for token in tokens:
        if token not in sr:
            clean_tokens.append(token)

    最终的代码应该是这样的:

    from bs4 import BeautifulSoup
    import urllib.request
    import nltk
    from nltk.corpus import stopwords
    
    response = urllib.request.urlopen('http://php.net/')
    html = response.read()
    soup = BeautifulSoup(html,"html5lib")
    text = soup.get_text(strip=True)
    tokens = text.split()
    clean_tokens = list()
    sr = stopwords.words('english')
    for token in tokens:
        if not token in sr:
            clean_tokens.append(token)
    freq = nltk.FreqDist(clean_tokens)
    for key,val in freq.items():
        print (str(key) + ':' + str(val))

    现在再做一次词频统计图,效果会比之前好些,因为剔除了停用词:

    freq.plot(20,cumulative=False)

    这里写图片描述

    使用NLTK Tokenize文本

    在之前我们用split方法将文本分割成tokens,现在我们使用NLTK来Tokenize文本。

    文本没有Tokenize之前是无法处理的,所以对文本进行Tokenize非常重要的。token化过程意味着将大的部件分割为小部件。

    你可以将段落tokenize成句子,将句子tokenize成单个词,NLTK分别提供了句子tokenizer和单词tokenizer。

    假如有这样这段文本:

    Hello Adam, how are you? I hope everything is going well. Today is a good day, see you dude

    使用句子tokenizer将文本tokenize成句子:

    from nltk.tokenize import sent_tokenize
    
    mytext = "Hello Adam, how are you? I hope everything is going well. Today is a good day, see you dude."
    print(sent_tokenize(mytext))

    输出如下:

    ['Hello Adam, how are you?', 'I hope everything is going well.', 'Today is a good day, see you dude.']

    这是你可能会想,这也太简单了,不需要使用NLTK的tokenizer都可以,直接使用正则表达式来拆分句子就行,因为每个句子都有标点和空格。

    那么再来看下面的文本:

    Hello Mr. Adam, how are you? I hope everything is going well. Today is a good day, see you dude.

    这样如果使用标点符号拆分,Hello Mr将会被认为是一个句子,如果使用NLTK:

    from nltk.tokenize import sent_tokenize
    
    mytext = "Hello Mr. Adam, how are you? I hope everything is going well. Today is a good day, see you dude."
    print(sent_tokenize(mytext))

    输出如下:

    ['Hello Mr. Adam, how are you?', 'I hope everything is going well.', 'Today is a good day, see you dude.']

    这才是正确的拆分。

    接下来试试单词tokenizer:

    from nltk.tokenize import word_tokenize
    
    mytext = "Hello Mr. Adam, how are you? I hope everything is going well. Today is a good day, see you dude."
    print(word_tokenize(mytext))

    输出如下:

    ['Hello', 'Mr.', 'Adam', ',', 'how', 'are', 'you', '?', 'I', 'hope', 'everything', 'is', 'going', 'well', '.', 'Today', 'is', 'a', 'good', 'day', ',', 'see', 'you', 'dude', '.']

    Mr.这个词也没有被分开。NLTK使用的是punkt模块的PunktSentenceTokenizer,它是NLTK.tokenize的一部分。而且这个tokenizer经过训练,可以适用于多种语言。

    非英文Tokenize

    Tokenize时可以指定语言:

    from nltk.tokenize import sent_tokenize
    
    mytext = "Bonjour M. Adam, comment allez-vous? J'espère que tout va bien. Aujourd'hui est un bon jour."
    print(sent_tokenize(mytext,"french"))

    输出结果如下:

    ['Bonjour M. Adam, comment allez-vous?', "J'espère que tout va bien.", "Aujourd'hui est un bon jour."]

    同义词处理

    使用nltk.download()安装界面,其中一个包是WordNet。

    WordNet是一个为自然语言处理而建立的数据库。它包括一些同义词组和一些简短的定义。

    您可以这样获取某个给定单词的定义和示例:

    from nltk.corpus import wordnet
    
    syn = wordnet.synsets("pain")
    print(syn[0].definition())
    print(syn[0].examples())

    输出结果是:

    a symptom of some physical hurt or disorder
    ['the patient developed severe pain and distension']

    WordNet包含了很多定义:

    from nltk.corpus import wordnet
    
    syn = wordnet.synsets("NLP")
    print(syn[0].definition())
    syn = wordnet.synsets("Python")
    print(syn[0].definition())

    结果如下:

    the branch of information science that deals with natural language information
    large Old World boas
    

    可以像这样使用WordNet来获取同义词:

    from nltk.corpus import wordnet
    
    synonyms = []
    for syn in wordnet.synsets('Computer'):
        for lemma in syn.lemmas():
            synonyms.append(lemma.name())
    print(synonyms)

    输出:

    ['computer', 'computing_machine', 'computing_device', 'data_processor', 'electronic_computer', 'information_processing_system', 'calculator', 'reckoner', 'figurer', 'estimator', 'computer']

    反义词处理

    也可以用同样的方法得到反义词:

    from nltk.corpus import wordnet
    
    antonyms = []
    for syn in wordnet.synsets("small"):
        for l in syn.lemmas():
            if l.antonyms():
                antonyms.append(l.antonyms()[0].name())
    print(antonyms)
    

    输出:

    ['large', 'big', 'big']

    词干提取

    语言形态学和信息检索里,词干提取是去除词缀得到词根的过程,例如working的词干为work。

    搜索引擎在索引页面时就会使用这种技术,所以很多人为相同的单词写出不同的版本。

    有很多种算法可以避免这种情况,最常见的是波特词干算法。NLTK有一个名为PorterStemmer的类,就是这个算法的实现:

    from nltk.stem import PorterStemmer
    
    stemmer = PorterStemmer()
    print(stemmer.stem('working'))
    print(stemmer.stem('worked'))

    输出结果是:

    work
    work

    还有其他的一些词干提取算法,比如 Lancaster词干算法。

    非英文词干提取

    除了英文之外,SnowballStemmer还支持13种语言。

    支持的语言:

    from nltk.stem import SnowballStemmer
    
    print(SnowballStemmer.languages)
    
    'danish', 'dutch', 'english', 'finnish', 'french', 'german', 'hungarian', 'italian', 'norwegian', 'porter', 'portuguese', 'romanian', 'russian', 'spanish', 'swedish'

    你可以使用SnowballStemmer类的stem函数来提取像这样的非英文单词:

    from nltk.stem import SnowballStemmer
    
    french_stemmer = SnowballStemmer('french')
    
    print(french_stemmer.stem("French word"))

    单词变体还原

    单词变体还原类似于词干,但不同的是,变体还原的结果是一个真实的单词。不同于词干,当你试图提取某些词时,它会产生类似的词:

    from nltk.stem import PorterStemmer
    
    stemmer = PorterStemmer()
    
    print(stemmer.stem('increases'))

    结果:

    increas

    现在,如果用NLTK的WordNet来对同一个单词进行变体还原,才是正确的结果:

    from nltk.stem import WordNetLemmatizer
    
    lemmatizer = WordNetLemmatizer()
    
    print(lemmatizer.lemmatize('increases'))

    结果:

    increase

    结果可能会是一个同义词或同一个意思的不同单词。

    有时候将一个单词做变体还原时,总是得到相同的词。

    这是因为语言的默认部分是名词。要得到动词,可以这样指定:

    from nltk.stem import WordNetLemmatizer
    
    lemmatizer = WordNetLemmatizer()
    
    print(lemmatizer.lemmatize('playing', pos="v"))

    结果:

    play

    实际上,这也是一种很好的文本压缩方式,最终得到文本只有原先的50%到60%。

    结果还可以是动词(v)、名词(n)、形容词(a)或副词(r):

    from nltk.stem import WordNetLemmatizer
    
    lemmatizer = WordNetLemmatizer()
    print(lemmatizer.lemmatize('playing', pos="v"))
    print(lemmatizer.lemmatize('playing', pos="n"))
    print(lemmatizer.lemmatize('playing', pos="a"))
    print(lemmatizer.lemmatize('playing', pos="r"))
    

    输出:

    play
    playing
    playing
    playing
    

    词干和变体的区别

    通过下面例子来观察:

    from nltk.stem import WordNetLemmatizer
    from nltk.stem import PorterStemmer
    
    stemmer = PorterStemmer()
    lemmatizer = WordNetLemmatizer()
    print(stemmer.stem('stones'))
    print(stemmer.stem('speaking'))
    print(stemmer.stem('bedroom'))
    print(stemmer.stem('jokes'))
    print(stemmer.stem('lisa'))
    print(stemmer.stem('purple'))
    print('----------------------')
    print(lemmatizer.lemmatize('stones'))
    print(lemmatizer.lemmatize('speaking'))
    print(lemmatizer.lemmatize('bedroom'))
    print(lemmatizer.lemmatize('jokes'))
    print(lemmatizer.lemmatize('lisa'))
    print(lemmatizer.lemmatize('purple'))
    

    输出:

    stone
    speak
    bedroom
    joke
    lisa

    purpl

    stone
    speaking
    bedroom
    joke
    lisa
    purple

    词干提取不会考虑语境,这也是为什么词干提取比变体还原快且准确度低的原因。

    个人认为,变体还原比词干提取更好。单词变体还原返回一个真实的单词,即使它不是同一个单词,也是同义词,但至少它是一个真实存在的单词。

    如果你只关心速度,不在意准确度,这时你可以选用词干提取。

    在此NLP教程中讨论的所有步骤都只是文本预处理。在以后的文章中,将会使用Python NLTK来实现文本分析。

    我已经尽量使文章通俗易懂。希望能对你有所帮助。

    展开全文
  • 自然语言处理大体包括了自然语言理解和自然语言生成两个部分,实现人机间自然语言通信意味着要使计算机既能理解自然语言文本的意义,也能以自然语言文本来表达给定的意图、思想等,前者称为自然语言理解,后者称为...

    自然语言处理大体包括了自然语言理解和自然语言生成两个部分,实现人机间自然语言通信意味着要使计算机既能理解自然语言文本的意义,也能以自然语言文本来表达给定的意图、思想等,前者称为自然语言理解,后者称为自然语言生成。
      自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。自然语言处理的终极目标是用自然语言与计算机进行通信,使人们可以用自己最习惯的语言来使用计算机,而无需再花大量的时间和精力去学习不很自然和习惯的各种计算机语言。
      
      针对一定应用,具有相当自然语言处理能力的实用系统已经出现,典型的例子有:多语种数据库和专家系统的自然语言接口、各种机器翻译系统、全文信息检索系统、自动文摘系统等。
      国内BAT、京东、科大讯飞都有涉及自然语言处理的业务,另外还出现了爱特曼、出门问问、思必驰、蓦然认知、三角兽科技、森亿智能、乂学教育、智齿客服等新兴企业。
      人工智能、大数据、云计算和物联网的未来发展值得重视,均为前沿产业,多智时代专注于人工智能和大数据的入门和科谱,在此为你推荐几篇优质好文:
    如何快速入门NLP自然语言处理概述
    http://www.duozhishidai.com/article-11742-1.html
    自然语言处理(NLP)知识结构总结
    http://www.duozhishidai.com/article-10036-1.html
    NLP自然语言处理技术,在人工智能法官中的应用是什么?
    http://www.duozhishidai.com/article-2325-1.html


    多智时代-人工智能大数据学习入门网站|人工智能、大数据、物联网云计算的学习交流网站

    多智时代-人工智能大数据学习入门网站|人工智能、大数据、云计算、物联网的学习服务的好平台
    展开全文
  • 命名实体识别作为自然语言处理的基础技术之一,在自然语言处理上游各个任务(问答系统、机器翻译、对话系统等)重扮演者十分重要的角色,因此深入掌握命名实体识别技术,是作为自然语言处理从业者毕本技能,本课程...
  • Tensorflow-自然语言处理

    千人学习 2020-06-24 14:31:41
    课程以Tensorflow作为机器学习的核心武器,基于自然语言处理热点话题进行案例实战。选择当下热门模型,使用真实数据集进行实战演示,通俗讲解整个算法模型并使用tensorflow进行实战,详解其中的原理与代码实现。
  • 自然语言处理

    2019-04-25 10:29:21
    自然语言处理 核心问题 文本分类、关键词提取、情感分析、语义消歧、主题模型、机器翻译、问题回答、汉语分词、垂直领域的对话机器人

    自然语言处理

    • 定义

      自然语言处理,简称NLP,是一种利用计算机为工具对人类特有的书面形式、口头形式的自然语言信息进行各种类型处理和加工的技术

    • 核心问题

      文本分类、关键词提取、情感分析、语义消歧、主题模型、机器翻译、问题回答、汉语分词、垂直领域的对话机器人

    NLTK

    1. Tokenization(标记化/分词)

      文本是不能成段送入模型中进行分析的,我们通常会把文本切成独立含义的字、词或者短语,这个过程叫做Tokenization,这通常是大家结果自然语言处理问题的第一步。在NLTK中提供了两种不同方式的tokenization,sentence tokenization和work tokenization,前者把文本进行断句,后者对文本进行分词

    2. 简单使用

       import nltk
       from nltk import word_tokenize, sent_tokenize
       corpus = open('./data/test.txt','r').read()
       # 断句
       sentences = sent_tokenize(corpus)
       # 分词
       words = word_tokenize(corpus)
      
    3. 停用词

      在自然语言处理的很多任务中,我们处理的主体“文本”中有一些功能词经常出现,然而对于最后的任务目标并没有帮助,甚至会对统计方法带来一些干扰,我们把这类词叫做停用词,通常我们会用一个停用词表把它们过滤出来。比如英语当中的定冠词/不定冠词(a,an,the等)。

       # 导入内置停用词
       from nltk.corpus import stopwords
       stop_words = stopwords.words('english')
       filtered_corpus = [w for w in words if not w in stop_words]
      
    4. 词性标注

      词性(part-of-speech)是词汇基本的语法属性,通常也称为词性。

      词性标注(part-of-speech tagging),又称为词类标注或者简称标注,是指为分词结果中的每个单词标注一个正确的词性的程序,也即确定每个词是名词、动词、形容词或者其他词性的过程。

      词性标注是很多NLP任务的预处理步骤,如句法分析,经过词性标注后的文本会带来很大的便利性,但也不是不可或缺的步骤。 词性标注的最简单做法是选取最高频词性,主流的做法可以分为基于规则和基于统计的方法,包括:
      a. 基于最大熵的词性标注
      b. 基于统计最大概率输出词性
      c. HMM的词性标注

       from nltk import pos_tag
       tags = pos_tag(filtered_corpus)
      
    5. chunking/组块分析

      分块是命名实体识别的基础,词性给出来的句子成分的属性,但有时候,更多的信息(比如句子句法结构)可以帮助我们对句子中的模式挖掘更充分。举个例子,”古天乐赞助了很多小学“中的头部古天乐是一个人名(命名实体)

      组块分析是一个非常有用的从文本抽取信息的方法,提取组块需要用到正则表达式:

       from nltk.chunk import RegexpParser
       from nltk import sent_tokenize,word_tokenize
       # 写一个匹配名词的模式
       pattern = """
           NP: {<JJ>*<NN>+}
           {<JJ>*<NN><CC>*<NN>+}
           """
       # 定义组块分析器
       chunker = RegexpParser(pattern)
       # 一段文本
       text = """
       he National Wrestling Association was an early professional wrestling sanctioning body created in 1930 by 
       the National Boxing Association (NBA) (now the World Boxing Association, WBA) as an attempt to create
       a governing body for professional wrestling in the United States. The group created a number of "World" level 
       championships as an attempt to clear up the professional wrestling rankings which at the time saw a number of 
       different championships promoted as the "true world championship". The National Wrestling Association's NWA 
       World Heavyweight Championship was later considered part of the historical lineage of the National Wrestling 
       Alliance's NWA World Heavyweight Championship when then National Wrestling Association champion Lou Thesz 
       won the National Wrestling Alliance championship, folding the original championship into one title in 1949."""
       # 分句
       tokenized_sentence = nltk.sent_tokenize(text)
       # 分词
       tokenized_words = [nltk.word_tokenize(sentence) for sentence in tokenized_sentence]
       # 词性标注
       tagged_words = [nltk.pos_tag(word) for word in tokenized_words]
       # 识别NP组块
       word_tree = [chunker.parse(word) for word in tagged_words]
       word_tree[0].draw() # 会跳出弹窗,显示如下的解析图
      
    6. 命名实体识别

      命名实体识别(Named Entity Recognition,简称NER),又称作“专名识别”,是指识别文本中具有特定意义的实体,主要包括人名、地名、机构名、专有名词等。通常包括两部分:1) 实体边界识别;2) 确定实体类别(人名、地名、机构名或其他)。

       from nltk import ne_chunk, pos_tag,  word_tokenize
       sentence = "John studies at Stanford University."
       print(ne_chunk(pos_tag(word_tokenize(sentence))))
      
    7. Stemming和Lemmatizing

      很多时候我们需要对英文当中的时态语态等做归一化,这个时候我们就需要stemming和lemmatizing这样的操作了。比如"running"是进行时,但是这个词表征的含义和"run"是一致的,我们在识别语义的时候,希望能消除这种差异化。

       # 可以用PorterStemmer
       from nltk.stem import PorterStemmer
       stemmer = PorterStemmer()
       stemmer.stem("running")
       stemmer.stem("makes")
       stemmer.stem("swimming")
       # 也可以用
       from nltk.stem import SnowballStemmer
       stemmer2 = SnowballStemmer("english")
       stemmer2.stem("growing")
       # Lemmatization和Stemmer很类似,不同的地方在于它还考虑了词义关联等信息
       # Stemmer的速度更快,但是它通常只是一系列的规则
       from nltk.stem import WordNetLemmatizer
       lemmatizer = WordNetLemmatizer()
       lemmatizer.lemmatize("makes")
      
    8. WordNet与词义分析

       from nltk.corpus import wordnet as wn
       wn.synsets('man')
       # 第一种词义
       wn.synsets('man')[0].definition()
       # 第二种词义
       wn.synsets('man')[1].definition()
       wn.synsets('dog')
       # 查词义
       wn.synsets('dog')[0].definition()
       # 造句
       dog = wn.synset('dog.n.01')
       dog.examples()[0]
       # 上位词
       dog.hypernyms()
      

    spaCy

    • 简单使用

        import spacy
        nlp = spacy.load('en')
        doc = nlp('Hello World! My name is HanXiaoyang')
        for token in doc:
            print('"' + token.text + '"')
        #每个token对象有着非常丰富的属性,如下的方式可以取出其中的部分属性。
        doc = nlp("Next week I'll   be in Shanghai.")
        for token in doc:
            print("{0}\t{1}\t{2}\t{3}\t{4}\t{5}\t{6}\t{7}".format(
                token.text,
                token.idx,
                token.lemma_,
                token.is_punct,
                token.is_space,
                token.shape_,
                token.pos_,
                token.tag_
            ))
        # 断句
        doc = nlp("Hello World! My name is HanXiaoyang")
        for sent in doc.sents:
            print(sent)
      
    • 词性标注

        # 词性标注
        doc = nlp("Next week I'll be in Shanghai.")
        print([(token.text, token.tag_) for token in doc])
      
    • 命名实体识别

      命名实体识别(Named Entity Recognition,简称NER),又称作“专名识别”,是指识别文本中具有特定意义的实体,主要包括人名、地名、机构名、专有名词等。通常包括两部分:1) 实体边界识别;2) 确定实体类别(人名、地名、机构名或其他)。

        doc = nlp("Next week I'll be in Shanghai.")
        for ent in doc.ents:
            print(ent.text, ent.label_)
        from nltk.chunk import conlltags2tree
        
        doc = nlp("Next week I'll be in Shanghai.")
        iob_tagged = [
            (
                token.text, 
                token.tag_, 
                "{0}-{1}".format(token.ent_iob_, token.ent_type_) if token.ent_iob_ != 'O' else token.ent_iob_
            ) for token in doc
        ]
         
        print(iob_tagged)
        # 按照nltk.Tree的格式显示
        print(conlltags2tree(iob_tagged))
      

    spaCy中包含的命名实体非常丰富,如下例所示:

    doc = nlp("I just bought 2 shares at 9 a.m. because the stock went up 30% in just 2 days according to the WSJ")
    for ent in doc.ents:
        print(ent.text, ent.label_)
    

    还可以用非常漂亮的可视化做显示:

    from spacy import displacy
     
    doc = nlp('I just bought 2 shares at 9 a.m. because the stock went up 30% in just 2 days according to the WSJ')
    displacy.render(doc, style='ent', jupyter=True)
    
    • chunking/组块分析

        doc = nlp("Wall Street Journal just published an interesting piece on crypto currencies")
        for chunk in doc.noun_chunks:
            print(chunk.text, chunk.label_, chunk.root.text)
      
    • 句法依存解析

        doc = nlp('Wall Street Journal just published an interesting piece on crypto currencies')
         
        for token in doc:
            print("{0}/{1} <--{2}-- {3}/{4}".format(
                token.text, token.tag_, token.dep_, token.head.text, token.head.tag_))
        from spacy import displacy
         
        doc = nlp('Wall Street Journal just published an interesting piece on crypto currencies')
        displacy.render(doc, style='dep', jupyter=True, options={'distance': 90})
      
    • 词向量使用

      NLP中有一个非常强大的文本表示学习方法叫做word2vec,通过词的上下文学习到词语的稠密向量化表示,同时在这个表示形态下,语义相关的词在向量空间中会比较接近。也有类似v(爷爷)-v(奶奶) ≈ v(男人)-v(女人)的关系。

        nlp = spacy.load('en_core_web_lg')
        print(nlp.vocab['banana'].vector)
        from scipy import spatial
        
        # 余弦相似度计算
        cosine_similarity = lambda x, y: 1 - spatial.distance.cosine(x, y)
        
        # 男人、女人、国王、女王 的词向量
        man = nlp.vocab['man'].vector
        woman = nlp.vocab['woman'].vector
        queen = nlp.vocab['queen'].vector
        king = nlp.vocab['king'].vector
         
        # 我们对向量做一个简单的计算,"man" - "woman" + "queen"
        maybe_king = man - woman + queen
        computed_similarities = []
        
        # 扫描整个词库的词向量做比对,召回最接近的词向量
        for word in nlp.vocab:
            if not word.has_vector:
                continue
         
            similarity = cosine_similarity(maybe_king, word.vector)
            computed_similarities.append((word, similarity))
        
        # 排序与最接近结果展示
        computed_similarities = sorted(computed_similarities, key=lambda item: -item[1])
        print([w[0].text for w in computed_similarities[:10]])
      
    • 词汇与文本相似度

        # 词汇语义相似度(关联性)
        banana = nlp.vocab['banana']
        dog = nlp.vocab['dog']
        fruit = nlp.vocab['fruit']
        animal = nlp.vocab['animal']
         
        print(dog.similarity(animal), dog.similarity(fruit)) # 0.6618534 0.23552845
        print(banana.similarity(fruit), banana.similarity(animal)) # 0.67148364 0.2427285
        # 文本语义相似度(关联性)
        target = nlp("Cats are beautiful animals.")
         
        doc1 = nlp("Dogs are awesome.")
        doc2 = nlp("Some gorgeous creatures are felines.")
        doc3 = nlp("Dolphins are swimming mammals.")
         
        print(target.similarity(doc1))  # 0.8901765218466683
        print(target.similarity(doc2))  # 0.9115828449161616
        print(target.similarity(doc3))  # 0.7822956752876101
      

    中文文本基本任务与处理

    • 分词

      对于中文和日文这样的特殊亚洲语系文本而言,字和字之间是紧密相连的,单纯从文本形态上无法区分具备独立含义的词(拉丁语系纯天然由空格分隔不同的word),而不同的词以不同的方式排布,可以表达不同的内容和情感,因此在很多中文任务中,我们需要做的第一个处理叫做分词。

      这是一个非常基础的功能,但是会较大程度影响下游任务(机器翻译、情感分析、文本理解)的效果。

      目前主流的分词方法主要是基于词典匹配的分词方法(正向最大匹配法、逆向最大匹配法和双向匹配分词法等)和基于统计的分词方法(HMM、CRF、和深度学习);主流的分词工具库包括 中科院计算所NLPIR、哈工大LTP、清华大学THULAC、Hanlp分词器、Python jieba工具库等。

    • 停用词与N-gram

      N-gram在中文中叫做n元语法,指文本中连续出现的n个语词。n元语法模型是基于(n-1)阶马尔可夫链的一种概率语言模型,通过n个语词出现的概率来推断语句的结构。关于语言模型的更多内容,我们在后续的课程会详细提到。

    • 词性标注

    • 句法依存分析

    • 命名实体识别

    • 关键词抽取

    jieba工具使用

    • 基本分词函数与用法

      jieba.cut 以及 jieba.cut_for_search 返回的结构都是一个可迭代的 generator,可以使用 for 循环来获得分词后得到的每一个词语(unicode)
      jieba.cut 方法接受三个输入参数:
      a. 需要分词的字符串
      b. cut_all 参数用来控制是否采用全模式
      c. HMM 参数用来控制是否使用 HMM 模型
      jieba.cut_for_search 方法接受两个参数
      a. 需要分词的字符串
      b. 是否使用 HMM 模型。

        # encoding=utf-8
        import jieba
        
        seg_list = jieba.cut("我在网易云课堂学习自然语言处理", cut_all=True)
        print("Full Mode: " + "/ ".join(seg_list))  # 全模式
        
        seg_list = jieba.cut("我在网易云课堂学习自然语言处理", cut_all=False)
        print("Default Mode: " + "/ ".join(seg_list))  # 精确模式
        
        seg_list = jieba.cut("他毕业于北京航空航天大学,在百度深度学习研究院进行研究")  # 默认是精确模式
        print(", ".join(seg_list))
        
        seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在斯坦福大学深造")  # 搜索引擎模式
        print(", ".join(seg_list))
      
    • 添加用户字典

      很多时候我们需要针对自己的场景进行分词,会有一些领域内的专有词汇。
      1.可以用jieba.load_userdict(file_name)加载用户字典
      2.少量的词汇可以自己用下面方法手动添加:
      用 add_word(word, freq=None, tag=None) 和 del_word(word) 在程序中动态修改词典
      用 suggest_freq(segment, tune=True) 可调节单个词语的词频,使其能(或不能)被分出来。

        print('/'.join(jieba.cut('如果放到旧字典中将出错。', HMM=False)))
        jieba.suggest_freq(('中', '将'), True)
        print('/'.join(jieba.cut('如果放到旧字典中将出错。', HMM=False)))
      
    • 词性标注

        import jieba.posseg as pseg
        words = pseg.cut("我在网易云课堂学习自然语言处理")
        for word, flag in words:
            print('%s %s' % (word, flag))
      
    • 关键词抽取

    1. 基于 TF-IDF 算法的关键词抽取

      import jieba.analyse
      jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())
      a. sentence 为待提取的文本
      tb. opK 为返回几个 TF/IDF 权重最大的关键词,默认值为 20
      c. withWeight 为是否一并返回关键词权重值,默认值为 False
      d. allowPOS 仅包括指定词性的词,默认值为空,即不筛选

       import jieba.analyse as analyse
       lines = open('data/NBA.txt').read()
       print("  ".join(analyse.extract_tags(lines, topK=20, withWeight=False, allowPOS=())))
       
       lines = open('data/西游记.txt', encoding='gb18030').read()
       print("  ".join(analyse.extract_tags(lines, topK=20, withWeight=False, allowPOS=())))
      
    2. 基于TextRank算法的关键词抽取

      jieba.analyse.textrank(sentence, topK=20, withWeight=False, allowPOS=(‘ns’, ‘n’, ‘vn’, ‘v’)) 直接使用,接口相同,注意默认过滤词性。
      jieba.analyse.TextRank() 新建自定义 TextRank 实例

      基本思想:
      将待抽取关键词的文本进行分词
      以固定窗口大小(默认为5,通过span属性调整),词之间的共现关系,构建图
      计算图中节点的PageRank,注意是无向带权图

       import jieba.analyse as analyse
       lines = open('data/NBA.txt').read()
       print("  ".join(analyse.textrank(lines, topK=20, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v'))))
       print("---------------------我是分割线----------------")
       print("  ".join(analyse.textrank(lines, topK=20, withWeight=False, allowPOS=('ns', 'n'))))
       lines = open('data/西游记.txt', encoding='gb18030').read()
       print("  ".join(analyse.textrank(lines, topK=20, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v'))))
      
    3. 使用

       import jieba.analyse as analyse
       lines = open('data/NBA.txt').read()
       print("  ".join(analyse.textrank(lines, topK=20, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v'))))
       print("---------------------我是分割线----------------")
       print("  ".join(analyse.textrank(lines, topK=20, withWeight=False, allowPOS=('ns', 'n'))))
       
       lines = open('data/西游记.txt', encoding='gb18030').read()
       print("  ".join(analyse.textrank(lines, topK=20, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v'))))
      
    4. 可视化

       import warnings
       warnings.filterwarnings("ignore")
       import jieba    #分词包
       import numpy    #numpy计算包
       import codecs   #codecs提供的open方法来指定打开的文件的语言编码,它会在读取的时候自动转换为内部unicode 
       import pandas as pd  
       import matplotlib.pyplot as plt
       %matplotlib inline
       import matplotlib
       matplotlib.rcParams['figure.figsize'] = (10.0, 5.0)
       from wordcloud import WordCloud#词云包
       
       # pandas读取数据
       df = pd.read_csv("./data/entertainment_news.csv", encoding='utf-8').dropna()
       # 转成list
       content=df["content"].values.tolist()
       # 分词与统计词频
       segment=[]
       for line in content:
           try:
               segs=jieba.lcut(line)
               for seg in segs:
                   if len(seg)>1 and seg!='\r\n':
                       segment.append(seg)
           except:
               print(line)
               continue
       
       words_df=pd.DataFrame({'segment':segment})
       stopwords=pd.read_csv("data/stopwords.txt",index_col=False,quoting=3,sep="\t",names=['stopword'], encoding='utf-8')#quoting=3全不引用
       words_df=words_df[~words_df.segment.isin(stopwords.stopword)]
       
       words_stat=words_df.groupby(by=['segment'])['segment'].agg({"计数":numpy.size})
       words_stat=words_stat.reset_index().sort_values(by=["计数"],ascending=False)
       words_stat.head()
       
       matplotlib.rcParams['figure.figsize'] = (10.0, 6.0)
       wordcloud=WordCloud(font_path="data/simhei.ttf",background_color="black",max_font_size=80)
       word_frequence = {x[0]:x[1] for x in words_stat.head(1000).values}
       wordcloud=wordcloud.fit_words(word_frequence)
       plt.imshow(wordcloud)
       
       from scipy.misc import imread
       matplotlib.rcParams['figure.figsize'] = (15.0, 15.0)
       from wordcloud import WordCloud,ImageColorGenerator
       bimg=imread('image/entertainment.jpeg')
       wordcloud=WordCloud(background_color="white",mask=bimg,font_path='data/simhei.ttf',max_font_size=200)
       word_frequence = {x[0]:x[1] for x in words_stat.head(1000).values}
       wordcloud=wordcloud.fit_words(word_frequence)
       bimgColors=ImageColorGenerator(bimg)
       plt.axis("off")
       plt.imshow(wordcloud.recolor(color_func=bimgColors))
      
    5. 排序使用

       import jieba.analyse as analyse
       import pandas as pd
       df = pd.read_csv("./data/technology_news.csv", encoding='utf-8').dropna()
       lines=df.content.values.tolist()
       content = "".join(lines)
       print(analyse.extract_tags(content, topK=30, withWeight=False, allowPOS=()))
       
       import jieba.analyse as analyse
       import pandas as pd
       df = pd.read_csv("./data/military_news.csv", encoding='utf-8').dropna()
       lines=df.content.values.tolist()
       content = "".join(lines)
       print(analyse.extract_tags(content, topK=30, withWeight=False, allowPOS=()))
       
       #TextRank
       import jieba.analyse as analyse
       import pandas as pd
       df = pd.read_csv("./data/military_news.csv", encoding='utf-8')
       df = df.dropna()
       lines=df.content.values.tolist()
       content = "".join(lines)
       
       print(analyse.textrank(content, topK=20, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v')))
       print("---------------------我是分割线----------------")
       print(analyse.textrank(content, topK=20, withWeight=False, allowPOS=('ns', 'n')))
      
    展开全文
  • 自然语言处理(一)

    2020-09-14 09:54:08
    自然语言处理 自然语言处理(Natural Language Processing,NLP)研究的是如何通过机器学习等技术,让计算机学会处理人类语言,乃至实现终极目标——理解人类语言或人工智能。著名的图灵测试就是根据机器是否能像...

    自然语言处理

    • 自然语言处理(Natural Language Processing,NLP)研究的是如何通过机器学习等技术,让计算机学会处理人类语言,乃至实现终极目标——理解人类语言或人工智能。著名的图灵测试就是根据机器是否能像人类一样理解语言来判断它是否具备人工智能。
    • 自然语言的复杂程度vs编程语言:词汇量、结构化、歧义性、容错性、易变性、简略性
    • 自然语言处理系统的输入源一共有3个,即语音、图像与文本。语音和图像这两种形式一般经过识别后转化为文字,转化后就可以进行后续的NLP任务了。
    • 词法分析的主要任务是将文本分隔为有意义的词语(中文分词),确定每个词语的类别和浅层的歧义消除(词性标注),并且识别出一些较长的专有名词(命名实体识别)。对中文而言,词法分析常常是后续高级任务的基础。
    • 词法分析之后,所分析出来的每个单词和附有自己词性及其他标签的数据,抽取出一部分有用的信息,关键词、专业术语等。还可以对文本进行分类和聚类操作,找出相类似的文本。需要得到句子的主谓宾结构,这就是句法分析得到的结果。
    • 相较于句法分析,语义分析侧重语义而非语法。它包括词义消歧、语义角色标注(标注句子中的谓语与其他成分的关系)乃至语义依存分析(分析句子中词语之间的语义关系)。

    机器学习

    • 机器学习指的是计算机通过某项任务的经验数据提高了在该项任务上的能力。
    • 模型是对现实问题的数学抽象,由一个假设函数以及一系列参数构成。
    • 特征指的是事物的特点转化的数值。如何挑选特征,如何设计特征模板,这称作特征工程。特征越多,参数就越多;参数越多,模型就越复杂。
    • 样本的集合在机器学习领域称作数据集,在自然语言处理领域称作语料库
    • 如果数据集附带标准答案 y,则此时的学习算法称作监督学习。学习一遍误差还不够小,需要反复学习、反复调整。此时的算法是一种迭代式的算法,每一遍学习称作一次迭代。这种在有标签的数据集上迭代学习的过程称作训练
    • 如果我们只给机器做题,却不告诉它参考答案,机器仍然可以学到知识吗?可以,此时的学习称作无监督学习,而不含标准答案的数据集被称作无标注的数据集。无监督学习一般用于聚类降维,降维指的是将样本点从高维空间变换成低维空间的过程。
    • 半监督学习:如果我们训练多个模型,然后对同一个实例执行预测,会得到多个结果。如果这些结果多数一致,则可以将该实例和结果放到一起作为新的训练样本,用力啊扩充训练集。这样的算法被称为半监督学习。
    • 强化学习:现实世界中的事物之间往往有很长的因果链:我们要正确地执行一系列彼此关联的决策,才能得到最终的成果。这类问题往往需要一边预测,一边根据环境的反馈规划下次决策。这类算法被称为强化学习。

    语料库

    • 中文分词语料库 指的是,由人工正确切分的句子集合。
    • 词性标注语料库 指的是切分并为每个词语制定一个词性的语料。
    • 命名实体识别语料库 人工标注了文本内部制作者关心的实体名词以及实体类别。
    • 句法分析语料库 汉语中常用的句法分析语料库有CTB(Chinese Treebank,中文树库)
    • 文本分类语料库 指的是人工标注了所属分类的文章构成的语料库。

    在这里插入图片描述

    展开全文
  • 5本自然语言处理书单-附pdf

    千次阅读 2019-05-24 15:10:26
    文章发布于公号【数智物语】(ID:decision_engine),关注公号不错过每一篇干货。...自然语言处理研究的内容包括但不限于如下分支领域:文本分类、信息抽取、自动摘要、智能问答、话题推荐、机器翻...
  • 中文自然语言处理入门实战

    万次阅读 多人点赞 2019-07-05 10:16:32
    本达人课,作为中文自然语言处理边学边实战的入门级教程,以小数据量的“简易版”实例,通过实战带大家快速掌握 NLP 在中文方面开发的基本能力。 本课程共包含 18 节。各小节之间并没有紧密耦合,但是整个内容还是...
  • 自然语言处理(NLP)知识结构总结

    万次阅读 多人点赞 2018-03-17 18:11:38
    自然语言处理知识太庞大了,网上也都是一些零零散散的知识,比如单独讲某些模型,也没有来龙去脉,学习起来较为困难,于是我自己总结了一份知识体系结构,不足之处,欢迎指正。内容来源主要参考黄志洪老师的自然语言...
  • 什么是自然语言处理自然语言处理(NLP)是指机器理解并解释人类写作、说话方式的能力。 NLP的目标是让计算机/机器在理解语言上像人类一样智能。最终目标是弥补人类交流(自然语言)和计算机理解(机器语言)之间...
  • NLP,中文叫自然语言处理,简单来说,是一门让计算机理解、分析以及生成自然语言的学科,大概的研究过程是:研制出可以表示语言能力的模型——提出各种方法来不断提高语言模型的能力——根据语言模型来设计各种应用...
  • 给外行能看懂的科普:这就叫自然语言处理如何向文科同学科普自然语言处理(NLP)? 刘知远,NLPer前几年曾经马少平老师的引荐,为某科普图书写过一篇短文介绍自然语言处理。如果只是介绍NLP的概念、任务和挑战,...
  • 自然语言处理入门

    千次阅读 2020-04-13 08:48:14
    自然语言处理入门自然语言处理入门自然语言的概念自然语言的理解自然语言处理的概念自然语言处理的相关技术自然语言处理难点相关学习链接 自然语言处理入门 自然语言的概念 自然语言的理解 自然语言处理(NLP) ...
  • 自然语言处理定义: 自然语言处理是一门计算机科学、人工智能以及语言学的交叉学科。虽然语言只是人工智能的一部分(人工智能还包括计算机视觉等),但它是非常独特的一部分。这个星球上有许多生物拥有超过人类的...
  • 自然语言处理中的N-Gram模型详解

    万次阅读 多人点赞 2017-06-29 17:09:11
    N-Gram(有时也称为N元模型)是自然语言处理中一个非常重要的概念,通常在NLP中,人们基于一定的语料库,可以利用N-Gram来预计或者评估一个句子是否合理。另外一方面,N-Gram的另外一个作用是用来评估两个字符串之间...
  • 自然语言处理综述

    千次阅读 2018-12-25 11:08:16
    本文从两篇论文出发先简要介绍了自然语言处理的基本分类和基本概念,再向读者展示了深度学习中的 NLP。这两篇论文都是很好的综述性入门论文,希望详细了解自然语言处理的读者可以进一步阅读这两篇论文。 第一部分...
  • 如何成为一名自然语言处理工程师

    万次阅读 多人点赞 2018-01-18 12:28:48
    自然语言处理和大部分的机器学习或者人工智能领域的技术一样,是一个涉及到多个技能、技术和领域的综合体。 所以自然语言处理工程师会有各种各样的背景,大部分都是在工作中自学或者是跟着项目一起学习的,这其中也...
  • 自然语言处理笔记-哈工大 关毅

    千次阅读 2018-12-08 20:53:01
    文章目录目录前言绪论课程课程定性课程应用个人经验统计自然语言处理自然语言处理绪论自然语言处理绪论 二自然语言处理绪论 三自然语言处理绪论 四 前言 硕士生涯结束,开始专心做一件自己觉得有用的工具,先做工程...
  • 1、自然语言处理圣经---《自然语言处理综论》2、视频课程《深度学习与自然语言处理-2018》3、Natural Language Processing (NLP)4、吴恩达经典课程 - Machine Learning —Coursera5、斯坦福 Natural Language ...
1 2 3 4 5 ... 20
收藏数 295,929
精华内容 118,371
关键字:

自然语言处理