看这里!自然言语处理(NLP)疾速入门指南

图灵汇官网

自然语言处理(NLP)的一大优势在于它跨越了多个研究领域,包括人工智能和计算语言学等多个学科,致力于探索计算机与人类语言之间的互动。其主要目标是让计算机能够高效且精准地处理大量的自然语言数据。自然语言数据集是指用真实世界的语言表达的知识,它通过文本及语言与其他语言的关系,综合形成一套抽象的规则体系。

尽管NLP在现代计算机工业革命中发挥了重要作用,但它其实源于阿兰·图灵的研究成果。他曾破解了德国的Enigma密码,并撰写了《计算机器与智能》一文,首次探讨了计算机与人类语言之间的关联。随着技术的不断进步,我们见证了NLP通过诸如谷歌翻译、IBM的沃森机器人、语音识别和生成、情感分析等革命性工具,极大地改变了我们的日常生活。

然而,NLP也存在一些挑战和局限性。生成自然流畅的语言是一项艰巨的任务,这与阅读糟糕的电影剧本时的感觉相似,因为这种语言听起来像是由一台计算机生成的。尽管有办法试图理解语调变化,但NLP仍然难以理解诸如讽刺和幽默等复杂概念。这一领域需要更多的研究,我期待着“讽刺突破”的那一天。除此之外,理解朋友偶尔的问候或即时消息中的微妙含义也是一项挑战。

目前,一些最实用的计算机和数据科学工具包括CountVectorization、哈希向量化、词频-逆文档频率(TF-IDF)、词形还原、词干提取、句法分析和情感分析。

CountVectorization

是一种SciKitLearn库工具,可以从大量文本中提取词频特征。通过这种方法,可以生成大量的特征,其中包括一些非常有用的参数,如去除停用词、n-gram范围和最大特征数量。停用词是一种不作为特征的单词列表,主要用于排除一些常见但对分析无实际意义的词汇。n-gram范围决定如何将单词组合在一起,而不是单独处理每个单词。例如,如果设置为2,可以得到短语“Hello again”,如果设置为3,则可以得到“See you later”。最大特征数量决定了生成的特征总数。如果设置为零,则表示所有单词都将作为特征,但如果设置为50,则只选择最常见的50个单词。

哈希向量化

利用“哈希技巧”将文本转换成事件矩阵,每个单词都被映射到一个特征,并通过哈希函数转换成哈希值。如果文本中再次出现该单词,则会被转换为相同的特征,这样就可以在同一个特征中对其进行计数,而无需维护词典。

词频-逆文档频率(TF-IDF)

揭示了不同文本体之间的差异单词。当试图比较一个文档中单词的区别,但在其他文档中无法体现这种差异时,这种方法特别有用。它基于单词频率、单词在文档中的出现频率以及文档的逆序变化,无论这些单词在整个文档集合中是独一无二的还是常见的。

词形还原

是一种将单词简化为其基本形式的过程。这是一种通过单词的意义来确定“词元(lemma)”的方法。它在很大程度上依赖于正确地发现单词的语法部分以及句子、段落或更大文档中单词的真实含义。例如,“run”、“running”和“ran”都是“run”的基本形式,而“better”和“good”则是同一词元的不同形式,因此被视为相同。

词干提取

与词形还原非常相似,因为它也将单词简化为其基本形式,但与词形还原不同的是,它不需要一个词并将其追溯到其基本或根形式。理想情况下,它涉及到将词干提取追溯到其基本形式。“Stems”、“Stemming”、“Stemmed”和“Stemtization”都是基于单词“stem”的形式。

句法分析

通常用于分析一系列单词以构成语法规则。对于NLP,它分析一系列单词,生成一个解析树,揭示单词之间的句法关系。然而,解析过程的难点在于何时以及何种程度的解析取决于用户,因为任何段落都可以以多种方式进行解析。

情感分析

是最简单的定义是从文档或文档集中提取单词的解释或客观含义,以确定特定单词或一组单词的“态度”。其中最大的用途之一是在社交媒体中,如Facebook和Twitter,发现言论的趋势,特定语气背景下出现的频率,以及了解词组的语气。

在进行所有这些分析之前,强烈建议先过滤并清洗处理的文档。我发现最好的函数之一是由我的老师马克·穆默特创建的。虽然它主要是通过Beautiful Soup清理HTML文件,但可以很容易地适应其他NLP清理工作。

def reviewtowords(raw_review):

# 移除HTML标签
review_text = BeautifulSoup(raw_review).get_text()

# 移除非字母字符
letters_only = re.sub("[^a-zA-Z]", " ", review_text)

# 转换为小写并拆分为独立的单词
words = letters_only.lower().split()

# 将停用词转换为集合并移除它们
stops = set(stopwords.words("english"))
meaningful_words = [w for w in words if w not in stops]

# 将单词重新连接成一个字符串,单词间用空格分隔,并返回结果。
return " ".join(meaningful_words)

NLP领域广阔且复杂,它将继续成为一个重要的研究领域。在这个领域有许多有用的工具,这些工具在理解和应用语言方面有着极其重要的作用。

对于Python用户来说,我认为最有用的NLP资源将是Sci-Kit Learn库和NLTK库。

本文来源: 图灵汇 文章作者: 宁波智博会