自然语言_自然语言处理 - CSDN
精华内容
参与话题
  • 从零开始自然语言处理

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

    千次阅读 2018-09-16 20:31:11
    什么是自然语言处理? 自然语言处理是研究在人与人交际中以及人与计算机交际中的语言问题的一门学科。自然语言处理要研制表示语言能力(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)问题。当然,对于机器翻译、信息检索、文本分类等特定的自然语言处理任务来说,还存在若干与任务相关的其他问题,诸如如何处理不同语言的差异、如何提取文本特征等。

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

    展开全文
  • 自然语言处理(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来实现文本分析。

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

    展开全文
  • 自然语言简介

    2019-05-31 00:04:18
    自然语言处理基础 自然语言概念 自然语言,即我们人类日常所使用的语言,是人类交际的重要方式,也是人类区别于其他动物的本质特征。 我们只能使用自然语言与人进行交流,而无法与计算机进行交流。 自然语言处理 ...

    自然语言处理基础

    自然语言概念

    自然语言,即我们人类日常所使用的语言,是人类交际的重要方式,也是人类区别于其他动物的本质特征。
    我们只能使用自然语言与人进行交流,而无法与计算机进行交流。

    自然语言处理

    自然语言处理(NLP Natural Language Processing),是人工智能(AI Artificial Intelligence)的一部分,实现人与计算机之间的有效通信。
    自然语言处理属于计算机科学领域与人工智能领域,其研究使用计算机编程来处理与理解人类的语言。

    应用场景

    自然语言处理,具有非常广泛的应用场景,例如:
    •情感分析:从一段文本中提取该文本的感情色彩,是褒义、中性还是贬义
    •机器翻译
    •文本相似度匹配
    •智能客服、聊天机器人

    通用技术
    •分词:◾将连续的文本,分割成语义合理的若干词汇序列。英文比较好分(本来就有空格,直接使用spilt通过空格分割),中文比较复杂(需要一些库,且库也没有分得比较完美)

    •停用词过滤:◾在语文中,句子分为主干(主谓宾)与枝叶(定状补)两部分;停用词:文本中大量存在,但对语义分析没有帮助的词,如“万一下雨呢”删除“万一”、“呢”。

    •词干提取:◾指对一个单词去掉后缀,还原为词本身,词干提取主要用在英文等西方语言中,中文没有词干提取。 在这里插入图片描述

    •词形还原:◾对同一单词不同形式的识别,将单词还原为标准形式,主要用在英文等西方语言中,中文没有词形还原。如am、are、is 的标准形式为be。
    ◾词干提取与词形还原——相同点:都是对同一单词的不同格式进行处理;——不同点:词干提取是去掉单词的后缀;词形还原是以词元为依据,进行语义分析,获取单词的标准形式。如ate→at(词干提取);ate→eat(词形还原).

    •词袋模型:◾将文本转换为数值特征向量的表示形式。方式是将每个文档构建一个特征向量,其中包含每个单词在文档中出现的次数。
    ◾缺陷:模型往往是一个稀疏矩阵,因为每个特征相对整个文本出现的词,整个文本中出现的词都要作为特征,而统计的数量是当期文本中的词,占整个文本的一小部分。 在这里插入图片描述

    •TF-IDF:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在插入图片描述
    IDF中分母加1的原因是防止分母为0的情况;log是为了避免语料库得出的数很大,与TF量级相差太大。。
    ◾通过词袋模型分词之后获得的稀疏矩阵,并不是说出现次数越多、数量越多的词的重要性越大,如“的”、“了”。重要的词汇,一般是在当前的文档中出现的次数多,而在其他文档中出现的次数不多。因此,词袋模型只是词汇数量的统计,TF-IDF

    •Word2Vec◾VEC指的是向量, 使用神经网络将词表转为向量表示。确切的说,是将词映射成n维空间向量,特征维度n视具体情况与需求而定。
    ◾为什么要进行这个转换?——因为文本格式无法像数值一样进行计算。 在这里插入图片描述

    说明:
    scikit-learn库中实现的tf-idf转换,与标准的公式略有不同。并且,tf-idf结果会使用L2范数进行规范化处理。
    在这里插入图片描述

    展开全文
  • 自然语言理解

    千次阅读 2018-12-27 16:26:29
    自然语言理解,NLP,英文的写法是natural language processing。 是使用自然语言同计算机进行通讯的技术, 因为处理自然语言的关键,是要让计算机理解自然语言, 所以,自然语言处理,又叫做自然语言理解, 也称之为...

    这篇文章,主要介绍了自然语言理解的相关基础内容。
    一、二节,属于基础的内容介绍。
    三、四节,是历史研究脉络的简单回顾。
    五、六节,是对当前研究方向和问题的简单描述。
    通过这篇文章,
    只能够对自然语言理解的概念有了解,
    只能够对这个研究的好处有了解,
    只能够对NLP的基本原理和方法有了解,
    只能够对当前面临的困难有了解。
    其他,详细历史探索步骤、原理层面、应用层面,
    都还需要进行其他文章的阅读,进行补充。
    

    自然语言理解,NLP,英文的写法是natural language processing。
    是使用自然语言同计算机进行通讯的技术,
    因为处理自然语言的关键,是要让计算机理解自然语言,
    所以,自然语言处理,又叫做自然语言理解,
    也称之为计算语言学。
    计算语言学的英文名称是computational Ling uistics。
    一方面,它是语言信息处理的一个分支,
    另一方面,它是人工智能的核心课题之一。
    人工智能的英文名称是artificial intelligence。

    一 简介

    natural language understanding通俗的说法,是人机对话。
    人工智能的分支学科。
    研究用电子计算机模拟人的语言交际过程。
    让计算机能够理解和运用人类社会的,自然语言,比如说汉语、英语等。
    实现人机之间的自然语言通信,
    以代替人的部分脑力劳动,
    包括查询资料,解答问题,摘录文献,汇编资料以及一切有关自然语言信息的,加工处理。
    这在当前新技术革命的浪潮中,占据有十分重要的地位。
    研制第5代计算机的主要目标之一,就是要使计算机,具有理解和运用自然语言的功能。

    一、简介

    自然语言理解,是一门新兴的边缘学科,
    内容涉及语言学、心理学、逻辑学、声学、数学和计算机科学。
    而以语言学为基础。
    自然语言理解的研究,综合应用了

    1. 现代语音学
    2. 音系学
    3. 语法学
    4. 语义学
    5. 语用学

    的知识,
    同时呢,也向现代语言学,提出了一系列的问题和要求。
    本学科需要解决的中心问题,就是:
    语言,究竟是怎么样组织起来,传输信息的?
    人,又是怎么样,从一连串的语言符号当中,获取信息的呢?

    这一领域的研究,将涉及自然语言,
    自然语言,也就是人们日常使用的语言。
    包括中文、英文、俄文、日文、德文、法文等等,
    所以,它与语言学的研究,有着密切的联系,
    但是,又有重要的区别。

    自然语言处理,并不是一般地,研究自然语言。
    它是在于研发制造,有效地实现自然语言通讯的计算机系统。
    特别是其中的软件系统。
    因此来说,它是计算机科学的一部分。


    二 特征

    语言是人类,区别其他动物的本质特性。
    在所有生物中,只有人类,才具有语言能力。
    人类的多种智能,都与语言有着密切的关系。
    人类的逻辑思维,以语言为形式。
    人类的绝大部分知识,也是以语言文字的形式,记载和流传下来的。
    因而,它也是人工智能的一个重要,甚至核心的部分。

    用自然语言和计算机进行通信,这是人们长期以来追求的。
    因为,它既有明显的实际意义。
    同时,也具有重要的理论意义。
    人们可以,用自己最习惯的语言,使用计算机。
    人们不需要,再去花费大量的时间和精力,去学习不很自然和习惯的各种计算机语言。
    人们也可以,通过它,进一步了解人类的语言能力和智能的控制。
    这里的它,指代的是,用自然语言和计算机进行通信,这件事情。

    实现人机之间自然语言通信,意味着,要使计算机既能够理解自然语言文本的意义,
    也能够以自然语言文本,表达给定的意图、思想等。
    前者称之为,自然语言理解。
    后者称之为,自然语言生成。
    因此,自然语言处理,大体上,包括了两个部分。
    就是自然语言理解和自然语言生成。
    历史上,对自然语言理解的研究很多,
    对自然语言生成的研究很少,
    但是,这种近况近年来已有所改变。

    无论实现自然语言理解,还是自然语言生成,
    都远远不是人们原来想象的那么简单的,
    是十分困难的。

    从现阶段的理论和技术现状来看,
    通用的,高质量的自然语言处理系统,
    仍然是较长期的努力目标。
    但是,针对一定应用,具有相当自然语言处理能力的实用系统,
    已经出现。
    有些已经商品化,甚至开始产业化。
    典型的例子有:

    1. 种数据库
    2. 专家系统的自然语言接口
    3. 各种机器翻译系统
    4. 全文信息检索系统
    5. 自动文摘系统

    自然语言处理,就是实现人机之间自然语言通信。

    实现自然语言理解和自然语言生成,是十分困难的。
    造成困难的根本原因是,自然语言文本和对话的各个层次上,
    广泛存在各种各样的歧义性和多义性。
    多义性的英文单词,叫做ambiguity。

    一个中文文本,从形式上看,是由汉子、标点符号组成的一个字符串。
    由字可以组成词,由词可以组成词组,由词组可以组成句子,
    由句子可以组成段、节、章、篇。
    无论在上述的各种层次:字、词、词组、句子、段、节、章、篇。
    还是在下一层次向上一层次转变中,
    都存在着歧义和多义现象。
    也就是说,形式上一样的一段字符串,
    在不同的场景或不同的语境下,
    可以理解成不同的词串、词组串等,并有不同的意义。

    一般情况下,它们中的大多数,
    都是可以根据相应的语境和场景的规定而得到解决的。
    也就是说,从总体上说,并不存在歧义。
    这也就是,我们平时并不感到自然语言歧义的原因。
    这也就是,我们能够用自然语言进行正确交流的原因。

    但是一方面,我们也看到, 为了消解歧义,是需要极其大量的知识进行推理的。 如何将这些知识较为完整地加以收集和整理出来? 如何找到合适的形式,将它们存入计算机系统中去? 如何有效地利用它们来消除歧义? 这些都是工作量极大,而且十分困难的工作。 这不是少数人短时间内可以完成的, 还有待长期的,系统的工作。

    以上说的是,一个中文文本或一个汉字含有标点符号的字串,
    可能有多个含义。
    它是自然语言理解中的主要困难和障碍。
    反过来,一个相同的和相近的意义,
    同样也可以用多个中文文本或多个汉字串来表示。

    歧义现象:
    一个文本可以有多重意义。
    一个意义可以用多个文本表示。
    

    歧义现象的广泛存在,使得消除它们,需要大量的知识和推理。
    这种情况,给基于语言学的方法、基于知识的方法造成困难。
    这种困难是巨大的。
    因而,用这些方法为主流的自然语言处理研究,
    几十年来成绩并不显著。
    当然了,我们要说,这些研究在理论和方法方面取得了很多成就,
    但是在处理大规模真实文本的系统研究制造方面,真的。
    成绩并不显著。
    这些方法,研究制造出来的系统,都是一些小规模的、研究性的演示系统。

    在这里插入图片描述

    三 初始研究

    自然语言理解,从20世纪60年代初,开始研究。
    由于N-乔姆斯基,在语言学理论上的突破,
    由于此后各家理论的发展,
    由于计算机功能的不断提高,
    当下已经取得了一定的成果。
    成果主要分布在两个方面。
    第一个是语音理解。
    第二个是书面理解。
    语音理解,用口语语音输入,
    使计算机听懂语音信号,
    用文字或语音合成输出应答。
    方法是,先在计算机当中贮存某些单词的声学模式,
    用它来匹配输入的语音信号,
    这一步,称之为语音识别。
    这只是一个初步的基础,
    还不能达到语音理解的目的。
    因为单凭声学模式,
    无法辨认人和人之间的语音差别,
    无法辨别同一个人先后发音的语音差别,
    无法辨认连续语音流中的语音变化,
    必须综合应用语言学知识,
    以切分音节和单词
    分析句法和语义
    才能理解内容,获取信息。

    四 发展

    60年代至70年代初期,研究工作一直停留在单词的语音识别上,进展不大。
    一直到70年代中期,才有所突破。
    建立了一些实验系统。
    这些实验系统能够理解连续语音的内容,
    但是这种理解,还仅仅限制于少数简单的语句。

    书面理解是用文字输入,让计算机看懂文字符号,也用文字输出应答。
    这方面的进展较快,70年代初期取得突破,中期以后又有所发展。
    如今,已经能够在一定语汇、句型和主题范围内
    查询资料,解答问题,阅读故事,解释豫剧等。
    有的系统,已经付诸使用。

    由于绝大多数语种,使用的是拼音文字。
    计算机识别拼音字母,已经没有问题。
    文字输入,又是按照单词分别拼写的,
    因此书面理解一般没有切分音节和单词的问题,
    只需要直接分析语汇、句法、语义。

    但是汉语,用的是汉字。
    无论是使用汉字编码输入,还是将来计算机能够直接认识汉字,
    都要首先解决切分单词的问题。
    因为输入就是一连串汉字,词和词之间,没有空隔。

    书面理解的基本方法是:
    在计算机里面贮存一定的词汇、句法规则、语义规则、推理规则、主题知识。
    语句输入后,计算机自左至右,逐词扫描。
    根据词典,辨认每个单词的词义和用法。
    根据句法规则,确定短语和句子的组合。
    根据语义规则和推理规则,获取输入句的含义。
    查询知识库,根据主题知识和语句生成规则,组织应答输出。
    

    现阶段,已经建成的书面理解系统,应用了各种不同的语法理论和分析方法。
    例如

    1. 生成语法
    2. 系统语法
    3. 格语法
    4. 语义语法
    

    等等,都取得了一定的成效。

    五 研究方向

    大约90年代开始,自然语言处理领域,发生了巨大的变化。
    这种变化的两个明显的特征是:

    第一、系统输入

    要求研发制造的自然语言处理系统,能够处理大规模真实文本。
    不是像以前那样的研究性系统,
    只能处理很少的词条和典型句子。
    只有这样,研究制造的系统,才有真正的实用价值。

    第二、系统输出

    鉴于真实地理解自然语言,是十分困难的。
    对系统并不要求,能够对自然语言文本,进行深层的理解。
    但是,要能够从中抽取出来有用的信息。

    比方说,对自然语言文本,进行自动地提取索引词。
    过滤、检索、自动提取重要信息、进行自动摘要等等。

    同时,由于强调了大规模,强调了真实文本。
    下面两个方面的基础性工作,也得到了重视和加强。

    第一个方面,大规模真实语料库的研制。
    

    大规模的,经过不同深度加工的真实文本的语料库,
    这个是研究自然语言统计性质的基础。
    没有它们,统计方法只能是无源之水。

    第二个方面,大规模、信息丰富的词典的编制工作。
    

    规模为几万、十几万、甚至几十万词,含有丰富的信息的计算机可用词典,
    这个对自然语言处理的重要性,是很明显的。
    这个词典当中,是包含词的搭配信息的。

    虽然,上述新趋势,给自然语言处理领域带来了成果。
    但是,从理论方法的角度看,由于采集、整理、表示和有效应用大量知识的困难。
    这些系统更依赖于统计学的方法和其他简单的方法和技巧。
    而这些统计学的方法和其他简单的方法,似乎也快达到它们的极限了。

    因此,眼下,在自然语言处理界,广泛争论的一个问题便是:
    要取得新的更大的进展,主要有待于理论上的突破?
    还是可以由现有的方法的完善和优化实现?
    答案还不清楚。
    

    大致上,更多的语言学家,倾向于前一种意见,
    而更多的工程师则倾向于后一种意见。
    答案或许就在中间。
    就是,将基于知识和推理的深层方法、基于统计的浅层方法结合起来。
    自然语言处理理论上的一种突破,
    就是自然语言的实质理解的研究,已经取得进展。

    六 存在问题

    现阶段存在的问题,有两个方面:
    一方面,迄今为止的语法,都限制于分析一个孤立的句子,
    上下文关系、谈话环境对本句的约束和影响,还缺乏系统的研究,
    因此,分析歧义、词语省略、代词所指、
    同一句话在不同场合或由不同的人说出来,所具有的不同含义等问题,
    还没有明确的规律可循,需要加强语用学的研究,才能够逐步解决。

    另一方面,人理解一个句子,不是单凭语法,
    还运用了大量的有关知识,
    包括生活知识和专门知识,
    这些知识无法全部贮存在计算里。
    因此,一个书面理解系统,只能建立在有限的词汇、句型和特定的主题范围内。
    计算机的贮存量和运转速度大大提高之后,才有可能适当扩大范围。

    第一个方面说的上下文约束理解问题。
    第二个方面说的是发散理解的问题。
    

    以上存在的问题,成为了自然语言理解,在机器翻译应用中的主要难题。
    这也就是当今机器翻译系统的译文质量,距离理想目标,仍然相差甚远的原因之一。
    译文质量是机译系统成败的关键。
    中国数学家、语言学家周海中教授,曾经在经典论文《机器翻译五十年》
    指出:

    要提高机器翻译的质量,
    首先要解决的是语言本身问题,而不是程序设计问题。
    单单依靠若干程序,来做机器翻译系统,肯定是无法提高机器翻译质量的。
    另外,
    在人类还没有了解大脑是如何进行语言的模糊识别和逻辑判断的情况下,
    机器翻译想要达到,信达雅的程度,是不可能的。
    
    展开全文
  • 周六晚上10点半, 张大胖兴冲冲地在微信上找我:“欣哥,我发现一个编程软件,非常酷!”我:“别烦我!我忙着追剧呢。”“真的非常酷,这个软件叫MetaCode ,可以用自然...
  • 自然语言的定义

    2019-10-05 13:43:00
    这几天在B站上听宗成庆老师的《自然语言处理》的课程。 其中宗老师介绍了一些关于语言的定义,如下: 人类所特有的用来表达意思、交流思想的工具,是 一种特殊的社会现象,由语音、词汇和语法构成一定 的系统...
  • 5本自然语言处理书单-附pdf

    千次阅读 2019-05-24 15:10:26
    文章发布于公号【数智物语】(ID:decision_engine),关注公号不错过每一篇干货。...自然语言处理研究的内容包括但不限于如下分支领域:文本分类、信息抽取、自动摘要、智能问答、话题推荐、机器翻...
  • 什么是自然语言处理? 自然语言处理(NLP)是指机器理解并解释人类写作、说话方式的能力。 NLP的目标是让计算机/机器在理解语言上像人类一样智能。最终目标是弥补人类交流(自然语言)和计算机理解(机器语言)之间...
  • 中文自然语言处理入门实战

    万次阅读 多人点赞 2019-07-05 10:16:32
    本达人课,作为中文自然语言处理边学边实战的入门级教程,以小数据量的“简易版”实例,通过实战带大家快速掌握 NLP 在中文方面开发的基本能力。 本课程共包含 18 节。各小节之间并没有紧密耦合,但是整个内容还是...
  • 简介 现在很多公司和组织每天都要处理大量的文本信息,包括邮件、评论、客户的电话等。将这些数据变成有用的信息需要花费大量的时间。抽取这些信息的一个核心的...自然语言处理在现阶段变得越来越重要,不管你是做...
  • 深度学习与自然语言处理之五:从RNN到LSTM

    万次阅读 多人点赞 2018-08-25 16:07:18
    /* 版权声明:可以任意转载,转载时请标明文章原始出处和作者信息 .*/    author: 张俊林   (想更系统地学习深度学习知识?请参考:深度学习枕边书) 大纲如下: 1.RNN 2.LSTM ...
  • 一张图看懂自然语言处理技术框架

    万次阅读 2018-05-23 18:02:20
    一张图看懂自然语言处理技术框架 一、前 正在针对《人工智能产品经理最佳实践》视频课程第三部分,关键技术篇,进行相关的内容重构,今天整理的部分是自然语言处理技术框架,特地绘制了一张自然语言处理的技术...
  • NLP:自然语言处理技术的简介、发展、案例应用之详细攻略 目录 自然语言处理技术的简介 1、NLP技术的意义 2、NLP的两个方向——自然语言理解和自然语言生成 自然语言处理技术的发展 自然语言处理技术的案例...
  • 1、自然语言处理圣经---《自然语言处理综论》2、视频课程《深度学习与自然语言处理-2018》3、Natural Language Processing (NLP)4、吴恩达经典课程 - Machine Learning —Coursera5、斯坦福 Natural Language ...
  • 最近在学习NLP(自然语言处理),于是先看了看都有神马包可以使用,查了一遍网上说是NLTK包,下载了然后才想到我是要学中文的自然语言处理,于是就想看看专门处理中文的包有哪些。  又是一番搜索,我找到了网络...
  • 自然语言处理技术的一些应用

    万次阅读 2018-02-26 16:05:17
    自然语言处理技术的一些应用转载:https://zhuanlan.zhihu.com/p/31388720自然语言处理(NLP)是现代计算机科学和人工智能领域的...自然语言处理并不是一般地研究自然语言,而在于研制能有效地实现自然语言通信的计...
  • 自然语言并不规范,虽然可以找一些基本规则,但是自然语言太灵活了,同一个意思可以用多种方式来表达,不管是基于规则来理解自然语言还是通过机器学习来学习数据内在的特征都显得比较困难。 2.错别字 在处理文本时...
  • MOOCsMIT 的 Natural Language ProcessingStanford 的cs224n Natural Language Processing Stanford 的 CS224d: Deep Learning for Natural Language Processing :讲述深度学习在自然语言处理方面比较成功的应用。...
  • 中文自然语言处理可能是 NLP 中最难的?

    万次阅读 热门讨论 2018-06-22 13:22:21
    在人工智能背景技术下,自然语言处理(NLP)技术被越来越多的人看好,并受到重视。其中,以微软小冰为代表的聊天机器人,如今却成了网红,迅速刷爆了微信和朋友圈,一个17岁纯情少女懂礼貌、有素质和会作诗,众多...
1 2 3 4 5 ... 20
收藏数 429,105
精华内容 171,642
关键字:

自然语言