将NER(命名实体识别)生成的词汇清单加入LDA(潜在狄利克雷分配)模型的具体操作,需要在数据预处理和模型输入阶段进行调整,以确保NER提取的词汇能够有效影响LDA的主题生成。以下是详细的操作步骤:
1. 准备NER词汇清单
- 生成清单:使用NER工具(如HanLP、BERT等)从建筑专利摘要中提取实体,形成词汇清单。例如:
- 实体类型:材料(“混凝土”、“钢筋”)、技术(“纳米技术”、“预应力”)、部件(“梁”、“柱”)。
- 格式:可以是一个简单的列表或字典(如
{"材料": ["混凝土", "钢筋"], "技术": ["纳米技术"]})。
- 清洗与筛选:去除低频词(例如出现少于5次)或非领域特定词,保留与建筑专利高度相关的词汇。
2. 数据预处理与NER词汇整合
在LDA的输入数据准备阶段,将NER词汇清单融入文本数据中。以下是具体操作:
操作1:调整词频(加权NER词汇)
- 方法:在构建词袋模型(Bag of Words)或TF-IDF矩阵时,为NER词汇清单中的词增加权重。
- 实现:
- 对原始文本进行分词和清洗,生成词频字典。
- 检查每个文档的词频,若词在NER词汇清单中,则将其词频乘以一个加权因子(如2或3),以增强其影响力。
- 使用加权后的词频生成词袋或TF-IDF表示。
- 示例:
- 原始文本:“新型混凝土配方利用纳米技术。”
- 分词后词频:
{"新型": 1, "混凝土": 1, "配方": 1, "利用": 1, "纳米技术": 1}
- NER词汇清单:
["混凝土", "纳米技术"]
- 加权后(因子2):
{"新型": 1, "混凝土": 2, "配方": 1, "利用": 1, "纳米技术": 2}
操作2:重复输入NER词汇
- 方法:在每个文档中,将NER词汇清单中的词重复若干次(例如1-2次),以增加其在文档中的出现频率。
- 实现:
- 对每条摘要分词后,检查是否包含NER词汇。
- 若包含,则在分词结果中追加这些词汇。
- 将处理后的文本用于LDA输入。
- 示例:
- 原始分词:“新型/混凝土/配方/利用/纳米技术”
- NER词汇:“混凝土”、“纳米技术”
- 重复后:“新型/混凝土/配方/利用/纳米技术/混凝土/纳米技术”
- 效果:增强“混凝土”和“纳米技术”在主题建模中的信号。
操作3:自定义停用词表
- 方法:从停用词表中移除NER词汇清单中的词,避免其被过滤。
- 实现:
- 加载默认停用词表(如中文常用停用词)。
- 检查NER词汇清单,若其中词汇出现在停用词表中,则移除。
- 使用调整后的停用词表过滤文本。
- 示例:
- 默认停用词:
["的", "是", "一种", "利用"]
- NER词汇:
["混凝土", "利用"]
- 调整后停用词:
["的", "是", "一种"]
- 效果:保留“利用”作为技术相关词。
3. 构建LDA输入数据
- 词袋模型:
- 使用加权后的词频或重复后的分词结果,生成每个文档的词袋表示。
- 工具:Python的
gensim库(corpora.Dictionary和doc2bow)。
- 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并验证
- 训练模型:使用上述处理后的
corpus和dictionary运行LDA。
- 输出主题:检查每个主题的关键词,确保NER词汇(如“混凝土”、“纳米技术”)在相关主题中突出显示。
- 调整权重:若NER词汇未充分体现,增加加权因子或重复次数,重新训练。
5. 具体实现注意事项
- 工具选择:
- 分词:
jieba(可加载建筑领域自定义词典)。
- NER:
HanLP或transformers(如BERT-NER)。
- LDA:
gensim或sklearn。
- 参数调整:
- 加权因子:根据NER词汇的重要性调整(建议从2开始实验)。
- 主题数:根据数据集规模和领域复杂度选择(可用
coherence评估)。
- 性能优化:
- 若数据量大,使用
gensim的LdaMulticore加速训练。
- 对NER词汇清单进行定期更新,适应新专利内容。
示例结果
- 输入:NER词汇清单(“混凝土”、“纳米技术”)+ 专利摘要。
- 处理后:词袋中“混凝土”和“纳米技术”的权重提升。
- LDA输出:
- 主题1:0.25"混凝土" + 0.20"纳米技术" + 0.15*"强度"(材料强化技术)
- 主题2:0.30"梁" + 0.25"柱" + 0.10*"预应力"(结构设计)
通过以上操作,NER词汇清单被有效融入LDA建模过程,增强了主题与建筑专利领域的关联性。