首页 / 资料库 / 微软 · AI 入门

资料库16 分钟读完MIT自然语言处理文本表示词袋TF-IDFn-gram

文本表示

译自《Text Representation》 · 查看英文原文

原文出处Text Representation 原作者:Microsoft · 许可证:MIT License 中文译本由诸葛AI学院整理,仅供学习参考,版权归原作者与微软所有。

课前测验

文本分类

这一节的前半部分,我们围绕文本分类(text classification)任务展开。用的是 AG News 数据集,里面是这样一批新闻:

  • 类别:Sci/Tech(科技)
  • 标题:Ky. Company Wins Grant to Study Peptides (AP)
  • 正文:AP - A company founded by a chemistry researcher at the University of Louisville won a grant to develop...

目标是根据文本,把一条新闻归到某个类别里。

表示文本

想用神经网络解决自然语言处理(Natural Language Processing,NLP)的任务,先得有办法把文本表示成张量。计算机本来就用数字来表示文字字符,靠 ASCII 或 UTF-8 这类编码,把字符映射到屏幕上显示的字形。原文此处有一张图,画的是一个字符如何对应到它的 ASCII 码和二进制表示(图片来源)。

作为人,我们明白每个字母代表什么,也知道这些字符怎么拼成一句话里的词。计算机自己没有这种理解,含义得靠神经网络在训练时去学。

表示文本因此有不同的路子:

  • 字符级表示(character-level representation):把每个字符当成一个数字。假如文本库里共有 C 个不同字符,那么 Hello 这个词就用一个 5×C 的张量表示,每个字母对应张量的一列,用 one-hot 编码填。
  • 词级表示(word-level representation):先把文本里所有词做成一个词汇表(vocabulary),再用 one-hot 编码表示每个词。这条路更好一些,因为单个字母没什么含义,改用更高一层的语义单位,也就是词,等于替神经网络减轻了负担。代价是词典规模很大,得面对高维的稀疏张量。

不管用哪种表示,第一步都是把文本切成一串令牌(token):一个令牌可以是一个字符、一个词,有时甚至是词的一部分。接着把令牌换成数字,通常靠词汇表来查,这个数字再用 one-hot 编码喂给神经网络。

N-Grams

自然语言里,一个词的准确含义离不开上下文。比如 neural network(神经网络)和 fishing network(渔网),意思天差地别。有一种办法照顾到这一点:让模型建立在词对之上,把词对当作独立的词汇表令牌。这样 I like to go fishing 就被切成一串令牌:I likelike toto gogo fishing。问题在于词典规模会急剧膨胀;go fishinggo shopping 成了两个不同的令牌,明明共用同一个动词,语义上的相似性却一点没剩。

有些场合会连三个词的组合(tri-grams)一起考虑,这套做法因此通常叫 n-grams。n-grams 也适合配字符级表示用,这时它大致对应不同的音节。

词袋与 TF/IDF

做文本分类这类任务时,需要一个固定长度的向量(vector)来表示整段文本,作为最后那个稠密分类器的输入。最简单的做法之一是把各个词的表示合并,比如加起来。把每个词的 one-hot 编码相加,得到的就是一个频次向量,记录每个词在文本中出现了几次。这种文本表示叫词袋(bag of words,BoW)

原文此处有一张图,画的是几句话各自对应的词袋向量(图为原文作者所绘)。

词袋记录的实质是:文本里有哪些词、各有几个。光凭这个,基本能判断文本讲的是什么。讲政治的新闻大概率出现 president(总统)、country(国家)这类词,科学论文则会有 collider(对撞机)、discovered(发现)之类。所以很多情况下,词频是文本内容的一个不错的指标。

词袋的问题在于,andis 这类常见词几乎出现在所有文本里,频次最高,反而把真正要紧的词盖住了。办法是按词在整个文档集合里出现的频率去压低它们的权重。这就是 TF/IDF(term frequency-inverse document frequency,词频-逆文档频率)方法的核心想法,本课附带的 notebook 里有更细的展开。

这些方法都照顾不到文本的语义(semantics)。要做这件事得用更强的神经网络模型,这一节后面会讲。

练习:文本表示

继续在下面的 notebook 里学:

小结

到目前为止,我们学的技术能给不同的词加上频次权重,表示不了含义,也表示不了顺序。语言学家 J. R. Firth 在 1935 年说过一句有名的话:"一个词的完整含义永远是上下文的产物,脱离上下文研究含义,不能当真。"课程后面会讲怎么用语言模型从文本里捕捉上下文信息。

挑战

拿词袋配不同的数据模型,自己找些练习做做。这个 Kaggle 竞赛也许能给你些灵感。

课后测验

复习与自学

Microsoft Learn 上练练文本嵌入(embedding)和词袋这些手法。

作业:Notebook

这篇在讲什么,跟咱们的课怎么对?

资料库是大厂公开教材的中文译本,偏原理和工程做法。想看面向中小企业的白话版本,去入门课场景课