词编码与词嵌入:自然语言处理的基础技术

1. 词编码(Word Encoding)

1.1 基本概念

词编码是将文本数据转换为数值形式的过程,以便计算机能够处理。常见的词编码方法包括:

  • One-Hot Encoding
  • 整数编码(Integer Encoding)

1.2 One-Hot Encoding

将每个词表示为一个长度为词汇表大小的向量,其中只有一个元素为1,其余为0。

示例
词汇表:[“cat”, “dog”, “mouse”]

  • “cat” -> [1, 0, 0]
  • “dog” -> [0, 1, 0]
  • “mouse” -> [0, 0, 1]

优点

  • 简单直观
  • 易于实现

缺点

  • 高维稀疏
  • 无法捕捉词与词之间的关系

1.3 整数编码(Integer Encoding)

将每个词映射为一个唯一的整数。

示例
词汇表:[“cat”, “dog”, “mouse”]

  • “cat” -> 1
  • “dog” -> 2
  • “mouse” -> 3

优点

  • 紧凑表示
  • 节省存储空间

缺点

  • 无法捕捉词与词之间的关系
  • 整数之间的大小关系可能引入误导

2. 词嵌入(Word Embedding)

2.1 基本概念

词嵌入是将词映射到低维连续向量空间的技术,能够捕捉词与词之间的语义关系。

2.2 常见方法

  1. Word2Vec

    • 通过预测上下文(CBOW)或预测目标词(Skip-Gram)学习词向量。
    • CBOW
      目标函数:max⁡∑t=1Tlog⁡p(wt∣wt−c,...,wt+c) \text{目标函数:} \max \sum_{t=1}^T \log p(w_t | w_{t-c}, ..., w_{t+c}) 目标函数:maxt=1Tlogp(wtwtc,...,wt+c)
    • Skip-Gram
      目标函数:max⁡∑t=1T∑−c≤j≤c,j≠0log⁡p(wt+j∣wt) \text{目标函数:} \max \sum_{t=1}^T \sum_{-c \leq j \leq c, j \neq 0} \log p(w_{t+j} | w_t) 目标函数:maxt=1Tcjc,j=0logp(wt+jwt)
  2. GloVe

    • 基于全局词共现矩阵,优化以下目标函数:
      J=∑i,j=1Vf(Xij)(wi⊤w~j+bi+b~j−log⁡Xij)2 J = \sum_{i,j=1}^V f(X_{ij}) (w_i^\top \tilde{w}_j + b_i + \tilde{b}_j - \log X_{ij})^2 J=i,j=1Vf(Xij)(wiw~j+bi+b~jlogXij)2
      其中XijX_{ij}Xij为词iii和词jjj的共现次数。
  3. FastText

    • 将词表示为n-gram字符的集合,能够处理未登录词。

2.3 示例

假设我们有以下句子:

  • “I love natural language processing”

经过Word2Vec训练后,可能得到以下词向量:

  • “love” -> [0.25, -0.12, 0.78, …]
  • “language” -> [0.34, 0.56, -0.45, …]

这些向量能够捕捉语义关系,例如:
vec("king")−vec("man")+vec("woman")≈vec("queen") \text{vec("king")} - \text{vec("man")} + \text{vec("woman")} \approx \text{vec("queen")} vec("king")vec("man")+vec("woman")vec("queen")


3. 词袋模型(Bag of Words, BoW)

3.1 基本概念

词袋模型将文本表示为词频向量,忽略词序和语法信息。

3.2 数学表示

对于文档DDD,词袋模型表示为:
BoW(D)=[f(w1),f(w2),...,f(wV)] \text{BoW}(D) = [f(w_1), f(w_2), ..., f(w_V)] BoW(D)=[f(w1),f(w2),...,f(wV)]
其中f(wi)f(w_i)f(wi)为词wiw_iwi在文档DDD中的频率,VVV为词汇表大小。

3.3 示例

假设有以下文档:

  • 文档1:“I love natural language processing”
  • 文档2:“I love deep learning”

词汇表:[“I”, “love”, “natural”, “language”, “processing”, “deep”, “learning”]

词袋表示:

  • 文档1:[1, 1, 1, 1, 1, 0, 0]
  • 文档2:[1, 1, 0, 0, 0, 1, 1]

3.4 优缺点

优点

  • 简单高效
  • 易于实现

缺点

  • 忽略词序和语法
  • 高维稀疏

4. 其他处理方法

4.1 TF-IDF

  • 词频-逆文档频率(Term Frequency-Inverse Document Frequency)
  • 衡量词在文档中的重要性:
    TF-IDF(t,d)=TF(t,d)×IDF(t) \text{TF-IDF}(t, d) = \text{TF}(t, d) \times \text{IDF}(t) TF-IDF(t,d)=TF(t,d)×IDF(t)
    其中:
    IDF(t)=log⁡N1+DF(t) \text{IDF}(t) = \log \frac{N}{1 + \text{DF}(t)} IDF(t)=log1+DF(t)N
    • NNN为文档总数
    • DF(t)\text{DF}(t)DF(t)为包含词ttt的文档数

4.2 N-gram

  • 将连续的nnn个词作为一个单元,捕捉局部词序信息。
  • 示例(Bigram):
    • 句子:“I love natural language processing”
    • Bigram:[“I love”, “love natural”, “natural language”, “language processing”]

5. 总结

  • 词编码将文本转换为数值形式,是自然语言处理的基础步骤。
  • 词嵌入通过低维连续向量表示词,能够捕捉语义关系。
  • 词袋模型简单高效,但忽略了词序和语法信息。
  • TF-IDFN-gram是常用的文本表示方法,能够提升模型性能。
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐