自然语言处理(NLP)—— 信息提取与文档分类

1. 初识信息提取

1.1 信息提取的基本知识

1.1.1 信息提取的概念

        信息提取(IE, Information Extraction)是自然语言处理(NLP)领域的一个重要分支,它专注于从文档或语料库中提取结构化信息。这与信息检索(IR, Information Retrieval)有所不同,后者是寻找包含某些信息的文档。IE更加关注于从这些文档中提取出具体的数据点,比如实体、实体之间的关系、实体的修饰词,以及更复杂的结构如表格和列表。

1.1.2 实体

        在信息提取中,实体通常是指名词短语,可以是单个词或几个词组成的短语。一个命名实体(Named Entity, NE)是特指某种具体事物的专有名词,比如人名、地名、机构名、缩写、时间表达式、货币或数字表达式等。在医学领域,一个命名实体可以是疾病、蛋白质、基因等的名称。

1.1.3 实体关系

        实体关系是指实体之间的逻辑关系或动作,可以理解为谓语,它描述了实体间的互动或属性关联。

1.1.4 信息提取的应用

        信息提取被广泛应用于各种场景,例如:

        自动摘要:从文档中提取关键句子或信息点来生成摘要
        事件检测:识别文本中描述的特定事件及其相关细节
        知识图谱构建:从大量文本中提取实体及其关系,构建知识库。

1.1.5 语义角色标注

        语义角色标注(Semantic Role Labeling, SRL)是信息提取的一个相关技术,它做的是相反的工作:给定一个谓语,找出它的各种语义角色或参数。这些语义角色回答了与动作相关的5W1H问题(谁、什么、何时、何地、为什么、怎样)。通过标注句子中谓语的各个语义角色,SRL有助于深入理解句子的意义,进一步支持复杂的信息提取和文本分析任务。

1.2 基于规则的方法

        在信息提取(IE)领域,基于规则的方法是一种传统但强大的技术。这种方法依赖于预定义的规则来识别和提取文本中的特定信息。规则可以是简单的正则表达式或更复杂的模式,涉及词汇、词性标签(POS tags)、外部字典、以及之前提取过程中的注解。

1.2.1 规则的类型

        正则表达式:使用正则表达式来匹配文本中符合特定模式的字符串。例如,匹配电子邮件地址或电话号码的正则表达式。
        复杂模式:这些模式可能包括词序(即词汇的顺序)、词性标签、语义标签,以及对特定词汇的引用。这些模式能够识别更复杂的语言结构,如特定类型的短语或句子。

1.2.2 规则的应用

        上下文模式 → 行动:这种类型的规则根据上下文模式识别文本中的实体或实体关系,然后执行一个特定的动作,如标记一个实体或一组实体及它们之间的关系。
        标记实体:规则可以用来标记单个实体或实体组,识别出文本中的特定信息点。
        标记实体关系:除了标记实体本身,规则还可以用来识别和标记实体之间的关系。

1.2.3 规则的排序

        规则的应用顺序非常重要,因为早期应用的规则可能会影响后续规则的匹配效果。通常,更具体的规则应该先于更通用的规则应用,以确保高精度的信息提取。

1.2.4 规则的创建

        手工编写:专家根据对领域的理解手工编写规则。这种方法可以达到很高的准确率,但耗时且难以覆盖所有情况。
        从语料库学习:使用机器学习技术从标注好的语料库中自动学习规则。这种方法可以在大规模数据上应用,但可能需要大量的标注数据来训练模型。

        基于规则的方法在特定领域或应用场景下仍然非常有效,尤其是在那些规则容易定义且变化不大的情况下。然而,随着机器学习技术的发展,许多IE任务开始采用基于学习的方法,以提高灵活性和扩展性。

1.3 统计方法

        在信息提取(IE)的领域内,统计方法为识别和提取文本中的结构化信息提供了一种动态且强大的途径。这些方法通常依赖于对文本数据的数学建模,以学习词语或文本段落如何组织成有意义的信息单元。统计方法可以按照不同的数据单位进行操作:单个词(tokens)或文本段落(segments)。

1.3.1 基于Token的方法

        在基于Token的方法中,处理的基本单元是单个词或标记(tokens)。给定一个序列的tokens(x_1, x_2, ..., x_n),目标是为每个token分配一个标签y_i \in Y。这里的Y是可能的标签集合,标签可以代表实体类型(如人名、地点、日期等)或其他相关信息。这种方法适合于任务如命名实体识别(NER),其中每个词需要被分类为特定类型的实体或非实体。

1.3.1.1 基于Token的方法示例:命名实体识别(NER)

        任务描述:从一段文本中识别出特定类型的实体,如人名、组织名、地点名等。

        示例文本:`"Alice and Bob visited the Microsoft headquarters in Redmond, Washington."`

        在这个例子中,基于Token的方法会将文本分解为单个词或Token,并为每个Token分配一个标签,表明它是否是一个命名实体,以及它属于哪种类型的实体。处理结果可能如下:

        Alice → B-PER (一个人名的开始)
        and → O (非实体)
        Bob → B-PER (另一个人名的开始)
        visited → O (非实体)
        the → O (非实体)
        Microsoft → B-ORG (一个组织名的开始)
        headquarters → O (非实体,虽然与一个实体相关)
        in → O (非实体)
        Redmond → B-LOC (一个地点名的开始)
        , → O (非实体)
        Washington → B-LOC (另一个地点名的开始)

        在这个过程中,每个词根据其在句子中的角色被标记,如B-PER(人名开始)、B-LOC(地点名开始)等。

1.3.2 基于Segment的方法

        与基于Token的方法不同,基于Segment的方法关注于识别文本中的连续片段,并为这些片段整体分配标签。这里,我们寻找一个片段序列s_1, s_2, ..., s_p,每个片段 s_j = l_j ... u_j被赋予一个标签 y_i。这种方法更适合于提取具有明确边界的信息块,例如短语或句子中的特定信息单元。

1.3.2.1 基于Segment的方法示例:信息抽取(特定信息段落)

        任务描述:从文档中提取包含特定信息的完整段落或句子,例如,抽取含有公司合并信息的句子。

        示例文本:`"The tech industry has seen a lot of mergers and acquisitions this year. Notably, Company A announced its acquisition of Company B, marking a significant shift in the market."`

        在这个例子中,基于Segment的方法可能会识别并提取整个句子或段落,因为它们包含了感兴趣的事件——公司合并。处理结果可能如下:

        Segment 1:`"Notably, Company A announced its acquisition of Company B, marking a significant shift in the market."`

        在这个过程中,整个段落被识别为包含有价值信息的单元,并被整体提取出来。标记可能不直接应用于单个词,而是应用于识别为包含特定信息的文本块。

        这两个示例展示了基于Token和基于Segment的信息提取方法在实际应用中的不同用途和处理方式。基于Token的方法适合于精细地识别文本中的特定元素,而基于Segment的方法则更适合于提取包含完整信息单元的文本段落。

1.3.3 统计方法的应用

        为了实现这些目标,研究者们已经采用了多种统计模型,包括:

        隐马尔可夫模型(HMM):一种序列模型,用于标记序列中的每个元素。
        最大熵马尔可夫模型(MEMM):一种在HMM基础上增加了特征函数的模型,允许更复杂的特征依赖。
        条件随机场(CRF):一种用于序列数据的统计建模方法,能够考虑整个序列的上下文信息,而不仅仅是独立的元素。CRF尤其适用于处理复杂的依赖和约束,因此在信息提取任务中表现很好。

        在实际应用中,CRFs因其强大的建模能力和灵活性,尤其在处理文本中的长范围依赖关系时,被证明是非常有效的。通过使用CRFs或类似的统计方法,信息提取系统能够学习如何最准确地识别和分类文本中的各种实体和它们之间的关系,从而支持从大量未结构化文本中提取有价值的信息。

2. 指代消解

2.1 指代消解的概念

        指代消解(Anaphora Resolution)是信息提取(IE)中的一个关键任务,涉及到识别文本中指向相同实体的不同表达。

        示例句子:“Le président de la république a rencontré le serial-killer dans sa cellule. Il a avoué éprouver des remords pour ses actes。”

        在给出的法语示例中,问题在于确定“sa”和“il”分别指代的是“le président de la république”还是“le serial-killer”。

        在这个例子中,我们需要决定“sa”(他的)和“il”(他)分别指的是哪个先行词——“le président de la république”(1)还是“le serial-killer”(2)。

2.2 指代消解的一般方法

        a. 识别/划定搜索先行词的范围:首先确定要在哪些句子或段落中寻找先行词。在上面的例子中,我们会在整个文段中搜索先行词
   
        b. 使用一致性测试:通过性别、数、格等特征进行一系列一致性测试,以排除一批候选项。例如,如果指代词是单数男性,那么任何不是单数男性的候选都将被排除。

        c. 对剩余候选进行加权:根据特定规则对剩余候选进行加权。这可能包括考虑句法结构、语义角色以及指代词与可能先行词之间的距离等因素。

        d. 选择权重最高的候选:最终,选择权重最高的候选作为正确的先行词。

2.3 示例分析

        sa cellule”(他的牢房):考虑到上下文,“sa”很可能指的是“le serial-killer”,因为牢房与罪犯相关。根据常识和句子的逻辑关系,我们可以推断“sa”指的是“le serial-killer”(2)。

        Il a avoué”(他承认了):在这个句子中,“il”可能指代“le président de la république”或“le serial-killer”。但考虑到“avoué éprouver des remords pour ses actes”(承认为他的行为感到懊悔),更符合逻辑的解释是“il”指的是“le serial-killer”(2),因为这是跟他的行为直接相关的活动。

        通过这种方法,我们可以更准确地理解文本的含义,从而提高信息提取的质量。指代消解对于构建准确的信息抽取系统和提高自然语言理解能力至关重要。

2.4 两种主要的处理策略

        在指代消解领域,基于规则的方法和统计方法是两种主要的处理策略。它们各自采用不同的技术来识别和解决文本中的指代关系,即确定句子或段落中的代词或指示性短语所指向的具体实体。

2.4.1 基于规则的方法

        基于规则的方法依赖于预定义的规则集来进行指代消解。这些规则通常基于语言学的特征,如词性标记(POS tag)和句法功能(如主语、间接宾语coi、直接宾语cod等)。

        CogNIAC [Baldwin 1995]:提出了六条规则,并且这些规则有特定的应用顺序。这种方法试图通过一系列明确的逻辑步骤来精确地识别指代和先行词之间的关系。

        Kennedy & Boguraev [1996]:根据十个因素给出正向权重,这些因素涉及词性标记和句法功能。这种方法尝试通过评估可能的指代和先行词之间的语言学特征来解决指代关系。

        Mitkov [1998]:应用正向和负向权重,根据一些指标(如词性、句法以及指代和先行词之间的距离)来进行判断。Mitkov的方法特别注意到了距离因素,考虑到距离可能对指代关系的确定产生重要影响。

2.4.2 统计方法

        与基于规则的方法不同,统计方法利用大量已标注的数据来训练模型,以识别指代和先行词之间的关系。这些方法通常不依赖于硬性的规则,而是通过学习数据集中的模式来进行预测。

        Soon et al. [2001]:采用了指标(他们称之为标记物markables)的概念,并对预先标注的语料进行训练。通过机器学习技术,他们的系统学习如何基于语料库中的例子来识别和解析指代关系。这种方法的一个主要优点是它可以适应新的语料和语言现象,因为模型是基于实际数据学习而来的。

        两种方法各有优势:基于规则的方法在规则清晰且适用的情况下可以非常精确,但可能需要大量的手动工作来定义规则,并可能难以覆盖所有可能的语言现象。统计方法能够自动从大量数据中学习,适应性强,但可能需要大量的标注数据,且在数据稀缺的情况下性能可能下降。在实践中,这两种方法有时会被结合使用,以充分利用各自的优势。

2.5 语义方法

        在指代消解的语义方法中,研究者们试图利用实体之间的语义关系来改善消解过程。Markert和Nissim在2005年的工作中讨论了使用语义输入(例如在WordNet中搜索语义邻近性)的方法,但他们指出这些方法并没有给出非常好的结果。这主要是因为所使用的本体论(ontologies)缺乏精细度和完整性。

2.5.1 语义方法的挑战

        以Markert和Nissim提供的例子为例:

        文本示例:`"Will Quinlan had not inherited a damaged retinoblastoma suppressor gene and, therefore, faced no more risk than other children."`

        在这个例子中,“W. Q.”(Will Quinlan)被识别为一个命名实体,其实体类别为“人”。问题在于决定“child”(儿童)是否在本体论中作为“人”的下义词(hyponym)或同义词出现。这种语义层面的分析对于理解“other children”实际上指代“W. Q.”本人还是其他某些儿童至关重要。

        在语义方法中处理指代消解时,使用像WordNet这样的语义网络来理解和解析词汇的关系是一种常见的做法。在提到的例子中,需要确定“child”是否在语义上可以视为“person”的下位词或同义词,以解决指代消解中的一个问题。

        根据WordNet的层次结构,我们可以看到“child”确实是“person”的一个下位词(hyponym)。这一层次结构如下所示:

        child (儿童):被定义为“任意性别的年轻人”,直接的上位词(hypernym)是“juvenile (少年)”。
        juvenile (少年):是“person (人)”的下位词,定义为“尚未完全发育的年轻人”。
        person (人):被定义为“一个人类个体”,是更广泛概念“organism (有机体)”的下位词。

        这一关系链表明,在WordNet中,“child”是“person”的下位词,这有助于解决一些语义上的指代消解问题。例如,在句子“Will Quinlan had not inherited a damaged retinoblastoma suppressor gene and, therefore, faced no more risk than other children.”中,“W.Q.”被识别为一个名词实体(Named Entity),类别为人(person),而“child”在这种情况下可以被视为指向相同类别实体的指代。

        虽然使用语义网络和本体论可以提供重要的语义信息来帮助指代消解,但[Markert Nissim 2005]指出,这种方法并不总是能达到很好的结果,原因是本体论的精细度和完整性可能不足。这强调了在实际应用中结合多种方法和策略的重要性,以及持续改进和扩展语义资源的必要性。        

2.5.2 语义方法的核心挑战

        本体论的完整性和精细度:如果本体论没有包含足够的细节或广度,它可能无法覆盖所有需要的语义关系,从而导致指代消解过程中的错误或不准确。
        语义关系的复杂性:实体之间的语义关系可能非常复杂,单纯依靠语义近似搜索可能不足以准确反映实体间的关系。
        上下文的影响:即使本体论足够丰富和精确,上下文因素也可能导致指代关系的变化,需要更精细化的处理机制来考虑这些因素。

2.5.3 解决方案

        为了克服这些挑战,可能需要结合多种方法和更先进的语义分析技术,例如:

        改进本体论:开发更全面、更细致的本体论,更好地覆盖不同领域和上下文中的语义关系。
        结合上下文分析:使用先进的自然语言处理技术来分析上下文,以更准确地识别语义关系。
        融合多种方法:将语义方法与规则基础、统计或机器学习方法结合起来,以利用各种方法的优点,提高指代消解的准确性。

        通过这种多角度、多技术的综合方法,可以更有效地解决语义方法在指代消解中面临的挑战,提高信息提取任务的总体性能。

3. 监督式文档分类

        在监督式文档分类中,目标是将文档根据预定义的类别进行分类。这个过程通常涉及几个关键步骤,从预处理阶段开始,到最终的分类决策。下面是这个过程的概述:

3.1 预处理阶段

        文档预处理:在这一阶段,原始文档经过一系列处理步骤,如去除停用词、词干提取、词形还原等,以提取出对分类有用的信息。
        信息提取:从文档中提取所需的信息,并将其集成到文档的表示中。这可能包括提取特定的实体、概念或任何其他可以用于分类的信息。

3.2 文档表示

        特征表示:文档通常通过一组特征来表示,这些特征可以被赋予权重。特征可以是文档中出现的词或短语,也可以是更复杂的语义单位,如同义词或上位词。
        词袋模型(Bag-of-Words, BoW):在这个模型中,每个词的出现(或频率)被视为一个属性(向量空间的一个维度)。有时,为了丰富文档的语义表示,可能会添加词的同义词或上位词。
        特征权重:使用词频-逆文档频率(tf-idf)作为文档中术语的权重。tf-idf衡量了一个词在文档中的重要性,同时考虑了它在整个文档集合中的分布情况。

3.3 监督式分类

        分类器训练:在监督式学习中,使用带有预定义类别标签的训练集来训练分类器。分类器学习如何根据文档的特征表示将其分配到一个或多个类别。
        类别预测:训练好的分类器被用于预测未标记文档的类别。

3.4 常用的分类算法

        朴素贝叶斯(Naive Bayes):基于概率的简单方法,尤其适用于文本数据。
        支持向量机(SVM):一种强大的线性分类器,适用于高维数据。
        随机森林(Random Forest):一种基于决策树的集成学习方法,能够处理非线性关系。
        深度学习:利用神经网络,尤其是卷积神经网络(CNN)和循环神经网络(RNN),进行文本分类。

        监督式文档分类的成功在很大程度上依赖于有效的特征提取、合适的模型选择,以及足够的训练数据。通过细致地调整这些因素,可以大大提高分类的准确性和效率。

4. 降维

        让我用更简单的语言解释一下什么是降维,以及隐含语义索引(LSI)是如何工作的。

4.1 什么是降维?

        想象一下,每篇文档都是由许多不同的单词组成的,如果我们试图了解这些文档的内容,每个不同的单词都会是一个维度。比如,如果我们有成千上万个不同的单词,那我们就有成千上万个维度。这就像试图在一个非常庞大的空间内找到每篇文档的位置,非常复杂!

        降维就是一种方法,帮助我们减少这些维度的数量,但同时尽量保持原有的信息。这样做可以让我们更容易地处理和分析文档。

4.2 线性降维方法——隐含语义索引(LSI)

        LSI是一种降维技术,特别用于处理文档和单词。它的目的是帮助我们找到文档中单词的隐藏(隐含的)关系,即使这些单词没有直接出现在同一个文档中。

4.2.1 创建矩阵

        首先,我们创建一个“文档-单词”矩阵,其中的每一行代表一个文档,每一列代表一个单词。如果一个单词在某个文档中出现,那么相应的位置就有一个数字(通常是出现的次数或一个加权值),否则就是0。

4.2.2 奇异值分解(SVD)

        然后,我们对这个矩阵进行一种特殊的数学操作——奇异值分解。这个过程会把原始的矩阵分解成三个新的矩阵(U, S, V),每个都有其特殊的数学意义。

        奇异值分解(Singular Value Decomposition,简称SVD)是线性代数中的一种重要技术,它可以分解任何形状的矩阵(不仅仅是方阵)。在SVD中,“奇异值”是矩阵分解过程中得到的一组特殊值。

        假设我们有一个m \times n的矩阵\( A \),我们可以将其分解为三个特殊矩阵的乘积:

A = U\Sigma V^T

        这里:

        U是一个m \times m的矩阵,称为左奇异向量矩阵,它的列向量是正交的。
       V是一个n \times n的矩阵,称为右奇异向量矩阵,它的列向量也是正交的。
       \Sigma是一个m \times n的对角矩阵,其对角线上的元素就是所谓的奇异值,而其余元素都是0。这些奇异值是从大到小排列的非负实数。

        奇异值反映了矩阵A的某些重要特性。在几何意义上,对于线性变换来说,奇异值表示变换中的拉伸因子。如果A是一个表示某种线性变换的矩阵,那么奇异值告诉我们变换会如何拉伸或压缩输入空间。

        在数据分析和信号处理等领域,奇异值用于确定矩阵的“秩”(即非零奇异值的数量),以及矩阵的信息内容。奇异值越大,相应的方向在数据中就越重要。通过保留最大的几个奇异值(以及相应的奇异向量),可以在降维时保留矩阵的主要特征,这是LSI中使用的主要原理。

4.2.3 选择主要成分

        接下来,我们只保留这些新矩阵中最重要的部分,这相当于去除了那些不那么重要(或者说是“噪音”)的信息。

4.2.4 重建矩阵

        最后,我们用这些保留下来的部分重建一个新的矩阵。这个新矩阵比原始矩阵小得多(也就是维度少得多),但仍然保留了大部分重要信息。

4.2.5 为什么要这么做?

        这样做有几个好处:
        简化数据:降低了处理和分析文档的复杂度。
        发现隐含关系:帮助我们发现单词之间的隐藏语义关系,即使这些单词没有在同一文档中直接出现。
        提高效率:使得数据处理和后续任务(如文档分类)更加高效。

        总之,LSI是一种通过减少数据维度同时揭示文档中隐藏信息的技术。这对于文本处理和信息检索等任务非常有用。

4.2.6 示例

        让我们用一个简化的例子来说明LSI(隐含语义索引)是如何工作的,特别是在文档降维上的应用。

        假设我们有3篇文档和4个单词(术语)构成的一个小型文档集合,文档-术语矩阵如下:

|           | 词1| 词2| 词3 | 词4 |
|---------|--- --|-----|-----|---   --|
| 文档1 |  1   | 1   | 0   |   0   |
| 文档2 |  0   | 1   | 1   |   0   |
| 文档3 |  1   | 0   | 1   |   1   |

        在这个矩阵中,行代表文档,列代表单词,数字代表该单词在文档中的出现频率(为了简化,这里使用0和1)。

4.2.6.1 应用LSI

        奇异值分解(SVD):我们首先对这个矩阵进行SVD分解,得到U, S, 和V^T三个矩阵。假设我们进行了分解,得到的S中的奇异值按降序排列。

        选择奇异值:为了降维,我们可能只选择前2个最大的奇异值及其对应的向量。这样做的结果是我们忽略了一些信息,但保留了最重要的结构特征。

        重构矩阵:使用这两个最大的奇异值及其对应的U和V的列,我们可以重构一个新的矩阵,这个矩阵是原始矩阵的一个近似,但维度更低。

4.2.6.2 降维的结果

        假设降维后的矩阵如下所示:

|         | 主题1 | 主题2 |
|---------|-------|-------|
| 文档1 | 0.9   | 0.1   |
| 文档2 | 0.5   | 0.5   |
| 文档3 | 0.2   | 0.8   |

        在这个新的矩阵中,每个文档现在只用两个数(而不是原来的四个)来表示,这两个数代表了文档在两个“主题”上的得分。这里的“主题”是通过LSI提取的隐含语义维度,它可能对应于原始单词的某种组合,揭示了文档内容的核心主题或概念。

4.2.6.3 结果解释

        文档1:更强烈地与“主题1”相关联,可能意味着它主要讨论与这个主题相关的内容。
        文档2:在两个主题上得分接近,表明它可能涵盖两个主题的内容。
        文档3:主要与“主题2”相关联。

        通过这个过程,LSI帮助我们从原始的高维数据中提取出最重要的语义维度,同时降低了处理的复杂度,并可能揭示出文档之间的隐含关系。

4.3 非线性降维方法 —— 流形学习(Manifold Learning)

        非线性降维方法能够在处理复杂数据结构时捕捉到数据的内在结构,这在线性方法如LSI可能无法实现的情况下尤其有用。其中一种流行的非线性降维方法是流形学习(Manifold Learning),其核心理念是数据点可能分布在一个复杂的、非线性的低维流形上,即使在高维空间中。

4.3.1 ISOMAP算法

        ISOMAP(Isometric Mapping)算法是Tenenbaum在2001年提出的一种流形学习方法,它通过保留数据内在的几何关系来实现降维。ISOMAP执行以下步骤:

        邻居寻找:首先确定每个数据点的邻居,通常是根据欧几里得距离。一个点的邻居定义为在某个半径ε之内的所有点。

        构建图:创建一个图,其中的节点是数据点,边连接每个数据点和它的邻居。边的权重是邻居之间的欧几里得距离。

        计算测地距离:对于图中的每一对点,使用Dijkstra算法或其他最短路径算法来找出它们之间的最短路径,这代表了它们在流形上的测地距离。

        多维缩放(MDS):利用图中的测地距离矩阵,通过多维缩放(MDS)来在低维空间中重构数据点,这样在原始高维空间中距离远的点,在新的低维表示中也会相隔较远。

4.3.2 流形学习的优点和限制

        优点:流形学习尤其适合于非线性结构的数据,能揭示数据中的内在结构,这对于模式识别和机器学习任务特别有价值。
  
        限制:计算测地距离需要构建和维护大型图,这可能在大规模数据集上导致计算量很大。另外,流形学习方法通常对超参数(如ε)比较敏感,而且对于数据集中的噪声也比较敏感。

        流形学习是探索数据本质结构的强大工具,但它的应用需要仔细考虑数据的特性和降维的目的。

5. 文档分类

        在文档分类中,一旦将文档表示为维数合理的向量,我们就可以使用经典的数据挖掘方法进行分类。这些方法可以是基于规则的、统计的、或者是利用机器学习算法的。下面是一些在文档分类中常用的方法:

5.1 基于规则的方法

        逻辑规则(比如析取范式,DNF):使用手工编写的规则来分类文档。这种方法依赖于领域知识和对数据集的深入理解。

5.2 统计方法

        朴素贝叶斯分类器:尽管朴素贝叶斯分类器的基本假设是文档中的所有词都是独立的,但它在实践中通常非常鲁棒,因为它的性能不太受违反独立性假设的影响。

        逻辑回归:用于估计文档属于某个类别的概率,是一种常用的分类方法。

        决策树(如ID3、C4.5、CART):通过学习文档特征与类别之间的决策规则,以树状结构表示决策路径。

        Rocchio的方法:通常用于信息检索中的相关性反馈,也可以用于分类。

        神经网络:可以学习复杂的模式,适用于非线性可分的数据。

        k近邻(kNN):基于最近邻的投票机制进行分类。

        支持向量机(SVM):寻找不同类别之间的最优分割边界。

        AdaBoost:一种提升方法,通过组合多个弱分类器形成一个强分类器。

5.3 无监督分类

        k-Means:是一种聚类算法,将文档分为k个簇,尝试最小化每个簇内部的方差。

        在应用这些方法之前,通常需要对文档数据进行预处理,如去除停用词、进行词干提取、构建词袋模型,以及使用词频-逆文档频率(TF-IDF)等技术为每个文档生成向量表示。然后根据训练集对分类模型进行训练,之后使用这些模型来预测新文档的类别。每种方法都有其优势和局限性,选择哪一种取决于具体的应用场景、数据特性以及性能要求。        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/20755.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RabbitMQ怎么保证可靠性

RabbitMQ怎么保证可靠性 前言生产端问题解决方案代码验证 RabbitMQ问题消费端问题解决方案代码验证 总结 前言 RabbitMQ相信大家都非常熟悉了,今天咱们来聊聊怎么保证RabbitMQ的可靠性。 那什么时候会出现问题呢? 第一种是生产端出现的问题。我们向队…

MySQL-事务日志

事务的隔离性由 锁机制 实现 事务的原子性、一致性、隔离性 由事务的 redo日志 和 undo 日志来保证 redo log 称为 重做日志,提供再写入操作,恢复提交事务修改的页操作,用来保证事务的持久性。undo log 称为 回滚日志,回滚行记录…

selenium自动化介绍

文章目录 一、selenium原理 安装二、selenium使用1.创建浏览器对象,访问网址2.消除警告提示3.不显示浏览器中受控制字样4.防检测5.设置延时5.1强制延时5.2隐式延时 6.设置浏览器窗口大小 三、案例实战:百度搜索四、iframe标签五、案例实战:Q…

第一周 数据结构与算法以及复杂度分析

数据结构与算法 算法定义 算法(algorithm)是在有限时间内解决特定问题的一组指令或操作步骤,它具有以下特性。 1.问题是明确的,包含清晰的输入和输出定义。 2.具有可行性,能够在有限步骤、时间和内存空间下完成。 3.…

【第五节】C++的多态性与虚函数

目录 前言 一、子类型 二、静态联编和动态联编 三、虚函数 四、纯虚函数和抽象类 五、虚析构函数 六、重载,重定义与重写的异同 前言 面向对象程序设计语言的三大核心特性是封装性、继承性和多态性。封装性奠定了基础,继承性是实现代码重用和扩展…

Linux内网中安装jdk1.8详细教程

本章教程,主要介绍如何在内网环境中配置JDK1.8环境变量 一、下载Linux版压缩包 下载地址:https://www.oracle.com/java/technologies/downloads/#java8 下载完成之后,通过XFTP等工具,将安装包上传到内网服务器 二、安装配置步骤 1、解压压缩包 tar -zxvf /usr/local/jdk-…

根据PDF模版填充数据并生成新的PDF

准备模版 使用 福昕高级PDF编辑器 (本人用的这个,其他的也行,能作模版就行)打开PDF文件点击 表单 选项,点击 文本域在需要填充数据的位置设计文本域设置 名称、提示名称相当于 属性名,提示就是提示&#x…

基于SSM的“基于Apriori算法的网络书城”的设计与实现(源码+数据库+文档)

基于SSM的“基于Apriori算法的网络书城”的设计与实现(源码数据库文档) 开发语言:Java 数据库:MySQL 技术:SSM 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 网站功能展示图 首页 商品分类 热销 新品 我的订单 个…

二位偏序,P3660 [USACO17FEB] Why Did the Cow Cross the Road III G

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 P3660 [USACO17FEB] Why Did the Cow Cross the Road III G - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 二、解题报告 1、思路分析 二维偏序问题 我们将坐标按照第一维排序 然后树状数组维护区间内的…

【深度学习】【STWave】时空图预测,车流量预测,Efficient Spectral Graph Attention Network

Spatio-Temporal meets Wavelet: Disentangled Traffic Flow Forecasting via Efficient Spectral Graph Attention Network 代码:https://github.com/LMissher/STWave 论文:https://arxiv.org/abs/2112.02740 帮助: https://docs.qq.com/s…

C++STL---vector模拟实现

通过上篇文章,我们知道vector的接口实际上和string是差不多的,但是他俩的内部结构却大不一样,vector内有三个成员变量:_start、_finish、_endofstorage: _start指向容器的头元素,_finish指向有效元素末尾的元素&#x…

Vue2 + Element UI 封装 Table 递归多层级列表头动态

1、在 components 中创建 HeaderTable 文件夹&#xff0c;在创建 ColumnItem.vue 和 index.vue。 如下&#xff1a; 2、index.vue 代码内容&#xff0c;如下&#xff1a; <template><div><el-table:data"dataTableData"style"width: 100%"…

OSM历史10年(2014-2024)全国数据下载(路网、建筑物、POI、水系、地表覆盖利用······)

点击下方全系列课程学习 点击学习—>ArcGIS全系列实战视频教程——9个单一课程组合系列直播回放 零、前沿 这次向大家介绍一下OSM&#xff08;OpenStreetMap&#xff09;十年历史数据&#xff08;2014—2014&#xff09;的下载方法。当然我们也下载好分享给大家&#xff…

JAVA web期末复习总结

C/S结构与B/S结构区别&#xff1a; 在C/S结构中&#xff0c;客户端通常是一个独立的应用程序&#xff0c;需要在用户的计算机上安装和运行。而在BS结构中&#xff0c;客户端是一个Web浏览器&#xff0c;用户只需要通过浏览器打开网页&#xff0c;不需要安装额外的应用程序。 C…

程序员上岸指南

如果你还在996&#xff0c;大小周&#xff0c;感觉身体被掏空&#xff0c;那么你可以看看下面这篇文章&#xff0c;我特意搜集了一些苦逼程序员的上岸教程。 人生真的就是做几道选择题&#xff0c;选错了&#xff0c;忙也是瞎忙。选对了&#xff0c;躺着都能赢。总的来说&#…

良心推荐:什么软件能够监控公司电脑,就这5款软件能监控公司电脑

用软件监控员工电脑在大多数国家是非法的&#xff0c;不过在中国&#xff0c;企业在办公场所安装监控设备以监控员工工作&#xff0c;在遵循一定限制和条件的前提下&#xff0c;是合法的。以下是一些符合这些条件&#xff0c;并且广泛被企业采用的员工电脑监控软件的良心推荐&a…

C++:儿童节快乐呀!

六一快乐&#xff01;~ 今天我来宣布一个 ——————Cookie Maker工作室成立了&#xff01;—————— 目前参与人数&#xff1a;7 人名列单&#xff1a; 真实姓名 联系方式以及用户名 ZINCFFO CSDN&#xff08;ZINCFFO&#xff09; &…

使用 Scapy 库编写 IP 地址欺骗攻击脚本

一、介绍 1.1 概述 IP地址欺骗&#xff08;IP Spoofing&#xff09;是一种网络攻击技术&#xff0c;攻击者伪造其数据包的源IP地址&#xff0c;使其看起来像是从其他合法地址发送的。这种技术常用于各种攻击中&#xff0c;例如DDoS攻击、Man-in-the-Middle&#xff08;MITM&a…

buidldroot musl uclib库 编译

buildroot 修改 编译工具链 原本编译器相关信息&#xff1a; Incorrect selection of the C library buidroot编译 注意相关选项&#xff0c;后续使用CUSTOM TOOLCHAIN 时对应 UCLIB 能将生成IMAGE 从2.9K变为2.3K MUSL 能将生成IMAGE 从2.9K变为2.7K 变大了 arm-linux-…

c++的string一键介绍

前言&#xff1a; 这篇文章旨在帮助读者回忆如何使用string&#xff0c;并提醒注意事项。它不是一篇详细的功能介绍&#xff0c;而是一篇润色文章。 先展示重载函数&#xff0c;如果该函数一笔不可带过&#xff0c;就先展示英文原档&#xff08;附带翻译&#xff09;&#xf…