nlp 订阅
NLP是神经语言程序学(Neuro-Linguistic Programming)的英文缩写。在香港,也有意译为身心语法程式学的。N(Neuro)指的是神经系统,包括大脑和思维过程。L(Linguistic)是指语言,更准确点说,是指从感觉信号的输入到构成意思的过程。P(Programming)是指为产生某种后果而要执行的一套具体指令。即指我们思维上及行为上的习惯,就如同电脑中的程序,可以透过更新软件而改变。故此,NLP被解释为研究我们的大脑如何工作的学问。也因此,NLP译为“身心语法程式学”或“神经语言程序学”。 [1]  最初的约翰·格林德(John Thomas Grinder)和理查·班德勒(Richard Wayne Bandler)虽然不是正式的心理学家,但对成功人士、心理学、语言和计算机程序有着浓厚兴趣,借鉴了一些催眠和心理学的理论,发展出“场域”、“能量”、“心法”的层面。NLP在发展道路上不断吸取逻辑学、心理学、哲学等其他学科的观点并整合成自身的学术论点,这种包容的结合给了NLP作为一个学术的逻辑体系。 展开全文
NLP是神经语言程序学(Neuro-Linguistic Programming)的英文缩写。在香港,也有意译为身心语法程式学的。N(Neuro)指的是神经系统,包括大脑和思维过程。L(Linguistic)是指语言,更准确点说,是指从感觉信号的输入到构成意思的过程。P(Programming)是指为产生某种后果而要执行的一套具体指令。即指我们思维上及行为上的习惯,就如同电脑中的程序,可以透过更新软件而改变。故此,NLP被解释为研究我们的大脑如何工作的学问。也因此,NLP译为“身心语法程式学”或“神经语言程序学”。 [1]  最初的约翰·格林德(John Thomas Grinder)和理查·班德勒(Richard Wayne Bandler)虽然不是正式的心理学家,但对成功人士、心理学、语言和计算机程序有着浓厚兴趣,借鉴了一些催眠和心理学的理论,发展出“场域”、“能量”、“心法”的层面。NLP在发展道路上不断吸取逻辑学、心理学、哲学等其他学科的观点并整合成自身的学术论点,这种包容的结合给了NLP作为一个学术的逻辑体系。
信息
外文名
Neuro-Linguistic Programming
发现者
格林德和班德勒
中文名
神经语言程序学
NLP的定义
指神经系统,意译为身心
nlp创始人
NLP主要的发现者是约翰·格林德和理查德·班德勒。格林德是世界最负盛名的 语言学家之一,班德勒是一位数学家、完形心理学家和电脑专家。他们决定集两人之力去进行一桩模仿他人的研究,对象是那些在多方面都甚有成就之人。他二人分析了一些成功的商人、医师和其他行业中的佼佼者,试图能从他们多年尝试错误后的成功中,归结出一些成功的模式。他们对下列三人的模仿,经分类后所建立的诸多有效的行为介入模式,使得他们声名大噪。这三人是当代最伟大的催眠疗法学家之一的埃里克森医师,杰出的家庭医师沙提尔女士和人类学家贝特森。例如,格林德和班德勒二人发现沙提亚能轻易地建立人际关系,而其他的同业却不行。所以他们找出她特有的模式,也教导学生运用,即使他们没有任何执业经验,但也做出与沙提尔毫不逊色的成绩来。他们播下相同的种子,收获也相同。从他们三人身上模仿所归结出基本模式的经验,帮助格林德和班德勒也建立自己的模式并传授出去,这些模式就是我们所熟知的NLP。
收起全文
精华内容
参与话题
问答
  • 自然语言处理(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学习(一)—基础篇

    万次阅读 多人点赞 2019-04-11 10:53:02
    本次代码的环境: 运行平台: Windows Python版本: Python3.x IDE: PyCharm 一、 前言 2016年3月9日至15日和2017年5月23日至27日,分别在韩国首尔和中国嘉兴乌镇,韩国围棋九段棋手李世石、中国围棋九段棋手柯洁与...

    原创不易,转载前请注明博主的链接地址:Blessy_Zhu https://blog.csdn.net/weixin_42555080
    本次代码的环境:
    运行平台: Windows
    Python版本: Python3.x
    IDE: PyCharm

    一、 前言

    2016年3月9日至15日和2017年5月23日至27日,分别在韩国首尔和中国嘉兴乌镇,韩国围棋九段棋手李世石、中国围棋九段棋手柯洁与人工智能围棋程序“阿尔法围棋”(AlphaGo)之间的两场比赛,人类均以失败告终,更是激起了各种“机器超越、控制人类”的讨论,然而机器真的懂人类进而控制人类吗?如果可以那首先必须要先让机器能理解人类的语言。那么机器是如何理解人类语言的呢?这一系列的博文将带领大家熟悉和回顾一个完整的自然语言处理过程。
    首先理解什么是NLP呢?

    NLP (Natural Langunge Possns,自然语言处理)是计算机科学领域以及人工智能领域的一个重要的研究方向,它研究用计算机来处理、理解以及运用人类语言(如中文、英文等),达到人与计算机之间进行有效通讯。所谓“自然”乃是寓意自然进化形成,是为了区分一些人造语言,类似C++、Java 等人为设计的语言。

    二、内容

    2.1 NLP技术点

    接下来通过分析对象和分析内容两个不同的维度来进行表达,NLP 所包含的技术知识点如图2.1所示:
     


    在这里插入图片描述
    图2.1 NLP 技术知识点汇总

    2.2 NLP处理过程

    中文自然语言处理的过程和机器学习过程大体一致,但又存在很多细节上的不同点,下面我们就来看看中文自然语言处理的基本过程有哪些呢?

    2.2.1 获取语料

    语料,即语言材料。语料是语言学研究的内容。语料是构成语料库的基本单元。所以,人们简单地用文本作为替代,并把文本中的上下文关系作为现实世界中语言的上下文关系的替代品。我们把一个文本集合称为语料库(Corpus),当有几个这样的文本集合的时候,我们称之为语料库集合(Corpora)。(定义来源:百度百科)按语料来源,我们将语料分为以下两种:

    • 1.已有语料
      很多业务部门、公司等组织随着业务发展都会积累有大量的纸质或者电子文本资料。那么,对于这些资料,在允许的条件下我们稍加整合,把纸质的文本全部电子化就可以作为我们的语料库。
    • 2.网上下载、抓取语料
      如果现在个人手里没有数据怎么办呢?这个时候,我们可以选择获取国内外标准开放数据集,比如国内的中文汉语有搜狗语料、人民日报语料。国外的因为大都是英文或者外文,这里暂时用不到。也可以选择通过爬虫自己去抓取一些数据,然后来进行后续内容。

    2.2.2 语料预处理

    在一个完整的中文自然语言处理工程应用中,语料预处理大概会占到整个50%-70%的工作量,所以开发人员大部分时间就在进行语料预处理。下面通过数据洗清、分词、词性标注、去停用词四个大的方面来完成语料的预处理工作。

    • 1.语料清洗
      数据清洗,顾名思义就是在语料中找到我们感兴趣的东西,把不感兴趣的、视为噪音的内容清洗删除,包括对于原始文本提取标题、摘要、正文等信息,对于爬取的网页内容,去除广告、标签、HTML、JS 等代码和注释等。常见的数据清洗方式有:人工去重、对齐、删除和标注等,或者规则提取内容、正则表达式匹配、根据词性和命名实体提取、编写脚本或者代码批处理等。
    • 2.分词
      中文语料数据为一批短文本或者长文本,比如:句子,文章摘要,段落或者整篇文章组成的一个集合。一般句子、段落之间的字、词语是连续的,有一定含义。而进行文本挖掘分析时,我们希望文本处理的最小单位粒度是词或者词语,所以这个时候就需要分词来将文本全部进行分词。
      常见的分词算法有:基于字符串匹配的分词方法、基于理解的分词方法、基于统计的分词方法和基于规则的分词方法,每种方法下面对应许多具体的算法。
      当前中文分词算法的主要难点有歧义识别和新词识别,比如:“羽毛球拍卖完了”,这个可以切分成“羽毛 球拍 卖 完 了”,也可切分成“羽毛球 拍卖 完 了”,如果不依赖上下文其他的句子,恐怕很难知道如何去理解。
    • 3.词性标注
      词性标注,就是给每个词或者词语打词类标签,如形容词、动词、名词等。这样做可以让文本在后面的处理中融入更多有用的语言信息。词性标注是一个经典的序列标注问题,不过对于有些中文自然语言处理来说,词性标注不是非必需的。比如,常见的文本分类就不用关心词性问题,但是类似情感分析、知识推理却是需要的,下图2.2是常见的中文词性整理。
       

      在这里插入图片描述
      图2.2 中文词性

    常见的词性标注方法可以分为基于规则和基于统计的方法。其中基于统计的方法,如基于最大熵的词性标注、基于统计最大概率输出词性和基于 HMM 的词性标注。

    • 4.去停用词
      停用词一般指对文本特征没有任何贡献作用的字词,比如标点符号、语气、人称等一些词。所以在一般性的文本处理中,分词之后,接下来一步就是去停用词。但是对于中文来说,去停用词操作不是一成不变的,停用词词典是根据具体场景来决定的,比如在情感分析中,语气词、感叹号是应该保留的,因为他们对表示语气程度、感情色彩有一定的贡献和意义。

    2.2.3 特征工程

    做完语料预处理之后,接下来需要考虑如何把分词之后的字和词语表示成计算机能够计算的类型。显然,如果要计算我们至少需要把中文分词的字符串转换成数字,确切的说应该是向量话。有两种常用的表示模型分别是词袋模型和词向量

    • 词袋模型(Bag of Word, BOW),即不考虑词语原本在句子中的顺序,直接将每一个词语或者符号统一放置在一个集合(如 list),然后按照计数的方式对出现的次数进行统计。
    • 词向量是将字、词语转换成向量矩阵的计算模型。目前为止最常用的词表示方法是 One-hot,这种方法把每个词表示为一个很长的向量。

    2.2.4 特征选择

    同数据挖掘一样,在文本挖掘相关问题中,特征工程也是必不可少的。在一个实际问题中,构造好的特征向量,是要选择合适的、表达能力强的特征。文本特征一般都是词语,具有语义信息,使用特征选择能够找出一个特征子集,其仍然可以保留语义信息;但通过特征提取找到的特征子空间,将会丢失部分语义信息。所以特征选择是一个很有挑战的过程,更多的依赖于经验和专业知识,并且有很多现成的算法来进行特征的选择。目前,常见的特征选择方法主要有 DF、 MI、 IG、 CHI、WLLR、WFO 六种。

    2.2.5 模型训练

    在特征向量选择好之后,接下来要做的事情当然就是训练模型,对于不同的应用需求,我们使用不同的模型,传统的有监督和无监督等机器学习模型, 如 KNN、SVM、Naive Bayes、决策树、GBDT、K-means 等模型;深度学习模型比如 CNN、RNN、LSTM、 Seq2Seq、FastText、TextCNN 等。这些模型在后续的分类、聚类、神经序列、情感分析等示例中都会用到。下面是在模型训练时需要注意的几个点。

    • 1.注意过拟合、欠拟合问题,不断提高模型的泛化能力。

      • 过拟合:模型学习能力太强,以至于把噪声数据的特征也学习到了,导致模型泛化能力下降,在训练集上表现很好,但是在测试集上表现很差。
        常见的解决方法有:

        • 增大数据的训练量;
        • 增加正则化项,如 L1 正则和 L2 正则;
        • 特征选取不合理,人工筛选特征和使用特征选择算法;
        • 采用 Dropout 方法等。
      • 欠拟合:就是模型不能够很好地拟合数据,表现在模型过于简单。
        常见的解决方法有:

        • 添加其他特征项;
        • 增加模型复杂度,比如神经网络加更多的层、线性模型通过添加多项式使模型泛化能力更强;
        • 减少正则化参数,正则化的目的是用来防止过拟合的,但是现在模型出现了欠拟合,则需要减少正则化参数。
    • 2.对于神经网络,注意梯度消失和梯度爆炸问题。

    2.2.6 评价指标

    训练好的模型,上线之前要对模型进行必要的评估,目的让模型对语料具备较好的泛化能力。具体有以下这些指标可以参考。

    • 1.错误率、精度、准确率、精确度、召回率、F1 衡量。

    • 2.ROC 曲线、AUC 曲线。
      ROC 全称是“受试者工作特征”(Receiver Operating Characteristic)曲线。我们根据模型的预测结果,把阈值从0变到最大,即刚开始是把每个样本作为正例进行预测,随着阈值的增大,学习器预测正样例数越来越少,直到最后没有一个样本是正样例。

    2.3 NLP研究任务

    NLP可以被应用于很多领城,这里大概总结出以下几种通用的应用:

    • 机器翻译:计算机具备将一种谐育翻译成另一种语 言的能力。
    • 情感分析:计算机能够判断用户评论是香积极。
    • 智能问答:计算机能够正确回答输人的问题。
    • 文摘生成:计算机能够准确日纳、总结井产生文本摘要。
    • 文本分类计算机能够采集各种文章,进行主题分析,从而进行行自动分类。
    • 舆论分析:计算机能够判断目前舆论的导向。
    • 知识图谱: 知识点相互连接而成的语义网络。

    2.3.1 机器翻译

    机器翻译是自然语言处理中最为人所熟知的场景,国内外有很多比较成熟的机器翻译产品,比如百度翻译、Google翻译等,还有提供支持语音输人的多国语互译的产品(比如科大讯飞就出了-款翻译札)。

    2.3.2 情感分析

    情感分析在一些评论网站 比较有用,比如某餐饮网站的评论中会有非常多拔草的客人的评价,如果一眼扫过去满眼都是又贵又难吃,那谁还想去呢?另外有些商家为了获取大量的客户不惜雇佣水军灌水,那就可以通过自然语言处理来做水军识别,情感分析来分析总体用户评价是积极还是消极。

    2.3.4 智能问答

    智能问答在一-些电商网站有非常实际的价值,比如代替人工充当客服角色,有很多基本而且重复的问题,其实并不需要人工客服来解决,通过智能问容系统可以筛选掉大最重复的问题,使得人工座席能更好地服务客户。

    2.3.5 文摘生成

    文摘生成利用计算机自动地从原始文献中摘取文摘,全面准确地反映某文献的中心内容。这个技术可以帮助人们节省大量的时间成本,而且效率更高。

    2.3.6 文本分类

    文本分类是机器对文本按照-定的分类体系自动标注类别的过程。举一个例子 ,圾邮件是一种令 人头痛的顽症,困扰着非常多的互联网用户。2002 年,Paul Graham机出使用“贝叶斯推断”来过滤垃圾邮件,1000 封垃圾邮件中可以过滤掉995封并且没有一个是误判,另外这种过滤器还具有自我学习功能,会根据新收到的邮件,不断调整。也就是说收到的垃圾邮件越多,相对应的判断垃圾邮件的准确率就越高。

    2.3.7 舆论分析

    舆论分析可以帮助分析哪些话题是目前的热点,分析传播路径以及发展趋势,对于不好的舆论导向可以进行有效的控制。

    2.3.8 知识图谱

    知识图谱( Knowledge Graph/Vault)又称科学知识图谱,在图书情报界称为知识域可视化或知识领域映射地图,是显示知识发展进程与结构关系的一系列各 种不同的图形,用可视化技术描述知识资源及其载体,挖掘、分析、构建、绘制和显示知识及它们之间的相互联系。

    2.4 知识结构

    作为一门综合学科,NLP是研究人与机器之间用自然语言进行有效通信的理论和方法。这需要很多跨学科的知识,需要语言学、统计学、最优化理论、机器学习、深度学习以及自然语育处理相关理论模型知识做基础。作为一门杂学,NLP可谓包罗万象,体系化与特殊化并存,这里简单罗列其知识体系,如下图2.3所示:
     


    在这里插入图片描述
    图2.3 知识结构
    ▼有法语义分析:针对目标句子,进行各种句法分析,如分词、 词性标记、命名实体识别及链接、句法分析、语义角色识别和多义词消歧等。
    ▼关键词抽取:抽取目标文本中的主要信息,比如从一条新闻中抽取关键信息。主要是了解是谁、于何时、为何、对谁、做了何事、产生了有什么结果。涉及实体识别、时间抽取、因果关系抽取等多项关键技术。
    ▼文本挖掘:主要包含了对文本的聚类、分类,信息抽取、摘要、情感分析以及对挖掘的信息和知识的可视化、交互式的呈现界面。
    ▼机器翻译:将输人的源语言文本通过自动翻译转化为另种语言的文本。根据输人数据类型的不同,可细分为文本翻译、语音翻译、手语翻译、图形翻译等。机器翻译从最早的基于规则到二十年前的基于统计的方法,再到今天的基于深度学习(编解码)的方法,逐渐形成了一套比较严谨的方法体系。
    ▼信息检索:对大规模的文档进行索引。可简单对文档中的词汇,赋以不同的权重来建立索引,也可使用算法模型来建立更加深层的索引。查询时,首先对输入比进行分析,然后在索引里面查找匹配的候选文档,再根据个排序 机制把候选文档排序,最后输出排序得分最高的文档。
    ▼问答系统:针对某个自然语言表达的问题,由问答系统给出一个精准的答案。需
    要对自然语言查询语句进行语义分析,包括实体链接、关系识别,形成逻辑表达式,然后到知识库中查找可能的候选答案并通过一个排序机制找出最佳的答案。
    ▼对话系统:系统通过多回合对话,跟用户进行聊天、回答、完成某项任务。主要涉及用户意图理解、通用聊天引擎、问答引擎、对话管理等技术。此外,为了体现上下文相关,要具备多轮对话能力。同时,为了体现个性化,基于用户画像做个性化回复。

    2.5 知识结构

    自然语言处理可以分为以下三个层面:
    (1) 第一层面:词法分析
    词法分析包括汉语的分词和词性标注这两部分。之前有提过,汉语分词与英文不同,汉语书面词语之间没有明显的空格标记,文本中的句子以字竹串的方式出现,向子中心逗号分隔,句子和句子之间常以句号分隔。针对议语这种独特的书面表现形式,汉语的自然语言处理的首要工作就是要将输人的文本切分为单独的词语,然后在此技术上进行其他更高级的分析。
    上述这个步骤称为分词。除了分词之外,词性标注也通常被认为是词法分析的一部分,词性标注的目的是为每一个词赋予一个类别,这个类别可以是名词(noun)、动词(verb)、形容词(adjective)等。通常来说,属于相同词性的词,在句法中承担类似的角色。
    (2)第二层面:句法分析
    句法分析是对输人的文本以句子为单位,进行分析以得到句子的句法结构的处理过程。对句法结构进行分析,一方面是为了帮助理解句子的含义,另一方面也为更高级的自然语言处理任务提供支持(比如机器翻译、情感分析等)。目前业界存在三种比较主流的句法分析方法:短语结构句法体系,作用是识别出句子中的短语结构以及短语之间的层次句法关系;依存结构句法体系,作用是识别句子中词与词之间的相互依赖关系;深层文法句法分析,利用深层文法,例如词汇化树邻接文法,组合范畴文法等对句子进行深层的句法以及语义分析。
    上述几种句法分析,依存句法分析属于浅层句法分析,其实现过程相对来说比较简单而且适合在多语言环境下应用,但是其所能提供的信息也相对较少。深层文法句法分析可以提供丰富的句法和语义信息,但是采用的文法相对比较复杂,分析器的运行复杂度也比较高,这使得深层句法分析不太适合处理大规模的数据。短语结构句法分析介于依存句法分析和深层文法句法分析之间。
    (3)第三个层面:语义分析
    语义分析的最终目的是理解句子表达的真是语义。但是,语义应该采用什么表示形式一直困扰着研究者们,至今这个问题也没有一个统一的答案。语义角色标注(semantic role labeling)是目前比较成熟的浅层语义分析技术。语义角色标注一般都在句法分析的基础上完成,句法结构对于语义角色标注的性能至关重要。基于逻辑表达的语义分析也得到学术界的长期关注。出于机器学习模型复杂度、效率的考虑,自然语言处理系统通常采用级联的方式,即分词、词性标注、句法分析、语义分析分别训练模型。实际使用时,给定输入句子,逐一使用各个模块进行分析,最终得到所有结果。
    近年来,随着研究工作的深人,研究者们提出了很多有效的联合模型,将多个任务联合学习和解码,如分词词性联合、词性句法联合、分词词性句法联合句法语义联合等。联合模型通常都可以显著提高分析质量,原因在于联合模型可以让相互关联的多个任务互相帮助,同时对于任何单任务而言,人工标注的信息也更多了。然而,联合模型的复杂度更高,速度也更慢。

    三、总结

    自然语言处理(NLP)是计算机科学,人工智能,语言学关注计算机和人类(自然)语言之间的相互作用的领域。因此,自然语言处理是与人机交互的领域有关的。在自然语言处理面临很多挑战,包括自然语言理解,因此,自然语言处理涉及人机交互的面积。在NLP诸多挑战涉及自然语言理解,即计算机源于人为或自然语言输入的意思,和其他涉及到自然语言生成。
    现代NLP算法是基于机器学习,特别是统计机器学习。机器学习范式是不同于一般之前的尝试语言处理。语言处理任务的实现,通常涉及直接用手的大套规则编码。
    许多不同类的机器学习算法已应用于自然语言处理任务。这些算法的输入是一大组从输入数据生成的“特征”。一些最早使用的算法,如决策树,产生硬的if-then规则类似于手写的规则,是再普通的系统体系。然而,越来越多的研究集中于统计模型,这使得基于附加实数值的权重,每个输入要素柔软,概率的决策。此类模型具有能够表达许多不同的可能的答案,而不是只有一个相对的确定性,产生更可靠的结果时,这种模型被包括作为较大系统的一个组成部分的优点。
    自然语言处理研究逐渐从词汇语义成分的语义转移,进一步的,叙事的理解。然而人类水平的自然语言处理,是一个人工智能完全问题。它是相当于解决中央的人工智能问题使计算机和人一样聪明,或强大的AI。自然语言处理的未来一般也因此密切结合人工智能发展。
    这篇文章就到这里了,欢迎大佬们多批评指正,也欢迎大家积极评论多多交流。
     

     
    在这里插入图片描述

    展开全文
  • 从零开始自然语言处理

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

    千次阅读 2019-03-25 09:22:37
    NLP(Natural Language Processing,自然语言处理)是研究实现人与计算机之间用自然语言进行有效通信的各种理论和方法,也是AI领域中一个最重要、最艰难的方向。近些年,NLP在中文分词、词性标注、词汇语义、句法解析...

    https://www.toutiao.com/a6671611871121900043/

     

    中文的NLP

     

    NLP(Natural Language Processing,自然语言处理)是研究实现人与计算机之间用自然语言进行有效通信的各种理论和方法,也是AI领域中一个最重要、最艰难的方向。近些年,NLP在中文分词、词性标注、词汇语义、句法解析方面均获得了很大的突破。大量的技术都应用于商业实践,并在商业领域获得了良好的市场和经济效益。文本方面主要有:基于自然语言理解的智能搜索引擎和智能检索、智能机器翻译、自动摘要与文本综合、文本分类与文件整理、自动阅卷系统、信息过滤与垃圾邮件处理、文学研究与古文研究、语法校对、文本数据挖掘与智能决策、基于自然语言的计算机程序设计等。语音方面主要有:机器同声传译、智能客户服务、聊天机器人、语音挖掘与多媒体挖掘、多媒体信息提取与文本转化、对残疾人智能帮助系统等。

    大部分自然语言处理内容都是英文为基础,大多数人先是学好了英语的处理,回头来再处理中文,却发现有很大的不同,这样不仅让中文自然语言处理学习者走了弯路,也浪费了大量时间和精力。中文的处理比英文复杂的多,网上中文相关资料少之又少,国内纯中文自然语言处理书籍只有理论方面的,却在实战方面比较空缺,这让中文自然语言处理的学习者感到举步维艰,很难下笔。

    中文的NLP

     

    总体来说,NLP的主要任务已经跨越对词的研究,发展道了对句子研究即句法、句义及句子生成的研究,已经能够解决句子层面的问题,但还未达到完全解决篇章层面的问题。在语法解释层面,大规模高精度的中文分词、词性标注系统基本已经达到商用要求,再句法解析方面还存在精度问题;而在语义解析(尤其是中文),命名实体识别、语义快都已经获得了较高的精度。AI形成了一整套的知识库的架构和推理体系,实现句子道知识库的主要方法是语义角色标注系统,但在整句的理解层面,语义角色标注系统的精度严重依赖于句法解析系统,这使系统商用化还有一段距离,产生的距离才是我们在这个领域研究突破的方向。

    中文的NLP

    展开全文
  • (一)NLP基础知识

    万次阅读 2018-05-24 16:46:15
    一种流行的自然语言处理库、自带语料库、具有分类,分词等很多功能,国外使用者居多,类似中文的jieba处理库 2、文本处理流程 3、分词 英文用NLTK,中文用jieba等,比较难处理时候,可能得借助正则表达式。 4...

    1、NLTK

    一种流行的自然语言处理库、自带语料库、具有分类,分词等很多功能,国外使用者居多,类似中文的jieba处理库

    2、文本处理流程

    文本处理流程

    3、分词

    英文用NLTK,中文用jieba等,比较难处理时候,可能得借助正则表达式。

    4、复杂的词形

    处理数据的时候可能需要变化词形,分2中情况:
    1)Inflection变化:不影响词性
    walkwalkingwalked
    2) derivation 引申:影响词性
    nation(n.)national(adj.)nationalize(v.)

    5、词形归一化

    1)Stemming词干提取:把不影响词性的后缀去掉
    walkingwalk
    walkedwalk
    (依旧是动词)
    2)Lemmatization词形归一:把各类型的词变形,归一
    went归一=go
    are归一=be
    这里写图片描述
    这里写图片描述

    3)Lemma出现的问题(借助词性标注完成)

    Went v.go的过去式 n.英文名:温特
    这里写图片描述

    6、去除停用词

    中文有:的、地…
    英文有:the 、this…

    总结:文本预处理流水线

    这里写图片描述

    展开全文
  • 文本分类是NLP领域的较为容易的入门问题,本文记录文本分类任务的基本流程,大部分操作使用了torch和torchtext两个库。1. 文本数据预处理首先数据存储在三个csv文件中,分别是...
  • 使用pytorch和torchtext进行文本分类

    千次阅读 2019-10-27 21:50:48
    文本分类是NLP领域的较为容易的入门问题,本文记录我自己在做文本分类任务以及复现相关论文时的基本流程,绝大部分操作都使用了torch和torchtext两个库。 1. 文本数据预处理 首先数据存储在三个csv文件中,分别是...
  • 点击上方,选择星标或置顶,不定期资源大放送!阅读大概需要15分钟Follow小博主,每天更新前沿干货来自 |知乎地址 | https://zhuanlan.zhihu.com/p/73...
  • Photo by Christopher Gower on Unsplash Christopher Gower在Unsplash上的照片 介绍 (Intro) Welcome to this tutorial! This tutorial will teach you how to build a bidirectional LSTM for text classification...
  • pytorch文本分类

    2020-11-09 15:14:06
    pytorch文本分类 文章目录pytorch文本分类前言一、数据的预处理二、建立模型进行训练总结高级API进行代码简化 前言 学习一下使用pytorch来进行文本的分类,记得tensorflow关于文本的分类使用的是不用作家的翻译...
  • 文本分类概述(nlp

    万次阅读 多人点赞 2018-06-22 23:28:27
    文本分类问题:给定文档p(可能含有标题t),将文档分类为n个类别中的一个或多个 文本分类应用:常见的有垃圾邮件识别,情感分析 ...致力让读者明白在处理文本分类问题时应该从什么方向入手,重...
  • NLP ---文本情感分析

    万次阅读 多人点赞 2019-01-03 10:34:46
    前面几节我们详细的研究了文本分析的相关算法,本节将简单介绍一下基于文本的情感分析方面的内容,本节更多是论述方面的内容,这个方向的算法基本都是我们前面...文本情感分析(Sentiment Analysis)是指利用自然语言...
  • 什么是NLP

    千次阅读 2019-07-05 15:18:40
    自然语言处理 - 知乎 https://www.zhihu.com/topic/19560026/intro
  • 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)知识结构总结

    万次阅读 多人点赞 2018-03-17 18:04:35
    自然语言处理知识太庞大了,网上也都是一些...主要参考书为宗成庆老师的《统计自然语言处理》,虽然很多内容写的不清楚,但好像中文NLP书籍就这一本全一些,如果想看好的英文资料,可以到我的GitHub上下载: 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.概率图模型,生成模型与判别模型,贝叶斯网络,马尔科夫链与隐...
  • 自然语言处理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年才能见刊的模式已经赶不上技术革新的速度...
  • 本文整理自阿里巴巴iDST自然语言处理部总监郎君博士的题为“NLP技术的应用及思考”的演讲。本文从NLP背景开始谈起,重点介绍了AliNLP平台,接着分享了NLP相关的应用实例,最后对NLP的未来进行了思考。 背景介绍 ...
  • NLP汉语自然语言处理原理与实践是一本研究汉语自然语言处理方面的基础性、综合性书籍,涉及NLP的语言理论、算法和工程实践的方方面面,内容繁杂。 本书包括NLP的语言理论部分、算法部分、案例部分,涉及汉语的发展...
  • NLP自然语言处理简述

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

    万次阅读 多人点赞 2019-09-19 20:09:09
    在上一部分中,我们介绍了句法分析中的局部句法分析以及依存关系分析(自然语言处理NLP(9)——句法分析c:局部句法分析、依存关系分析),至此,繁复冗长的句法分析部分就结束了。 在这一部分中,我们将要介绍NLP...
  • 博主github:https://github.com/MichaelBeechan 博主CSDN:https://blog.csdn.net/u011344545 ============================================ 概念篇:https://blog.csdn.net/u011344545/article/details/89525801 ...
  • 文章大纲名企需求实际需求总体...1、有Tensorflow、Caffe2、 Theano等深度学习框架与自然语言处理结合实际项目经验者优先; 2、熟悉面向文本的CNN、RNN、LSTM、Sequence to sequence、GAN等模型者优先; 3、了解A...

空空如也

1 2 3 4 5 ... 20
收藏数 366,959
精华内容 146,783
关键字:

nlp