文本表示
预计学习时间:25分钟
文本表示(Text Representation)是将自然语言文本转换为计算机可处理的数值形式的方法,是自然语言处理的基础环节。
文本表示的演进
文本表示技术经历了从简单到复杂的发展历程:
- One-Hot编码:最早期的稀疏表示方法
- 词袋模型(Bag of Words):基于词频的统计表示
- TF-IDF:考虑词频与文档频率的加权表示
- 分布式表示:基于分布假说的密集向量表示
- Word2Vec, GloVe, FastText
- 上下文化表示:根据上下文动态生成的表示
- ELMo, BERT, GPT等模型生成的表示
向量化表示的重要性
将文本转换为向量有几个关键优势:
- 数学运算:支持相似度计算、聚类、分类等操作
- 语义捕捉:可以捕捉词汇间的语义关系
- 维度降低:将高维稀疏表示压缩为低维密集表示
- 泛化能力:有助于处理未见过的词汇和表达
# 简单的One-Hot编码示例
def one_hot_encode(word, vocabulary):
"""
为单词创建one-hot编码
参数:
- word: 需要编码的单词
- vocabulary: 词汇表,包含所有可能的单词
返回:
- one_hot_vector: 词的one-hot编码
"""
# 初始化全零向量
one_hot_vector = [0] * len(vocabulary)
# 设置对应位置为1
if word in vocabulary:
word_index = vocabulary.index(word)
one_hot_vector[word_index] = 1
return one_hot_vector
# 示例使用
vocabulary = ["自然", "语言", "处理", "模型", "学习"]
encoded_word = one_hot_encode("语言", vocabulary)
print(encoded_word) # [0, 1, 0, 0, 0]
"好的文本表示是有效NLP模型的基础,它决定了模型能够捕捉多少语义信息。"
表示方法的比较
不同文本表示方法各有特点:
One-Hot编码
- 优点:简单直观
- 缺点:维度灾难、无法表达语义关系
词袋模型与TF-IDF
- 优点:考虑词频信息
- 缺点:忽略词序、语义捕捉有限
分布式表示(Word2Vec等)
- 优点:低维密集向量、保留语义关系
- 缺点:静态表示、多义词问题
上下文化表示(BERT等)
- 优点:动态表示,根据上下文变化
- 缺点:计算复杂,需要大量资源
表示方法 | 维度 | 语义捕捉 | 计算复杂度 | 应用场景 |
---|---|---|---|---|
One-Hot | 词表大小 | 极低 | 低 | 简单任务 |
TF-IDF | 词表大小 | 低 | 中 | 文档检索 |
Word2Vec | 通常50-300 | 中 | 中 | 一般NLP任务 |
BERT嵌入 | 768+ | 高 | 高 | 高级NLP任务 |