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

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

    展开全文
  • 自然语言处理(NLP)知识结构总结

    万次阅读 多人点赞 2018-03-17 18:04:35
    自然语言处理知识太庞大了,网上也都是一些零零散散的知识,比如单独讲某些模型,也没有来龙去脉,学习起来较为困难,于是我自己总结了一份知识体系结构,不足之处,欢迎指正。内容来源主要参考黄志洪老师的自然语言...
           自然语言处理知识太庞大了,网上也都是一些零零散散的知识,比如单独讲某些模型,也没有来龙去脉,学习起来较为困难,于是我自己总结了一份知识体系结构,不足之处,欢迎指正。内容来源主要参考黄志洪老师的自然语言处理课程。主要参考书为宗成庆老师的《统计自然语言处理》,虽然很多内容写的不清楚,但好像中文NLP书籍就这一本全一些,如果想看好的英文资料,可以到我的GitHub上下载:  
    http://github.com/lovesoft5/ml

      下面直接开始正文:

        一、自然语言处理概述

                   1)自然语言处理:利用计算机为工具,对书面实行或者口头形式进行各种各样的处理和加工的技术,是研究人与人交际中以及人与计算机交际中的演员问题的一门学科,是人工智能的主要内容。
                  2)自然语言处理是研究语言能力和语言应用的模型,建立计算机(算法)框架来实现这样的语言模型,并完善、评测、最终用于设计各种实用系统。
                  3)研究问题(主要):
                                       信息检索
                                       机器翻译
                                       文档分类
                                       问答系统
                                       信息过滤
                                       自动文摘
                                       信息抽取
                                       文本挖掘
                                       舆情分析
                                       机器写作
                                       语音识别
               研究模式:自然语言场景问题,数学算法,算法如何应用到解决这些问题,预料训练,相关实际应用
                   自然语言的困难:
                               场景的困难:语言的多样性、多变性、歧义性
                               学习的困难:艰难的数学模型(hmm,crf,EM,深度学习等)
                               语料的困难:什么的语料?语料的作用?如何获取语料?

        二、形式语言与自动机 

                   语言:按照一定规律构成的句子或者字符串的有限或者无限的集合。

                    描述语言的三种途径:

                                                  穷举法
                                                  文法(产生式系统)描述
                                                  自动机

                   自然语言不是人为设计而是自然进化的,形式语言比如:运算符号、化学分子式、编程语言

                   形式语言理论朱啊哟研究的是内部结构模式这类语言的纯粹的语法领域,从语言学而来,作为一种理解自然语言的句法规律,在计算机科学中,形式语言通常作为定义编程和语法结构的基础

                   形式语言与自动机基础知识:

                                                     集合论
                                                     图论
                   自动机的应用:

                                                1,单词自动查错纠正

                                                2,词性消歧(什么是词性?什么的词性标注?为什么需要标注?如何标注?)

                  形式语言的缺陷:

                                          1、对于像汉语,英语这样的大型自然语言系统,难以构造精确的文法

                                          2、不符合人类学习语言的习惯

                                          3、有些句子语法正确,但在语义上却不可能,形式语言无法排出这些句子

                                          4、解决方向:基于大量语料,采用统计学手段建立模型                              

        三、语言模型

               1)语言模型(重要):通过语料计算某个句子出现的概率(概率表示),常用的有2-元模型,3-元模型
               2)语言模型应用:

                                             语音识别歧义消除例如,给定拼音串:ta shi yan yan jiu saun fa de

                                             可能的汉字串:踏实烟酒算法的   他是研究酸法的      他是研究算法的,显然,最后一句才符合。

              3)语言模型的启示:

                                  1、开启自然语言处理的统计方法

                                  2、统计方法的一般步骤:               

                                                                     收集大量语料
                                                                     对语料进行统计分析,得出知识
                                                                     针对场景建立算法模型
                                                                     解释和应用结果
              4) 语言模型性能评价,包括评价目标,评价的难点,常用指标(交叉熵,困惑度)

              5)数据平滑:

                             数据平滑的概念,为什么需要平滑

                             平滑的方法,加一法,加法平滑法,古德-图灵法,J-M法,Katz平滑法

            6)语言模型的缺陷:

                            语料来自不同的领域,而语言模型对文本类型、主题等十分敏感

                             n与相邻的n-1个词相关,假设不是很成立。


       四、概率图模型,生成模型与判别模型,贝叶斯网络,马尔科夫链与隐马尔科夫模型(HMM)

                1)概率图模型概述(什么的概率图模型,参考清华大学教材《概率图模型》)

               2)马尔科夫过程(定义,理解)

          3)隐马尔科夫过程(定义,理解)

                  HMM的三个基本问题(定义,解法,应用)

                     注:第一个问题,涉及最大似然估计法,第二个问题涉及EM算法,第三个问题涉及维特比算法,内容很多,要重点理解,(参考书李航《统计学习方法》,网上博客,笔者github)

           

        五、马尔科夫网,最大熵模型,条件随机场(CRF)

                   1)HMM的三个基本问题的参数估计与计算

                   2)什么是熵

                   3)EM算法(应用十分广泛,好好理解)
                   4)HMM的应用
                   5)层次化马尔科夫模型与马尔科夫网络

                                             提出原因,HMM存在两个问题
                   6)最大熵马尔科夫模型
                                             优点:与HMM相比,允许使用特征刻画观察序列,训练高效
                                             缺点: 存在标记偏置问题

                   7)条件随机场及其应用(概念,模型过程,与HMM关系)
                                参数估计方法(GIS算法,改进IIS算法)

                                CRF基本问题:特征选取(特征模板)、概率计算、参数训练、解码(维特比)

                                应用场景:

                                                 词性标注类问题(现在一般用RNN+CRF)
                                                 中文分词(发展过程,经典算法,了解开源工具jieba分词)
                                                 中文人名,地名识别

                   8)  CRF++

        六、命名实体 识别,词性标注,内容挖掘、语义分析与篇章分析(大量用到前面的算法)

                1)命名实体识别问题

                                         相关概率,定义

                                         相关任务类型

                                         方法(基于规程->基于大规模语料库)

                  2)未登录词的解决方法(搜索引擎,基于语料)

                  3)CRF解决命名实体识别(NER)流程总结:

                           训练阶段:确定特征模板,不同场景(人名,地名等)所使用的特征模板不同,对现有语料进行分词,在分词结                      果基础上进行词性标注(可能手工),NER对应的标注问题是基于词的,然后训练CRF模型,得到对应权值参数值

                           识别过程:将待识别文档分词,然后送入CRF模型进行识别计算(维特比算法),得到标注序列,然后根据标                            注划分出命名实体

                  4)词性标注(理解含义,意义)及其一致性检查方法(位置属性向量,词性标注序列向量,聚类或者分类算法)

                
        七、句法分析

                  1)句法分析理解以及意义

                               1、句法结构分析
                                          完全句法分析
                                                 浅层分析(这里有很多方法。。。)
                               2、 依存关系分析

                 2)句法分析方法

                                    1、基于规则的句法结构分析
                                    2、基于统计的语法结构分析
              

        八、文本分类,情感分析

                   1)文本分类,文本排重

                                      文本分类:在预定义的分类体系下,根据文本的特征,将给定的文本与一个或者多个类别相关联
                               典型应用:垃圾邮件判定,网页自动分类

                   2)文本表示,特征选取与权重计算,词向量

                              文本特征选择常用方法:

                                            1、基于本文频率的特征提取法
                                            2、信息增量法
                                            3、X2(卡方)统计量
                                            4、互信息法

                   3)分类器设计

                                    SVM,贝叶斯,决策树等
                   4)分类器性能评测

                                    1、召回率
                                    2、正确率
                                    3、F1值

                   5)主题模型(LDA)与PLSA

                                  LDA模型十分强大,基于贝叶斯改进了PLSA,可以提取出本章的主题词和关键词,建模过程复杂,难以理解。

                   6)情感分析

                             借助计算机帮助用户快速获取,整理和分析相关评论信息,对带有感情色彩的主观文本进行分析,处理和归纳例如,评论自动分析,水军识别。

                            某种意义上看,情感分析也是一种特殊的分类问题
                   7)应用案例


        九、信息检索,搜索引擎及其原理

                  1)信息检索起源于图书馆资料查询检索,引入计算机技术后,从单纯的文本查询扩展到包含图片,音视频等多媒体信息检索,检索对象由数据库扩展到互联网。

                        1、点对点检索
                        2、精确匹配模型与相关匹配模型
                        3、检索系统关键技术:标引,相关度计算
                2)常见模型:布尔模型,向量空间模型,概率模型
                3)常用技术:倒排索引,隐语义分析(LDA等)   
                4)评测指标 

        十、自动文摘与信息抽取,机器翻译,问答系统

                  1)统计机器翻译的的思路,过程,难点,以及解决

                2)问答系统

                        基本组成:问题分析,信息检索,答案抽取

                        类型:基于问题-答案, 基于自由文本

                        典型的解决思路

               3)自动文摘的意义,常用方法

               4)信息抽取模型(LDA等)
     
        十一、深度学习在自然语言中的应用  

                 1)单词表示,比如词向量的训练(wordvoc)
                 2)自动写文本
                                写新闻等
                 3)机器翻译
                 4)基于CNN、RNN的文本分类

                 5)深度学习与CRF结合用于词性标注
                           ...............

             更多深度学习内容,可参考我之前的文章。
     
       


     

    展开全文
  • Ai工程师-自然语言处理实战课程

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

    千人学习 2019-08-07 14:38:22
    本课程隶属于自然语言处理(NLP)实战系列。自然语言处理(NLP)是数据科学里的一个分支,它的主要覆盖的内容是:以一种智能与高效的方式,对文本数据进行系统化分析、理解与信息提取的过程。通过使用NLP以及它的组件,...
  • Python自然语言处理-BERT模型实战

    千人学习 2019-10-21 21:54:40
    通俗讲解BERT模型中所涉及的核心知识点(Transformer,self-attention等),基于google开源BERT项目从零开始讲解如何搭建自然语言处理通用框架,通过debug源码详细解读其中每一核心代码模块的功能与作用。最后基于...
  • 自然语言处理大体包括了自然语言理解和自然语言生成两个部分,实现人机间自然语言通信意味着要使计算机既能理解自然语言文本的意义,也能以自然语言文本来表达给定的意图、思想等,前者称为自然语言理解,后者称为...

    自然语言处理大体包括了自然语言理解和自然语言生成两个部分,实现人机间自然语言通信意味着要使计算机既能理解自然语言文本的意义,也能以自然语言文本来表达给定的意图、思想等,前者称为自然语言理解,后者称为自然语言生成。
      自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。自然语言处理的终极目标是用自然语言与计算机进行通信,使人们可以用自己最习惯的语言来使用计算机,而无需再花大量的时间和精力去学习不很自然和习惯的各种计算机语言。
      
      针对一定应用,具有相当自然语言处理能力的实用系统已经出现,典型的例子有:多语种数据库和专家系统的自然语言接口、各种机器翻译系统、全文信息检索系统、自动文摘系统等。
      国内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


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

    多智时代-人工智能大数据学习入门网站|人工智能、大数据、云计算、物联网的学习服务的好平台
    展开全文
  • NLP之自然语言处理简述

    千次阅读 2018-09-15 17:04:06
    什么是自然语言处理自然语言处理是研究在人与人交际中以及人与计算机交际中的语言问题的一门学科。自然语言处理要研制表示语言能力(linguistic competence)和语言应用(linguistic performance)的模型,建立...

    什么是自然语言处理?

    自然语言处理是研究在人与人交际中以及人与计算机交际中的语言问题的一门学科。自然语言处理要研制表示语言能力(linguistic competence)和语言应用(linguistic performance)的模型,建立计算框架来实现这样的语言模型,提出相应的方法来不断完善这样的语言模型,根据这样的语言模型设计各种实用系统,并探讨这些实用系统评测技术。

    根据这个定义,自然语言处理要研究 “在人与人交际中以及人与计算机交际中的语言问题”,既要研究语言,又要研究计算机,因此,它是一门交叉学科,它涉及语言学、计算机科学、数学、自动化等不同学科。

    以宗成庆所著《统计自然语言处理》为例,其在统计自然语言处理的理论方面,首先介绍相关的基础知识,例如概率论和信息论的基本概念、形式语言和自动机的基本概念。由于统计自然语言处理是以语料库和词汇知识库为语言资源的,因此接下来本书讲解了语料库和词汇知识库的基本原理。语言模型和隐马尔可夫模型是统计自然语言处理的基础理论,在统计自然语言处理中具有重要地位。因此本书介绍了语言模型的基本概念,并讨论了各种平滑方法和自适应方法,又介绍了隐马尔可夫模型和参数估计的方法。接着,本书分别论述了在词法分析与词性标注中的统计方法,在句法分析中的统计方法,在词汇语义中的统计方法。

    基于统计的自然语言处理的理论基础是哲学中的经验主义,基于规则的自然原因处理的理论基础是哲学中的理性主义。说到底,这个问题是关于如何处理经验主义和理论主义关系的问题。

    自然语言处理研究的内容?

    1. 机器翻译(machine translation,MT):实现一种语言到另一种语言的自动翻译
    2. 自动文摘(automatic abstracting):将文档的主要内容和含义自动归纳、提炼,形成摘要
    3. 信息检索(information retrieval):从海量文档中找到符合用户需要的相关文档
    4. 文档分类(document categorization/classification):对大量的文档按照一定的分类标准(例如,根据主题或内容划分等)实现自动归类。
      文档分类也称文本分类(text categorization/classification)或信息分类(information categorization/classification),近年来,情感分类(sentiment classification)或称文本倾向性识别(text orientation identification)成为本领域研究的热点。
    5. 问答系统(question-answering system):对用户提出的问题的理解,利用自动推理等手段,在有关知识资源中自动求解答案并做出相应的回答。
    6. 信息过滤(information filtering):自动识别和过滤那些满足特定条件的文档信息。
    7. 信息抽取(information extraction):指从文本中抽取出特定的事件(event)或事实信息,有时候又称事件抽取(event extraction)。
      信息抽取与信息检索不同,信息抽取直接从自然语言文本中抽取信息框架,一般是用户感兴趣的事实信息,而信息检索主要是从海量文档集合中找到与用户需求(一般通过关键词表达)相关的文档列表,而信息抽取则是希望直接从文本中获得用户感兴趣的事实信息。当然,信息抽取与信息检索也有密切的关系,信息抽取系统通常以信息检索系统(如文本过滤)的输出作为输入,而信息抽取技术又可以用来提高信息检索系统的性能。
      信息抽取与问答系统也有密切的联系。一般而言,信息抽取系统要抽取的信息是明定的、事先规定好的,系统只是将抽取出来的事实信息填充在给定的框架槽里,而问答系统面对的用户问题往往是随机的、不确定的,而且系统需要将问题的答案生成自然语言句子,通过自然、规范的语句准确地表达出来,使系统与用户之间形成一问一答的交互过程。
    8. 文本挖掘(text mining):从文本(多指网络文本)中获取高质量信息的过程。
      文本挖掘技术一般涉及文本分类、文本聚类(text clustering)、概念或实体抽取(concept/entity extraction)、粒度分类、情感分析(sentiment analysis)、自动文摘和实体关系建模(entity relation modeling)等多种技术。
    9. 舆情分析(public opinion analysis):舆情是较多群众关于社会中各种现象、问题所表达的信念、态度、意见和情绪等等表现的总和。显然,舆情分析是一项十分复杂、涉及问题众多的综合性技术,它涉及网络文本挖掘、观点(意见)挖掘(opinion mining)等各方面的问题。
    10. 隐喻计算(metaphorical computation):研究自然语言语句或篇章中隐喻修辞的理解方法。
    11. 文字编辑和自动校对(automatic proofreading):对文字拼写、用词,甚至语法、文档格式等进行自动检查、校对和编排。
    12. 作文自动评分:对作文质量和写作水平进行自动评价和打分
    13. 语音识别(speech recognition):将输入的语音信号识别转换成书面语表示。
    14. 文语转换(text-to-speech conversion):将书面文本自动转换成对应的语音表征,又称语音合成(speech synthesis)。
    15. 说话人识别/认证/验证(speaker recognition/identification/verification):对说话人的言语样本做声学分析,依此推断(确定或验证)说话人的身份。

    自然语言处理涉及的几个层次?

    如果撇开语音学研究的层面,自然语言处理研究的问题一般会涉及自然语言的形态学、语法学、语义学和语用学等几个层次。

    形态学(morphology):形态学(又称“词汇形态学”或“词法”)是语言学的一个分支,研究词的内部结构,包括屈折变化和构词法两个部分。由于词具有语音特征、句法特征和语义特征,形态学处于音位学、句法学和语义学的结合部位,所以形态学是每个语言学家都要关注的一门学科。

    语法学(syntax):研究句子结构成分之间的相互关系和组成句子序列的规则。其关注的中心是:为什么一句话可以这么说,也可以那么说?

    语义学(semantics):语义学的研究对象是语言的各级单位(词素、词、词组、句子、句子群、整段整篇的话语和文章,乃至整个著作)的意义,以及语义与语音、语法、修辞、文字、语境、哲学思想、社会环境、个人修养的关系,等等。其重点在探明符号与符号所指的对象之间的关系,从而指导人们的言语活动。它所关注的重点是:这个语言单位到底说了什么?

    语用学(pragmatics):是现代语言学用来指从使用者的角度研究语言,特别是使用者所作的选择、他们在社会互动中所受的制约、他们的语言使用对信递活动中其他参与者的影响。目前还缺乏一种连贯的语用学理论,主要是因为它必须说明的问题是多方面的,包括直指、会话隐含、预设、言语行为、话语结构等。部分原因是由于这一学科的范围太宽泛,因此出现多种不一致的定义。从狭隘的语言学观点看,语用学处理的是语言结构中有形式体现的那些语境。相反,语用学最宽泛的定义是研究语义学未能涵盖的那些意义。因此,语用学可以是集中在句子层次上的语用研究,也可以是超出句子,对语言的实际使用情况的调查研究,甚至与会话分析、语篇分析相结合,研究在不同上下文中的语句应用,以及上下文对语句理解所产生的影响。其关注的重点在于:为什么在特定的上下文中要说这句话?

    在实际问题的研究中,上述几方面的问题,尤其是语义学和语用学的问题往往是相互交织在一起的。语法结构的研究离不开对词汇形态的分析,句子语义的分析也离不开对词汇语义的分析、语法结构和语用的分析,它们之间往往互为前提。

    自然语言处理面临的困难?

    根据上面的介绍,自然语言处理涉及形态学、语法学、语义学和语用学等几个层面的问题,其最终应用目标包括机器翻译、信息检索、问答系统等非常广泛的应用领域。其实,如果进一步归结,实现所有这些应用目标最终需要解决的关键问题就是歧义消解(disambiguation)问题和未知语言现象的处理问题。

    一方面,自然语言中大量存在的歧义现象,无论在词法层次、句法层次,还是在语义层次和语用层次,无论哪类语言单位,其歧义性始终都是困扰人们实现应用目标的一个根本问题。因此,如何面向不同的应用目标,针对不同语言单位的特点,研究歧义消解和未知语言现象的处理策略及实现方法,就成了自然语言处理面临的核心问题。

    另一方面,对于一个特定系统来说,总是有可能遇到未知词汇、未知结构等各种意想不到的情况,而且每一种语言又都随着社会的发展而动态变化着,新的词汇(尤其是一些新的人名、地名、组织机构名和专用词汇)、新的词义、新的词汇用法(新词类),甚至新的句子结构都在不断出现,尤其在口语对话或计算机网络对话、微博、博客等中,稀奇古怪的词语和话语结构更是司空见惯。因此,一个实用的自然语言处理系统必须具有较好的未知语言现象的处理能力,而且有足够的对各种可能输入形式的容错能力,即我们通常所说的系统的鲁棒性(robustness)问题。当然,对于机器翻译、信息检索、文本分类等特定的自然语言处理任务来说,还存在若干与任务相关的其他问题,诸如如何处理不同语言的差异、如何提取文本特征等。

    总而言之,目前的自然语言处理研究面临着若干问题的困扰,既有数学模型不够奏效、有些算法的复杂度过高、鲁棒性太差等理论问题,也有数据资源匮乏、覆盖率低、知识表示困难等知识资源方面的问题,当然,还有实现技术和系统集成方法不够先进等方面的问题。

    展开全文
  • 自然语言处理

    2019-03-30 11:12:42
    有关国科大64讲,自动化所宗成庆自然语言处理课件,大部分都有了,个别较为简略,入门学习正好。
  • 5本自然语言处理书单-附pdf

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

    万次阅读 多人点赞 2018-07-03 02:45:10
    本达人课,作为中文自然语言处理边学边实战的入门级教程,以小数据量的“简易版”实例,通过实战带大家快速掌握 NLP 在中文方面开发的基本能力。 本课程共包含 18 节。各小节之间并没有紧密耦合,但是整个内容还是...
  • 什么是自然语言处理自然语言处理(NLP)是指机器理解并解释人类写作、说话方式的能力。 NLP的目标是让计算机/机器在理解语言上像人类一样智能。最终目标是弥补人类交流(自然语言)和计算机理解(机器语言)之间...
  • NLP,中文叫自然语言处理,简单来说,是一门让计算机理解、分析以及生成自然语言的学科,大概的研究过程是:研制出可以表示语言能力的模型——提出各种方法来不断提高语言模型的能力——根据语言模型来设计各种应用...
  • [NLP自然语言处理]谷歌BERT模型深度解析

    万次阅读 多人点赞 2018-10-15 17:49:18
    我的机器学习教程「美团」算法工程师带你入门机器学习 已经开始更新了,欢迎大家订阅~ 任何关于算法、编程、AI行业知识或博客内容的问题,可以随时扫码关注公众号「图灵的猫」,加入”学习小组“,沙雕博主在线答疑...
  • 1、自然语言处理圣经---《自然语言处理综论》2、视频课程《深度学习与自然语言处理-2018》3、Natural Language Processing (NLP)4、吴恩达经典课程 - Machine Learning —Coursera5、斯坦福 Natural Language ...
  • 国内外自然语言处理(NLP)研究组

    万次阅读 多人点赞 2015-04-05 20:26:26
    *博客地址... *排名不分先后。收集不全,欢迎留言完善。 中国大陆地区: 腾讯人工智能实验室(Tencent AI Lab) ... https://ai.tencent.com/ailab/nlp/ ...苏州大学自然语言处理实验室 http:/...
  • 自然语言处理NLP)学习路线总结

    千次阅读 多人点赞 2019-03-20 21:01:53
    目录 自然语言处理概述 ...自然语言处理入门基础 ...自然语言处理的主要技术范畴 ...自然语言处理(Natural Language Processing,NLP)是计算机科学领域与人工智能领域中的一个重要方向。它研究人与计算机之间...
  • 自然语言处理NLP)简介

    千次阅读 2020-05-30 00:00:29
    简单地说,自然语言处理就是用计算机来处理、理解以及运用人类语言(如中文、英文等),它属于人工智能的一个分支,是计算机科学与语言学的交叉学科,又常被称为计算语言学。由于自然语言是人类区别于其他动物的根本...
  • 第一部分:文本分类 训练文本分类器过程见下图: 文本分类问题: 给定文档p(可能含有标题t),将文档分类为n个类别中的一个或多个 ...文本分类的处理大致分为文本预处理、文本特征提取、分类模型构建等。...
  • NLP自然语言处理简介

    千次阅读 2019-09-05 23:41:46
    作者:刘知远。清华大学计算机系副教授、博士生导师。...承担多项国家自然科学基金。曾获清华大学优秀博士学位论文、中国人工智能学会优秀博士学位论文、清华大学优秀博士后、中文信息学会青年创新奖...
  • Natural Language Toolkit,自然语言处理工具包,在NLP领域中,最常使用的一个Python库。 安装:pip install nltk 2、Gensim 可以用来从文档中自劢提取语义主题。它包含了很多非监督学习算法如:TF/IDF,潜在语义...
  • 【总结】自然语言处理NLP)算法:概述与分类

    万次阅读 多人点赞 2018-07-29 23:51:35
    主要参考自然语言处理NLP)知识结构总结和知乎上的一些问答。 目录 NLP界神级人物 NLP知识结构 1.概述 2.形式语言与自动机 3.语言模型 4.概率图模型,生成模型与判别模型,贝叶斯网络,马尔科夫链与隐...
  • 本文整理自阿里巴巴iDST自然语言处理部总监郎君博士的题为“NLP技术的应用及思考”的演讲。本文从NLP背景开始谈起,重点介绍了AliNLP平台,接着分享了NLP相关的应用实例,最后对NLP的未来进行了思考。 背景介绍 ...
  • NLP汉语自然语言处理原理与实践是一本研究汉语自然语言处理方面的基础性、综合性书籍,涉及NLP的语言理论、算法和工程实践的方方面面,内容繁杂。 本书包括NLP的语言理论部分、算法部分、案例部分,涉及汉语的发展...
  • 博主github:https://github.com/MichaelBeechan 博主CSDN:https://blog.csdn.net/u011344545 ============================================ 概念篇:https://blog.csdn.net/u011344545/article/details/89525801 ...
  • 作为计算机应用的重要方向,人工智能和自然语言处理自然更不例外,与现实应用紧密相关,技术发展日新月异,常给人今是昨非之感。在这种情况下,传统学术期刊的那种投稿1-2年才能见刊的模式已经赶不上技术革新的速度...
  • 计算语言学是一门以计算为手段对自然语言进行研究和处理的科学。计算语言学的研究手段是计算 •计算的基础是冯·诺依曼结构的计算机 •计算的表现形式是算法 •算法:一组有穷的操作规则 –确定性:每一个步骤的结果...
  • 一、什么是自然语言处理NLP)   首先先了解一下什么是自然语言,自然语言是人类社会发展过程中自然产生的语言,是最能体现人类智慧和文明的产物,也是大猩猩与人的区别(2019斯坦福cs224n,lesson1)。它是一种...
  • 自然语言处理NLP(10)——语义分析

    万次阅读 多人点赞 2019-09-19 20:09:09
    在上一部分中,我们介绍了句法分析中的局部句法分析以及依存关系分析(自然语言处理NLP(9)——句法分析c:局部句法分析、依存关系分析),至此,繁复冗长的句法分析部分就结束了。 在这一部分中,我们将要介绍NLP...
  • 一般认为计算语言学(CL)是语言学的一个分支,自然语言处理NLP)是计算机科学的一个子学科。但是现在由于CL和NLP之间的界限越来越模糊,甚至两个领域的人常常去参加同样的会议,交流起工作来也完全没有障碍,于是...
  • 自然语言处理nlp全领域综述

    万次阅读 多人点赞 2018-07-18 16:05:49
    ************************* 精华总结,时间不够只看这个部分就行了 1.书和课 Michael Collins:COMS W4705: Natural Language Processing (Spring 2015)(重要) Jason Eisner的Lecture Notes:600.465 - Natural ...

空空如也

1 2 3 4 5 ... 20
收藏数 367,197
精华内容 146,878
关键字:

自然语言处理