0


【AI知识点】词袋模型(Bag-of-Words,BOW)

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】


词袋模型(Bag-of-Words,简称BOW)是一种用于文本表示的简单且常用的方法,尤其在自然语言处理(NLP)和信息检索领域中广泛应用。词袋模型的核心思想是将文本表示为一个词频统计的集合,而不考虑词的顺序和语法结构。每个词在文本中出现的频率被用来表示文本的特征。

1. 词袋模型的基本思想

词袋模型的核心假设是词语的出现频率能够反映文本的内容,因此文本可以通过其包含的词语及其频率来描述。在词袋模型中,文本被表示为一组词语的无序集合,词的顺序、句法结构、以及语法关系都会被忽略。

例子:

假设我们有两段文本:

  • 文本1:“猫在沙发上睡觉。”
  • 文本2:“沙发上的猫在睡觉。”

在词袋模型中,这两段文本会被认为是相同的,因为它们包含的词汇是相同的,尽管词的顺序不同。

词袋模型会将这些文本表示为一个词汇表,然后计算每个词在文本中出现的频率。例如:
词汇表猫在沙发上睡觉文本111111文本211111
这表示了两个文本都包含相同的词,且每个词的频率都相同。因此,在词袋模型中,它们的表示是完全一样的。


2. 词袋模型的构建过程

构建词袋模型的基本步骤如下:

  1. 创建词汇表:将所有文档中的所有词语收集起来,去掉重复项,生成一个词汇表(vocabulary)。词汇表中的每个词对应一个特定的位置或索引。
  2. 词频统计:对每个文档,统计其中每个词在词汇表中的出现次数。生成一个向量,每个维度对应词汇表中的一个词,向量的值表示该词在该文档中出现的次数。
  3. 文档表示:将每个文档转换为一个词频向量,向量的长度等于词汇表的大小,每个位置上的值是该词在文档中出现的次数。

示例:

假设我们有如下三个句子:

  • 句子1:“我喜欢吃苹果。”
  • 句子2:“苹果很好吃。”
  • 句子3:“我不喜欢苹果。”

第一步:创建词汇表(去掉重复词):
词汇表我喜欢吃苹果很好不索引123456
第二步:根据词汇表统计每个句子的词频:

  • 句子1向量: ( 1 , 1 , 1 , 1 , 0 , 0 ) (1, 1, 1, 1, 0, 0) (1,1,1,1,0,0)
  • 句子2向量: ( 0 , 0 , 1 , 1 , 1 , 0 ) (0, 0, 1, 1, 1, 0) (0,0,1,1,1,0)
  • 句子3向量: ( 1 , 1 , 0 , 1 , 0 , 1 ) (1, 1, 0, 1, 0, 1) (1,1,0,1,0,1)

最终,我们通过词袋模型将这些句子表示为固定长度的向量,其中每个值对应于词汇表中某个词的出现次数。


3. 词袋模型的优缺点

优点:

  1. 简单且高效:词袋模型的概念非常简单,构建过程只涉及词频统计,计算成本低,非常适合在大规模文档集上使用。
  2. 无需复杂的语言处理:不需要考虑词语的顺序、语法结构等复杂的语言处理步骤,方便快速建模。

缺点:

  1. 忽略词序和语法:词袋模型完全忽略了文本中的词序和语法结构。例如,“我爱你” 和 “你爱我” 在词袋模型中是完全相同的表示,但它们的含义是完全不同的。
  2. 稀疏表示:对于大规模词汇表,词袋模型往往会产生非常高维和稀疏的向量表示。因为每个文档只会包含词汇表中的一小部分词,导致大部分向量维度的值为0。
  3. 无法捕捉语义信息:词袋模型无法识别词语的语义相似性。例如,“苹果”和“橘子”语义上相关,但在词袋模型中它们是完全独立的。

4. 词袋模型的变种

为了克服词袋模型的一些缺点,研究者们提出了一些变种和改进方法,最常见的包括:

a. TF-IDF(词频-逆文档频率)

TF-IDF(Term Frequency-Inverse Document Frequency)是对词袋模型的一种改进方法,它不仅考虑词在文档中的出现频率(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)

其中:

  •                                     TF                            (                            t                            ,                            d                            )                                  \text{TF}(t,d)                     TF(t,d) 是词                                         t                                  t                     t 在文档                                         d                                  d                     d 中的词频。
    
  •                                     IDF                            (                            t                            ,                            D                            )                                  \text{IDF}(t,D)                     IDF(t,D) 是逆文档频率,表示词                                         t                                  t                     t 在文档集                                         D                                  D                     D 中的常见程度,计算公式为:
    
    
    
     
      
      
        IDF 
       
      
        ( 
       
      
        t 
       
      
        , 
       
      
        D 
       
      
        ) 
       
      
        = 
       
      
        log 
       
      
        ⁡ 
       
       
       
         N 
        
        
        
          1 
         
        
          + 
         
        
          ∣ 
         
        
          { 
         
        
          d 
         
        
          ∈ 
         
        
          D 
         
        
          : 
         
        
          t 
         
        
          ∈ 
         
        
          d 
         
        
          } 
         
        
          ∣ 
         
        
       
      
     
       \text{IDF}(t,D) = \log \frac{N}{1 + | \{ d \in D : t \in d \} |} 
      
     
    
    IDF(t,D)=log1+∣{d∈D:t∈d}∣N​

其中

     N 
    
   
  
    N 
   
  
N 是文档集中的文档总数, 
 
  
   
   
     ∣ 
    
   
     { 
    
   
     d 
    
   
     ∈ 
    
   
     D 
    
   
     : 
    
   
     t 
    
   
     ∈ 
    
   
     d 
    
   
     } 
    
   
     ∣ 
    
   
  
    |\{ d \in D : t \in d \}| 
   
  
∣{d∈D:t∈d}∣ 表示包含词  
 
  
   
   
     t 
    
   
  
    t 
   
  
t 的文档数。

b. N-gram模型

N-gram模型是一种改进,它不仅考虑单个词的频率,还考虑连续

     n 
    
   
  
    n 
   
  
n 个词的组合。通过将多个连续词视为一个整体,N-gram 模型部分解决了词袋模型忽略词序的问题。
  • Unigram(1-gram):只考虑单个词。
  • Bigram(2-gram):考虑连续两个词的组合,例如 “我 喜欢” 和 “喜欢 吃”。
  • Trigram(3-gram):考虑连续三个词的组合。

N-gram 模型能够捕捉一定的词序信息,从而在一定程度上改善词袋模型对文本语义的捕捉能力。

c. 词嵌入(Word Embedding)

相比词袋模型,词嵌入是一种通过深度学习技术生成的稠密向量表示方法,如 Word2Vec、GloVe 等。词嵌入能够捕捉词与词之间的语义关系,并将语义相似的词表示为相近的向量,克服了词袋模型无法捕捉语义相似性的缺点。


5. 词袋模型的应用场景

尽管存在局限性,词袋模型在很多实际应用中仍然广泛使用,尤其在处理大规模文本时。以下是一些典型的应用场景:

a. 文本分类

词袋模型常用于文本分类任务中,例如垃圾邮件过滤、情感分析、新闻分类等。每个文档被表示为词频向量,作为分类模型的输入。

b. 信息检索

在搜索引擎中,词袋模型可以用于对文档和查询进行向量化表示,然后通过计算查询与文档之间的相似度(如余弦相似度)来检索相关文档。

c. 推荐系统

词袋模型可以用来对用户行为进行特征化,并通过分析用户行为中的词汇分布,提供个性化推荐。


6. 词袋模型的计算方法:余弦相似度

在信息检索中,词袋模型常常与余弦相似度结合使用。余弦相似度通过计算两个向量之间的夹角来衡量它们的相似性,其计算公式为:

      cos 
     
    
      ⁡ 
     
    
      θ 
     
    
      = 
     
     
      
      
        A 
       
      
        ⋅ 
       
      
        B 
       
      
      
      
        ∣ 
       
      
        ∣ 
       
      
        A 
       
      
        ∣ 
       
      
        ∣ 
       
      
        ⋅ 
       
      
        ∣ 
       
      
        ∣ 
       
      
        B 
       
      
        ∣ 
       
      
        ∣ 
       
      
     
    
   
     \cos \theta = \frac{\mathbf{A} \cdot \mathbf{B}}{||\mathbf{A}|| \cdot ||\mathbf{B}||} 
    
   
 cosθ=∣∣A∣∣⋅∣∣B∣∣A⋅B​

其中:

  •                                     A                                  \mathbf{A}                     A 和                                         B                                  \mathbf{B}                     B 是两个文本的词频向量。
    
  •                                     A                            ⋅                            B                                  \mathbf{A} \cdot \mathbf{B}                     A⋅B 表示两个向量的**点积**。
    
  •                                     ∣                            ∣                            A                            ∣                            ∣                                  ||\mathbf{A}||                     ∣∣A∣∣ 和                                         ∣                            ∣                            B                            ∣                            ∣                                  ||\mathbf{B}||                     ∣∣B∣∣ 分别是向量                                         A                                  \mathbf{A}                     A 和                                         B                                  \mathbf{B}                     B 的**模**(也称为向量的长度,计算方式为向量分量的平方和开根号)。
    

余弦相似度的取值范围是

     [ 
    
   
     − 
    
   
     1 
    
   
     , 
    
   
     1 
    
   
     ] 
    
   
  
    [-1, 1] 
   
  
[−1,1],其中:
  • 1 表示两个向量完全相似(夹角为0度),即两个文档包含的词汇及其频率分布完全相同。
  • 0 表示两个向量正交(夹角为90度),即两个文档没有任何相似性。
  • -1 表示两个向量完全相反(夹角为180度),在词袋模型的上下文中,这种情况非常少见。

示例:余弦相似度的计算

假设有两个文档:

  • 文档1:“我喜欢苹果。”
  • 文档2:“苹果很好吃。”

词汇表:**[“我”, “喜欢”, “苹果”, “很好”, “吃”]**

词袋向量:

  • 文档1向量: ( 1 , 1 , 1 , 0 , 0 ) (1, 1, 1, 0, 0) (1,1,1,0,0)
  • 文档2向量: ( 0 , 0 , 1 , 1 , 1 ) (0, 0, 1, 1, 1) (0,0,1,1,1)

计算它们的余弦相似度:

  1. 计算点积: 1 × 0 + 1 × 0 + 1 × 1 + 0 × 1 + 0 × 1 = 1 1 \times 0 + 1 \times 0 + 1 \times 1 + 0 \times 1 + 0 \times 1 = 1 1×0+1×0+1×1+0×1+0×1=1

  2. 计算两个向量的模:- ∣ ∣ A ∣ ∣ = 1 2 + 1 2 + 1 2 + 0 2 + 0 2 = 3 ||\mathbf{A}|| = \sqrt{1^2 + 1^2 + 1^2 + 0^2 + 0^2} = \sqrt{3} ∣∣A∣∣=12+12+12+02+02​=3​- ∣ ∣ B ∣ ∣ = 0 2 + 0 2 + 1 2 + 1 2 + 1 2 = 3 ||\mathbf{B}|| = \sqrt{0^2 + 0^2 + 1^2 + 1^2 + 1^2} = \sqrt{3} ∣∣B∣∣=02+02+12+12+12​=3​

  3. 计算余弦相似度:

       cos 
      
     
       ⁡ 
      
     
       θ 
      
     
       = 
      
      
      
        1 
       
       
        
        
          3 
         
        
       
         ⋅ 
        
        
        
          3 
         
        
       
      
     
       = 
      
      
      
        1 
       
      
        3 
       
      
     
       ≈ 
      
     
       0.33 
      
     
    
      \cos \theta = \frac{1}{\sqrt{3} \cdot \sqrt{3}} = \frac{1}{3} \approx 0.33 
     
    

    cosθ=3​⋅3​1​=31​≈0.33

因此,这两个文档的相似度为0.33,表示它们有一定的相似性,但不完全相同。


7. 总结

词袋模型(Bag-of-Words,BOW)是一种简单且高效的文本表示方法,它通过统计词语的出现频率来表示文档,并忽略了词序、句法结构和语义关系。尽管词袋模型易于实现,并且在许多任务中表现良好,但它有一定的局限性,无法捕捉文本中的词序和语义信息。

为了克服这些缺点,研究者们提出了多种改进方法,如TF-IDF(通过平衡词频和文档频率来增强效果)、N-gram模型(通过考虑词语的组合来捕捉词序信息)和词嵌入(通过深度学习生成稠密的语义表示)。

词袋模型的优势在于其计算简单,特别适用于大规模文本数据集,常用于文本分类、信息检索和推荐系统中。结合余弦相似度等相似性度量,词袋模型可以有效地计算文档之间的相似性,并应用于多种文本分析任务。


本文转载自: https://blog.csdn.net/weixin_43221845/article/details/142673387
版权归原作者 AI完全体 所有, 如有侵权,请联系我们删除。

“【AI知识点】词袋模型(Bag-of-Words,BOW)”的评论:

还没有评论