作者 |PURVA HUILGOL
编译 |VK
起源 |Analytics Vidhya
机器了解文本的挑战
“语言是一种极好的交换媒介”
你和我很快就会明确那句话。但机器根本无法解决原始模式的文本数据。他们须要咱们将文本分解成一种易于机器浏览的数字格局(自然语言解决背地的理念!)。
这就引入“词袋”(BoW)和 TF-IDF。BoW 和 TF-IDF 都是帮忙咱们将文本句子转换为向量的技术。
在这篇文章中,我将探讨“词袋”和 TF-IDF。咱们将应用一个直观和个别的例子来具体了解每个概念。
示例
我将用一个风行的例子来解释本文中的 Bag of Words(BoW)和 TF-IDF。
咱们都喜爱看电影(不同水平)。在我决定看一部电影之前,我总是先看它的影评。我晓得你们很多人也这么做!所以,我在这里用这个例子。
以下是对于某部恐怖电影的评论示例:
- 点评一:This movie is very scary and long
- 点评二:This movie is not scary and is slow
- 点评三:This movie is spooky and good
你能够看到对于这部电影的一些比照评论,以及电影的长度和节奏。设想一下看一千篇这样的评论是如许干燥。显然,咱们能够从中吸取很多乏味的货色,并以此为根底来掂量电影的体现。
然而,正如咱们在下面看到的,咱们不能简略地把这些句子交给机器学习模型,让它通知咱们一篇评论是侧面的还是负面的。咱们须要执行某些文本预处理步骤。
“词袋”和 TF-IDF 就是两个这样做的例子。让咱们具体理解一下。
从文本创立向量
你能想出一些咱们能够在一开始就把一个句子向量化的技巧吗?根本要求是:
- 它不应该导致稠密矩阵,因为稠密矩阵会导致高计算成本
- 咱们应该可能保留句子中的大部分语言信息
词嵌入是一种利用向量示意文本的技术。还有 2 种单词嵌入模式是:
- Bow,代表词袋
- TF-IDF,代表词频 - 逆文本频率
当初,让咱们看看如何将上述电影评论示意为嵌入,并为机器学习模型做好筹备。
词袋(BoW)模型
词袋(BoW)模型是数字文本示意的最简略模式。像单词自身一样,咱们能够将一个句子示意为一个词向量包(一个数字串)。
让咱们回顾一下咱们之前看到的三种类型的电影评论:
- 点评一:This movie is very scary and long
- 点评二:This movie is not scary and is slow
- 点评三:This movie is spooky and good
咱们将首先从以上三篇评论中所有的独特词汇中构建一个词汇表。词汇表由这 11 个单词组成:“This”、“movie”、“is”、“very”、“stear”、“and”、“long”、“not”、“slow”、“spooky”、“good”。
当初,咱们能够将这些单词中的每一个用 1 和 0 标记在下面的三个电影评论中。这将为咱们提供三个用于三个评论的向量:
点评向量 1:[1 1 1 1 1 1 0 0 0 0]
点评向量 2:[1 1 2 0 0 1 0 1 0 0 0]
点评向量 3:[1 1 1 0 0 0 1 0 1 1 1 1]
这就是“词袋”(BoW)模型背地的核心思想。
应用单词包(BoW)模型的毛病
在下面的例子中,咱们能够失去长度为 11 的向量。然而,当咱们遇到新的句子时,咱们开始面临一些问题:
- 如果新句子蕴含新词,那么咱们的词汇量就会减少,因而向量的长度也会减少。
- 此外,向量还蕴含许多 0,从而产生稠密矩阵(这是咱们心愿防止的)
- 咱们没有保留任何对于句子语法和文本中单词程序的信息。
词频 - 逆文本频率(TF-IDF)
咱们先对 TF-IDF 下一个正式定义。百科是这样说的:
“TF-IDF(term frequency–inverse document frequency)是一种用于信息检索与数据挖掘的罕用加权技术。TF 是词频 (Term Frequency),IDF 是逆文本频率指数 (Inverse Document Frequency)”
术语频率(TF)
首先让咱们了解术语频繁(TF)。它是掂量一个术语 t 在文档 d 中呈现的频率:
这里,在分子中,n 是术语“t”呈现在文档“d”中的次数。因而,每个文档和术语都有本人的 TF 值。
咱们再次应用咱们在词袋模型中构建的雷同词汇表来演示如何计算电影点评 2:
点评 2: This movie is not scary and is slow
这里
- 词汇:“This”,“movie”,“is”,“very”,“stear”,“and”,“long”,“not”,“slow”,“spooky”,“good”
- 点评 2 的单词数 =8
- 单词“this”的 TF=(点评 2 中呈现“this”的次数)/(点评 2 中的单词数)=1/8
同样地
- TF(‘movie’) = 1/8
- TF(‘is’) = 2/8 = 1/4
- TF(‘very’) = 0/8 = 0
- TF(‘scary’) = 1/8
- TF(‘and’) = 1/8
- TF(‘long’) = 0/8 = 0
- TF(‘not’) = 1/8
- TF(‘slow’) = 1/8
- TF(‘spooky’) = 0/8 = 0
- TF(‘good’) = 0/8 = 0
咱们能够这样计算所有点评的词频:
逆文本频率(IDF)
IDF 是掂量一个术语有多重要的指标。咱们须要 IDF 值,因为仅计算 TF 不足以了解单词的重要性:
咱们能够计算点评 2 中所有单词的 IDF 值:
IDF(’this’)=log(文档数 / 蕴含“this”一词的文档数)=log(3/3)=log(1)=0
同样地,
- IDF(‘movie’,) = log(3/3) = 0
- IDF(‘is’) = log(3/3) = 0
- IDF(‘not’) = log(3/1) = log(3) = 0.48
- IDF(‘scary’) = log(3/2) = 0.18
- IDF(‘and’) = log(3/3) = 0
- IDF(‘slow’) = log(3/1) = 0.48
咱们能够计算每个单词的 IDF 值。因而,整个词汇表的 IDF 值为:
因而,咱们看到“is”、“this”、“and”等词被降为 0,代表重要性很小;而“scary”、“long”、“good”等词则更为重要,因此具备更高的权值。
咱们当初能够计算语料库中每个单词的 TF-IDF 分数。分数越高的单词越重要,分数越低的单词越不重要:
当初,咱们能够计算点评 2 中每个单词的 TF-IDF 分数:
TF-IDF(‘this’, Review 2) = TF(‘this’, Review 2) IDF(‘this’) = 1/8 0 = 0
同样地
- TF-IDF(‘movie’, Review 2) = 1/8 * 0 = 0
- TF-IDF(‘is’, Review 2) = 1/4 * 0 = 0
- TF-IDF(‘not’, Review 2) = 1/8 * 0.48 = 0.06
- TF-IDF(‘scary’, Review 2) = 1/8 * 0.18 = 0.023
- TF-IDF(‘and’, Review 2) = 1/8 * 0 = 0
- TF-IDF(‘slow’, Review 2) = 1/8 * 0.48 = 0.06
同样地,咱们能够计算出对于所有评论的所有单词的 TF-IDF 分数:
咱们当初曾经取得了咱们词汇的 TF-IDF 分数。TF-IDF 还为频率较低的单词提供较大的值,并且当 IDF 和 TF 值都较高时,该值较高。TF-IDF 分值高代表该单词在所有文档中都很少见,但在单个文档中很常见。
结尾
让我总结一下咱们在文章中所探讨的内容:
- 词袋只创立一组向量,其中蕴含文档中的单词呈现次数,而 TF-IDF 模型还蕴含对于更重要的单词和不重要的单词的信息。
- 词袋向量很容易解释。然而,在机器学习模型中,TF-IDF 通常体现得更好。
尽管“词袋”和“TF-IDF”在各自方面都很受欢迎,但在了解文字背景方面依然存在空白。检测单词“spooky”和“scary 之间的相似性,或者将给定的文档翻译成另一种语言,须要更多对于文档的信息。
这就有对于 Word2Vec、CBOW、Skip-gram 等词嵌入技术的由来。
原文链接:https://www.analyticsvidhya.c…
欢送关注磐创 AI 博客站:
http://panchuang.net/
sklearn 机器学习中文官网文档:
http://sklearn123.com/
欢送关注磐创博客资源汇总站:
http://docs.panchuang.net/