ner_lda_1.md 5.5 KB

将NER(命名实体识别)生成的词汇清单加入LDA(潜在狄利克雷分配)模型的具体操作,需要在数据预处理和模型输入阶段进行调整,以确保NER提取的词汇能够有效影响LDA的主题生成。以下是详细的操作步骤:


1. 准备NER词汇清单

  • 生成清单:使用NER工具(如HanLP、BERT等)从建筑专利摘要中提取实体,形成词汇清单。例如:
    • 实体类型:材料(“混凝土”、“钢筋”)、技术(“纳米技术”、“预应力”)、部件(“梁”、“柱”)。
    • 格式:可以是一个简单的列表或字典(如 {"材料": ["混凝土", "钢筋"], "技术": ["纳米技术"]})。
  • 清洗与筛选:去除低频词(例如出现少于5次)或非领域特定词,保留与建筑专利高度相关的词汇。

2. 数据预处理与NER词汇整合

在LDA的输入数据准备阶段,将NER词汇清单融入文本数据中。以下是具体操作:

操作1:调整词频(加权NER词汇)

  • 方法:在构建词袋模型(Bag of Words)或TF-IDF矩阵时,为NER词汇清单中的词增加权重。
  • 实现
    1. 对原始文本进行分词和清洗,生成词频字典。
    2. 检查每个文档的词频,若词在NER词汇清单中,则将其词频乘以一个加权因子(如2或3),以增强其影响力。
    3. 使用加权后的词频生成词袋或TF-IDF表示。
  • 示例
    • 原始文本:“新型混凝土配方利用纳米技术。”
    • 分词后词频:{"新型": 1, "混凝土": 1, "配方": 1, "利用": 1, "纳米技术": 1}
    • NER词汇清单:["混凝土", "纳米技术"]
    • 加权后(因子2):{"新型": 1, "混凝土": 2, "配方": 1, "利用": 1, "纳米技术": 2}

操作2:重复输入NER词汇

  • 方法:在每个文档中,将NER词汇清单中的词重复若干次(例如1-2次),以增加其在文档中的出现频率。
  • 实现
    1. 对每条摘要分词后,检查是否包含NER词汇。
    2. 若包含,则在分词结果中追加这些词汇。
    3. 将处理后的文本用于LDA输入。
  • 示例
    • 原始分词:“新型/混凝土/配方/利用/纳米技术”
    • NER词汇:“混凝土”、“纳米技术”
    • 重复后:“新型/混凝土/配方/利用/纳米技术/混凝土/纳米技术”
    • 效果:增强“混凝土”和“纳米技术”在主题建模中的信号。

操作3:自定义停用词表

  • 方法:从停用词表中移除NER词汇清单中的词,避免其被过滤。
  • 实现
    1. 加载默认停用词表(如中文常用停用词)。
    2. 检查NER词汇清单,若其中词汇出现在停用词表中,则移除。
    3. 使用调整后的停用词表过滤文本。
  • 示例
    • 默认停用词:["的", "是", "一种", "利用"]
    • NER词汇:["混凝土", "利用"]
    • 调整后停用词:["的", "是", "一种"]
    • 效果:保留“利用”作为技术相关词。

3. 构建LDA输入数据

  • 词袋模型
    • 使用加权后的词频或重复后的分词结果,生成每个文档的词袋表示。
    • 工具:Python的gensim库(corpora.Dictionarydoc2bow)。
  • TF-IDF模型(可选):
    • 在词袋基础上,进一步计算TF-IDF值,NER词汇因加权会有更高的TF-IDF分数。
    • 工具:gensim.models.TfidfModel
  • 代码示例(Python + gensim):

    from gensim import corpora, models
    import jieba
    
    # 假设NER词汇清单
    ner_vocab = ["混凝土", "纳米技术"]
    
    # 示例文本
    texts = [["新型", "混凝土", "配方", "利用", "纳米技术"]]
    
    # 加权NER词汇(示例:重复输入)
    processed_texts = []
    for doc in texts:
    new_doc = doc + [word for word in doc if word in ner_vocab]  # 重复NER词汇
    processed_texts.append(new_doc)
    
    # 创建词典和词袋
    dictionary = corpora.Dictionary(processed_texts)
    corpus = [dictionary.doc2bow(text) for text in processed_texts]
    
    # 训练LDA模型
    lda_model = models.LdaModel(corpus, num_topics=5, id2word=dictionary, passes=15)
    

4. 运行LDA并验证

  • 训练模型:使用上述处理后的corpusdictionary运行LDA。
  • 输出主题:检查每个主题的关键词,确保NER词汇(如“混凝土”、“纳米技术”)在相关主题中突出显示。
  • 调整权重:若NER词汇未充分体现,增加加权因子或重复次数,重新训练。

5. 具体实现注意事项

  • 工具选择
    • 分词:jieba(可加载建筑领域自定义词典)。
    • NER:HanLPtransformers(如BERT-NER)。
    • LDA:gensimsklearn
  • 参数调整
    • 加权因子:根据NER词汇的重要性调整(建议从2开始实验)。
    • 主题数:根据数据集规模和领域复杂度选择(可用coherence评估)。
  • 性能优化
    • 若数据量大,使用gensimLdaMulticore加速训练。
    • 对NER词汇清单进行定期更新,适应新专利内容。

示例结果

  • 输入:NER词汇清单(“混凝土”、“纳米技术”)+ 专利摘要。
  • 处理后:词袋中“混凝土”和“纳米技术”的权重提升。
  • LDA输出
    • 主题1:0.25"混凝土" + 0.20"纳米技术" + 0.15*"强度"(材料强化技术)
    • 主题2:0.30"梁" + 0.25"柱" + 0.10*"预应力"(结构设计)

通过以上操作,NER词汇清单被有效融入LDA建模过程,增强了主题与建筑专利领域的关联性。