将文本转换成向量的过程通常被称为“文本向量化”或“词嵌入”。这是一种将自然语言文本中的单词或短语转换成数值向量的方法,以便计算机可以通过这些向量来理解和处理文本数据。
1. One-Hot Encoding
这是最简单也是最基础的文本向量化方法。对于一个给定的词汇表,每个单词都被表示为一个长度等于词汇表大小的向量,其中只有一个位置的值为1,代表该单词在词汇表中的位置,其余位置均为0。
例子:
假设词汇表为 [“apple”, “banana”, “cherry”],那么 “banana” 的 one-hot 向量就是 [0, 1, 0]。
2. Bag of Words (BoW)
Bag of Words 方法同样基于词汇表,但它不关注单词在文档中的顺序,只关注单词出现的频率。对于每篇文档,你会得到一个向量,其中每个维度对应词汇表中的一个词,向量的值表示该词在文档中出现的次数。
例子:
如果文档为 “I love apples I love bananas”,词汇表为 [“I”, “love”, “apples”, “bananas”],那么文档的 BoW 向量将是 [2, 2, 1, 1]。
3. TF-IDF (Term Frequency-Inverse Document Frequency)
TF-IDF 是一种统计方法,用于评估一个词在一个文档或多个文档中的重要程度。TF-IDF 值越大,表示该词对文档的重要性越高。它结合了词频(TF)和逆文档频率(IDF)。
公式:
TF-IDF
(
t
,
d
,
D
)
=
TF
(
t
,
d
)
×
IDF
(
t
,
D
)
\text{TF-IDF}(t, d, D) = \text{TF}(t, d) \times \text{IDF}(t, D)
TF-IDF(t,d,D)=TF(t,d)×IDF(t,D)
其中 ( t ) 是词,( d ) 是文档,( D ) 是文档集,
TF
(
t
,
d
)
\text{TF}(t, d)
TF(t,d) 表示词 ( t ) 在文档 ( d ) 中的词频
IDF
(
t
,
D
)
\text{IDF}(t, D)
IDF(t,D) 表示词 ( t ) 在文档集 ( D ) 中的逆文档频率。
IDF
IDF(Inverse Document Frequency,逆文档频率)是一种衡量一个词在文档集合中的重要性的指标。它的目的是降低那些在文档中频繁出现但又普遍存在于所有文档中的词的重要性,同时提高那些能够体现文档主题特性的词的重要性。
IDF 的计算公式
IDF 的计算公式如下:
IDF
(
t
,
D
)
=
log
(
N
1
+
∣
d
:
t
∈
d
∣
)
\text{IDF}(t, D) = \log\left(\frac{N}{1 + |{d : t \in d}|}\right)
IDF(t,D)=log(1+∣d:t∈d∣N)
- ( N ) 是文档总数。
- ∣ d : t ∈ d ∣ |{d : t \in d}| ∣d:t∈d∣ 是包含词 ( t ) 的文档数量。
- 加1是为了避免分母为0的情况。
IDF 的解释
- 高频词的惩罚:如果一个词在很多文档中都出现过,那么这个词可能是一个很常见的词,比如“的”、“是”等,在中文文档中非常常见。这样的词虽然在文档中出现频率很高,但是并不能很好地帮助区分文档的主题,因此需要降低它们的重要性。
- 低频词的提升:相反,如果一个词只出现在少数文档中,那么这个词可能是特定领域的术语或者与某个文档的主题紧密相关。这样的词有助于区分不同文档的内容,因此应该被赋予更高的权重。
示例
假设我们有一个文档集合 ( D ),包含了以下四个文档:
- “I love programming”
- “Programming is fun”
- “I love reading books”
- “Books are interesting”
我们可以计算词 “programming” 的 IDF 值:
- 文档总数 ( N = 4 )。
- 包含 “programming” 的文档数为 2。
- 因此, IDF ( "programming" , D ) = log ( 4 1 + 2 ) = log ( 4 3 ) ≈ 0.29 \text{IDF}(\text{"programming"}, D) = \log\left(\frac{4}{1 + 2}\right) = \log\left(\frac{4}{3}\right) \approx 0.29 IDF("programming",D)=log(1+24)=log(34)≈0.29。
再计算词 “books” 的 IDF 值:
- 文档总数 ( N = 4 )。
- 包含 “books” 的文档数为 2。
- 因此, IDF ( "books" , D ) = log ( 4 1 + 2 ) = log ( 4 3 ) ≈ 0.29 \text{IDF}(\text{"books"}, D) = \log\left(\frac{4}{1 + 2}\right) = \log\left(\frac{4}{3}\right) \approx 0.29 IDF("books",D)=log(1+24)=log(34)≈0.29。
最后计算词 “love” 的 IDF 值:
- 文档总数 ( N = 4 )。
- 包含 “love” 的文档数为 2。
- 因此, IDF ( "love" , D ) = log ( 4 1 + 2 ) = log ( 4 3 ) ≈ 0.29 \text{IDF}(\text{"love"}, D) = \log\left(\frac{4}{1 + 2}\right) = \log\left(\frac{4}{3}\right) \approx 0.29 IDF("love",D)=log(1+24)=log(34)≈0.29。
在这个简单的例子中,“programming” 和 “books” 的 IDF 相同,这表明这两个词在这个小的文档集合中具有相同的区分度。“love” 的 IDF 也相同,说明这个词虽然在两个文档中出现,但并不特别有助于区分文档。