nlp_nlp python - CSDN
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。
收起全文
精华内容
参与话题
  • 从零开始自然语言处理

    千人学习 2020-07-22 15:48:45
    本课程隶属于自然语言处理(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。自然语言处理的未来一般也因此密切结合人工智能发展。
    这篇文章就到这里了,欢迎大佬们多批评指正,也欢迎大家积极评论多多交流。
     

     
    在这里插入图片描述

    展开全文
  • 中文的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

    展开全文
  • Python自然语言处理-BERT模型实战

    千人学习 2020-06-24 14:19:22
    Python自然语言处理-BERT模型实战课程旨在帮助同学们快速掌握当下NLP领域最核心的算法模型BERT的原理构造与应用实例。通俗讲解BERT模型中所涉及的核心知识点(Transformer,self-attention等),基于google开源BERT...
  • 目录 第1步:基础知识 第2步:确定宏观与微观理解 第3步:确定您想要的是什么(在合理的成本内) 第4步:理解整个文档...在许多用例中,具有最重要信息的内容以自然语言(例如英语,德语,西班牙语,中文等...

     

    目录

    第1步:基础知识

    第2步:确定宏观与微观理解

    第3步:确定您想要的是什么(在合理的成本内)

    第4步:理解整个文档(宏观理解)

    第5步:提取事实,实体和关系(微观理解)

    第6步:保持原产地/可追溯性

    第7步:人工辅助过程


     

     

    一旦识别提取清理了用例所需的内容,下一步就是要了解该内容。在许多用例中,具有最重要信息的内容以自然语言(例如英语,德语,西班牙语,中文等)写下,并且不方便地标记。要从此内容中提取信息,您需要依赖某些级别的文本挖掘,文本提取或可能的全自然语言处理(NLP)技术。

    互联网内容的典型全文提取包括:

    • 提取实体 - 例如公司,人员,金额,关键举措等。
    • 根据功能,意图或目的,或按行业或其他类别对内容进行分类 - 正面或负面(例如情绪分析),以进行分析和趋势分析
    • 聚类内容 - 识别话语的主要主题和/或发现新主题
    • 事实提取 - 使用结构化信息填充数据库,以进行分析,可视化,趋势分析或警报
    • 关系提取 - 填写图形数据库以探索现实世界的关系

    按照以下7个步骤使用自然语言处理(NLP)技术提取信息

    NLPçææ¯ï¼tutorial_1.jpg


    第1步:基础知识

    自然语言处理的输入将是简单的Unicode字符流(通常为UTF-8)。将这个字符流转换为一系列词汇项(单词,短语和句法标记),然后可以用来更好地理解内容,需要进行基本处理。

    基础知识包括:

    • 结构提取 - 基于标记识别字段和内容块
    • 识别并标记句子,短语和段落边界 - 这些标记在进行实体提取和NLP时很重要,因为它们可以作为分析发生的有用中断。

    - 开源可能性包括Lucene Segmenting Tokenizer和Open NLP 句子以及段落边界检测器。

    • 语言识别 - 将检测整个文档以及每个段落或句子的人类语言。语言检测器对于确定要应用于文本的语言算法和词典至关重要。

    - 开源可能性包括Google语言检测器优化语言检测器Chromium Compact语言检测器

    - API方法包括Bing语言检测APIIBM Watson语言识别用于语言检测的Google Translation API

    • 标记 - 将字符流分成标记,可用于进一步处理和理解。标记可以是单词,数字,标识符或标点符号(取决于用例)

    - 开源标记器包括Lucene分析器Open NLP Tokenizer

    Basis Technology提供功能齐全的语言识别和文本分析软件包(称为Rosette Base Linguistics),这通常是任何语言处理软件的第一步。它包含语言识别,标记化,句子检测,词形还原,分解和名词短语提取。

    - 作为我们的自然语言处理工具包的一部分,搜索技术有许多这些工具可用于英语和其他语言。我们的NLP工具包括标记化,首字母缩略词标准化,词形还原(英语),句子和短语边界,实体提取(所有类型但不统计)和统计短语提取。这些工具可与Basis Technology的解决方案结合使用。

    • 首字母缩略词标准化和标记 - 首字母缩略词可以指定为“IBM”或“IBM”,因此应对其进行标记和规范化。

    - Search Technologies的令牌处理具有此功能。

    • 词形还原/词干 - 将单词变体缩减为更简单的形式,这可能有助于增加NLP实用程序的覆盖范围。

    - 词形还原使用语言词典对词根进行准确缩减。如果可用,则非常优选词法化。Search Technologies为英语提供了词典化,我们的合作伙伴Basis Technologies为60种语言提供了词典化。

    - 词干使用简单的模式匹配来简单地删除标记的后缀(例如删除“s”,删除“ing”等)。在开源的Lucene分析器提供所产生的许多语言。

    • 分解 - 对于某些语言(通常是日耳曼语,斯堪的纳维亚语和西里尔语),复合词需要分成更小的部分以允许准确的NLP。

    - 例如:“samstagmorgen”是德语中的“Saturday Morning”

    - 有关更多示例,请参阅维基词典德语复合词

    - Basis Technology的解决方案已经解压缩。

    • 实体提取 - 识别和提取实体(人员,地点,公司等)是简化下游处理的必要步骤。有几种不同的方法:

    - 正则表达式提取 - 适用于电话号码,ID号码(例如SSN,驾驶执照等),电子邮件地址,号码,URL,主题标签,信用卡号码和类似实体。

    字典提取 - 使用标记序列字典并识别文本中何时出现这些序列。这对已知实体有利,例如颜色,单位,尺寸,员工,商业团体,药品名称,产品,品牌等。

    基于模式的复杂提取 - 适用于人名(由已知组件构成),商业名称(由已知组件构成)和基于上下文的提取方案(例如,根据其上下文提取项目),这些方案在性质上和高精度优于高召回率。

    统计提取 - 使用统计分析进行上下文提取。这对于人们姓名,公司名称,以前不知道的地理实体以及结构良好的文本(例如学术或新闻文本)都有好处。当高回忆率优于高精度时,倾向于使用统计提取。

    • 短语提取 - 提取具有强烈意义的标记(短语)序列,其独立于单独处理时的单词。在进行NLP时,应将这些序列视为一个单元。例如,“大数据”具有强烈的含义,当单独使用时,它与“大”和“数据”无关。所有公司都有这些在整个组织中普遍使用的短语,并且作为一个单元而不是单独处理。提取短语的技巧包括:

    词性标注 - 识别来自名词或动词从句的短语

    统计短语提取 - 识别比偶然发生的频率更高的令牌序列

    混合 - 将两种技术结合使用,往往是最准确的方法。

    第2步:确定宏观与微观理解

    在开始之前,您应该决定需要什么级别的内容理解:

    宏观理解 - 提供对整个文档的一般理解。

    • 通常使用统计技术执行
    • 它用于:聚类,分类,相似性,主题分析,文字云和摘要

    微观理解 - 从个别短语或句子中提取理解。

    • 通常使用NLP技术执行
    • 它用于:提取事实,实体(见上文),实体关系,操作和元数据字段

    请注意,虽然微观理解通常有助于宏观理解,但两者可能完全不同。例如,简历(或履历)可以将整体上的人识别为大数据科学家 [宏观理解],但它也可以将其识别为流利的法语 [微观理解]。

    第3步:确定您想要的是什么(在合理的成本内)

    并非所有自然语言理解(NLP)项目都能在合理的成本和时间内完成。完成了大量的NLP项目后,我们提供了一个流程图,帮助您确定您的需求是否可以通过当今的NLP技术进行管理。 

    第4步:理解整个文档(宏观理解)

    一旦您决定开始您的NLP项目,如果您需要更全面地了解该文档,这是一个“宏观理解。”这对以下内容非常有用:

    • 分类/分类/组织记录
    • 聚类记录
    • 提取主题
    • 一般情绪分析
    • 记录相似性,包括查找不同类型记录之间的相似性(例如,简历/简历中的职位描述)
    • 关键字/关键短语提取
    • 重复和近似重复的检测
    • 摘要/关键句提取
    • 语义搜索

    标准体系结构是使用Apache SparkSpark MLlib(机器学习库)进行此分析。NLP架构通常如下所示:

    Apacheçç«è±åºåarchitecture.jpg


    在此体系结构中,内容从Internet或外部源(通过连接器)下载,然后写入Kafka队列并由Spark Machine Learning处理。结果将写入数据库或搜索引擎以供最终用户应用程序使用。

    请注意,此架构中需要包含“文本处理库”,以处理上面“第1步:基础知识”中描述的所有基本NLP功能。这可以包括多个一起工作的开源项目,或者一个或两个供应商包。

    Spark MLlib中有助于宏观理解的算法包括:

    • 向量 - 稀疏向量包含文档中加权的唯一单词或短语列表。权重可以使用TF / IDF或其他术语统计(例如文档中的位置,来自其他语料库或数据集的术语统计)来确定,然后归一化
    • Word2Vec - 计算所有术语的智能向量,使类似术语具有相似的向量。它可用于查找同义词和语义相似的单词。
    • 维度降低 - (通常,奇异值分解 - SVD)用于将任意N长度向量减少为更适合于分类的固定向量长度。
    • DIMSUM - 使用智能修剪算法将集合中的所有向量与集合中的所有其他向量进行比较。使用余弦相似性进行比较。
    • 最近邻 - 一种分类技术,用于将矢量与训练集中的样本矢量进行比较。最相似的向量(最近邻居)将用于对新记录进行分类。
    • 分类算法 - (决策树,随机森林,朴素贝叶斯,梯度提升树)可用于将文档分类或分类到训练集; 可能需要使用SVD减小尺寸
    • 聚类算法 - (K-Means [几种类型],LDA,PIC)识别相关文档的聚类和/或从内容集中提取主题。这可用于研究内容集中的记录类型或识别类似的文档集。请注意,也可以根据用户喜欢的记录类型对用户进行聚类。
    • Logistic回归 - 将多个文档统计和向量比较组合到一个用于对文档进行分类的公式中。

    第5步:提取事实,实体和关系(微观理解)

    微观理解是从文本中提取单个实体,事实或关系。这对于(从最简单到最难)是有用的:

    • 提取首字母缩略词及其定义
    • 提取引用其他文档的引用
    • 提取关键实体(人员,公司,产品,金额,地点,日期)。请注意,提取“关键”实体与提取“所有”实体不同(在选择哪个实体为“关键”时存在一些歧视)
    • 当未在网页中单独标记时,从全文中提取事实和元数据
    • 提取具有情绪的实体(例如对产品或公司的积极情绪)
    • 识别业务关系,目标/行动/犯罪者等关系。
    • 识别违规行为,表明可能违反规则的陈述
    • 提取带有归因的陈述,例如,人们的引用(谁说什么)
    • 提取规则或要求,例如合同条款,法规要求等。

    必须通过对文本的句法分析来进行微观理解。这意味着订单和单词使用很重要。

    执行提取有三种方法可以提供微观理解:

    1.自上而下 - 确定词性,然后理解并将句子绘制成条款,名词,动词,对象和主语,修改形容词和副词等,然后遍历此结构以识别感兴趣的结构

    • 优点 - 可以处理复杂的,从未见过的结构和模式
    • 缺点 - 难以构造规则,易碎,经常因变量输入而失败,即使在解析后仍可能仍需要大量的模式匹配。

    来自Google Cloud Natural Language API的自上而下的输出示例
    (右键单击图像并选择“在新标签页中打开图像”以获得更好的图像清晰度)

    å¾®ç解èªä¸èä¸ï¼output.jpg

    在深度理解图中,请注意所有修饰符如何链接在一起。另请注意,需要第二步(需要自定义编程)来获取此图并标识适合导出到图形或关系数据库的对象/操作关系。


    2. Bottoms Up - 创建大量模式,将模式与文本匹配并提取必要的事实。可以手动输入模式,或者可以使用文本挖掘来计算模式。

    • 优点 - 易于创建模式,可由业务用户完成,无需编程,易于调试和修复,运行速度快,直接匹配所需输出
    • 缺点 - 需要持续的模式维护,不能与新发明的构造匹配


    3.统计 - 类似于自下而上,但将模式与由标记的训练数据生成的统计加权模式数据库进行匹配。

    • 优点 - 自动创建模式,内置统计权衡
    • 缺点 - 需要生成大量的训练数据(1000个例子),需要定期重新训练以获得最佳精度,不能匹配新发明的结构,更难调试


    以下是自下而上或统计方法使用的样本模式

    å¾®ç解样å-patterns_0.jpg

    注意,可以手动输入这些模式,或者可以使用训练数据统计地(并且统计地加权)导出这些模式,或者使用文本挖掘和机器学习来推断它们。


    NLP的开发框架:

    • 开放NLP - 有许多组件; 工作很复杂; 使用“自上而下”方法完成解析
    • UIMA - 有许多组件和统计注释; 往往需要大量的编程; 适用于自下而上/统计方法,但不容易实施
    • GATE - 可配置的自下而上方法; 更容易使用,但配置仍然必须由程序员(而不是业务用户)创建
    • 搜索技术的自然语言处理框架 - 自下而上的方法扩展到非常大的模式集。模式可以由业务用户创建。我们的框架预计将包括训练集的统计模式。这是在发展中。


    NLP的服务框架:

    • IBM Cognitive - 基于训练数据的统计方法
    • Google Cloud Natural Language API  - 自上而下的全句图表系统
    • 亚马逊Lex - 更倾向于人类互动(人类在循环中)对话


    一些棘手的事情需要注意:

    • 共同参考分辨率 - 句子通常指的是先前的对象。这可以包括以下参考。在所有这些情况下,期望的数据指的是先前的,更明确定义的实体。为了获得尽可能高的覆盖率,您的软件需要识别这些反向引用并解决它们。

    - 代词参考:“她今年49岁。”

    - 部分参考:“Linda Nelson是在夏威夷工作的高级会计师。琳达今年49岁。“

    - 隐含的容器参考:“马里兰州是一个历史的地方。首都安纳波利斯成立于1649年。“

    • 处理列表和重复的项目

    - 例如: “马里兰州最大的城市是巴尔的摩,哥伦比亚,日耳曼敦,银泉和华尔道夫。”

    - 此类列表通常会破坏NLP算法,并且可能需要在标准结构之外存在的特殊处理。

    • 处理嵌入式结构,如表格,标记,项目符号列表,标题等。

    - 请注意,结构元素也会对NLP技术造成严重破坏。

    - 确保NLP不跨越结构边界的句子和模式。例如,从一个子弹点到下一个子弹点。

    - 确保标记不会破坏NLP分析。例如,嵌入式强调不应该引起不适当的问题。

    第6步:保持原产地/可追溯性

    在某些时候,有人会指出你的系统产生的一段数据并说:“这看起来不错。它从哪里来的?”

    从因特网获取内容然后从该内容中提取信息可能涉及许多步骤和大量计算阶段。为所有输出提供可追溯性(来源)非常重要,这样您就可以仔细追溯系统,以确切地确定信息的来源。

    这通常涉及:

    • 保存提供内容的原始网页
    • 保存从网页中提取的所有文本块的开始和结束字符位置
    • 保存所有实体的开始和结束字符位置,以及匹配的实体ID和实体类型ID
    • 保存匹配的所有模式的开始和结束字符位置,以及模式ID和子模式ID(对于嵌套或递归模式)
    • 确定所有内容应用/使用的其他清理或规范化功能

    通过在整个过程中保存此信息,您可以从输出追溯到原始网页或提供已处理内容的文件。这样您就可以完美准确地回答“这是从哪里来的?”的问题  ,并且还可以在每一步进行质量分析。

    第7步:人工辅助过程

    请注意,如果没有某些人为干预,就无法完成内容理解:

    • 用于创建或清理或选择已知实体的列表
    • 用于评估输出精度
    • 发现新模式
    • 评估和纠正输出
    • 创建培训数据

    这些过程中的许多过程都可能令人难以置信地重复。在大型系统中,您需要考虑人为因素并将其构建到您的NLP系统架构中。

    一些选项包括:

    • 创建用户界面以简化和指导人工评估过程,例如,允许用户使用WYSIWYG工具轻松标记内容中的实体,并提供易于编辑的列表进行查看(具有可排序的统计信息和简单的字符搜索)
    • 利用众包来扩展人工辅助流程,例如,使用CrowdFlower
    • 寻找将人工审核/人在环中作为标准业务流程的一部分进行整合的方法,例如,使用提取的理解预填表单,并让员工在点击“保存”并上传新内容之前对其进行审核

    使用NLP技术提取信息后,如何将结果用于业务需求?我将在下一篇文章中讨论这一步。

     

    展开全文
  • AI技术平台以及领域专家:Datawhale,ApacheCN,AI有道和黄海广博士联合整理贡献,内容涵盖AI入门基础知识、数据分析\挖掘、机器学习、深度学习、强化学习、前沿Paper和五大AI理论应用领域:自然语言处理,...
  • 最新AI学习路线附带资料与链接

    千次阅读 多人点赞 2020-04-20 09:58:35
    1.数学 数学是学不完的,也没有几个人能像博士一样扎实地学好数学基础,入门人工智能领域,其实只需要掌握必要的基础知识就好。AI的数学基础最主要是高等数学、线性代数、概率论与数理统计三门课程,这三门课程是...
  • 1年前给师弟写的 刚才整理资料看到了 放网上吧 如果有侵犯到大佬隐私 请私信我 马上删除 一:前言 1.1 学习机器学习有什么好处 因为成年人的世界讲利弊,所以大部分人在做选择的时候只考虑对自己有极大利益的决定...
  • <h2>1.数学</h2> 数学是学不完的,也没有几个人能像博士一样扎实地学好数学基础,入门人工智能领域,其实只需要掌握必要的基础知识就好。AI的数学基础最主要是高等数学、线性代数、概率论与数理统计...
  • 文本分类概述(nlp

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

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

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

    千次阅读 2019-07-05 15:19:20
    自然语言处理 - 知乎 https://www.zhihu.com/topic/19560026/intro
  • 自然语言处理NLP)- 建立一个搜索引擎(信息检索系统)的点点滴滴 教程在最底下 代码: 建索引:   搜索:                       bensonrachel简书教程...
  • 国内大陆部分主要NLP团队

    千次阅读 2019-05-25 19:22:29
    微软亚洲研究院自然语言计算组...清华大学自然语言处理与社会人文计算实验室http://nlp.csai.tsinghua.edu.cn/site2/ 清华大学智能技术与系统信息检索组http://www.thuir.cn/cms/ ...
  • 60分钟带你学习PyTorch框架。

    千人学习 2020-03-11 14:39:34
    随着对于深度学习研究的逐渐深入,在自然语言处理领域,出现了很多深度学习的模型,这些模型相比于传统的机器学习方法,在准确率等指标上面有了很大的提高。本课程拟就深度学习在自然语言处理领域的应用,从基础开始...
  • NLP的四大基本任务

    千次阅读 2019-04-15 08:36:26
    1. 序列标注:分词/POS Tag/NER/语义标注 2. 分类任务:文本分类/情感计算 3. 句子关系判断:Entailment/QA/自然语言推理 4. 生成式任务:机器翻译/文本摘要
  • 中文自然语言处理可能是 NLP 中最难的?

    万次阅读 热门讨论 2018-06-22 13:22:21
    在人工智能背景技术下,自然语言处理NLP)技术被越来越多的人看好,并受到重视。其中,以微软小冰为代表的聊天机器人,如今却成了网红,迅速刷爆了微信和朋友圈,一个17岁纯情少女懂礼貌、有素质和会作诗,众多...
  • 1、自然语言处理圣经---《自然语言处理综论》2、视频课程《深度学习与自然语言处理-2018》3、Natural Language Processing (NLP)4、吴恩达经典课程 - Machine Learning —Coursera5、斯坦福 Natural Language ...
1 2 3 4 5 ... 20
收藏数 341,754
精华内容 136,701
关键字:

nlp