项目实战:用all-MiniLM-L6-v2构建一个智能会议纪要生成器,只需100行代码!
项目构想:我们要做什么?
在现代职场中,会议是信息交流和决策的重要场景,但冗长的会议内容往往让人难以快速抓住重点。本项目旨在利用 all-MiniLM-L6-v2 模型,构建一个智能会议纪要生成器。该工具能够自动从会议录音或文本记录中提取关键信息,生成简洁明了的会议纪要。
输入与输出
- 输入:会议录音的文本记录(可以是语音转文字后的结果)或直接输入的会议文本。
- 输出:一份结构化的会议纪要,包含会议主题、讨论要点、决策事项和待办任务。
技术选型:为什么是all-MiniLM-L6-v2?
all-MiniLM-L6-v2 是一个轻量级的句子嵌入模型,具有以下核心亮点,非常适合本项目:
- 高效的语义理解能力:模型能够将句子映射到384维的向量空间,捕捉句子的语义信息,非常适合用于文本摘要和关键信息提取。
- 轻量级且快速:模型体积小,推理速度快,适合实时或近实时的应用场景。
- 支持多任务:模型可用于句子相似度计算、聚类和信息检索等任务,能够灵活应用于会议内容的分析和摘要生成。
核心实现逻辑
- 文本预处理:将输入的会议文本拆分为句子或段落。
- 关键句子提取:利用
all-MiniLM-L6-v2计算句子之间的相似度,筛选出与会议主题相关性高的句子。 - 摘要生成:将筛选出的关键句子组合成连贯的会议纪要。
- 结构化输出:根据会议内容分类(如讨论要点、决策事项等),生成结构化的纪要。
核心代码逻辑
from sentence_transformers import SentenceTransformer
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
# 加载模型
model = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2')
# 示例会议文本
meeting_text = """
本次会议讨论了项目A的进展情况。开发团队表示前端开发已完成80%,后端开发完成60%。
测试团队提出了一些关键问题,主要集中在性能测试上。会议决定下周进行性能优化。
此外,市场团队要求增加一项新功能,开发团队表示需要评估时间。
"""
# 拆分为句子
sentences = [s.strip() for s in meeting_text.split('.') if s.strip()]
# 生成句子嵌入
embeddings = model.encode(sentences)
# 计算与第一句(会议主题)的相似度
topic_embedding = embeddings[0].reshape(1, -1)
similarities = cosine_similarity(embeddings, topic_embedding).flatten()
# 筛选关键句子
key_sentences = [sentences[i] for i in np.argsort(similarities)[-3:][::-1]]
# 生成摘要
summary = "会议主题:项目A进展\n关键讨论:\n- " + "\n- ".join(key_sentences)
print(summary)
代码全览与讲解
以下是完整的智能会议纪要生成器代码,包含详细注释:
from sentence_transformers import SentenceTransformer
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
def generate_meeting_summary(text):
"""
生成会议纪要的核心函数
:param text: 会议文本
:return: 结构化会议纪要
"""
# 加载模型
model = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2')
# 拆分为句子
sentences = [s.strip() for s in text.split('.') if s.strip()]
# 生成句子嵌入
embeddings = model.encode(sentences)
# 计算与第一句(会议主题)的相似度
topic_embedding = embeddings[0].reshape(1, -1)
similarities = cosine_similarity(embeddings, topic_embedding).flatten()
# 筛选关键句子(取相似度最高的3句)
key_sentences = [sentences[i] for i in np.argsort(similarities)[-3:][::-1]]
# 结构化输出
summary = {
"会议主题": sentences[0],
"关键讨论": key_sentences,
"决策事项": [s for s in sentences if "决定" in s or "同意" in s],
"待办任务": [s for s in sentences if "需要" in s or "要求" in s]
}
return summary
# 示例会议文本
meeting_text = """
本次会议讨论了项目A的进展情况。开发团队表示前端开发已完成80%,后端开发完成60%。
测试团队提出了一些关键问题,主要集中在性能测试上。会议决定下周进行性能优化。
此外,市场团队要求增加一项新功能,开发团队表示需要评估时间。
"""
# 生成并打印会议纪要
summary = generate_meeting_summary(meeting_text)
for key, value in summary.items():
print(f"{key}:")
if isinstance(value, list):
for item in value:
print(f"- {item}")
else:
print(f"- {value}")
代码讲解
- 模型加载:使用
SentenceTransformer加载all-MiniLM-L6-v2模型。 - 文本拆分:将输入的会议文本按句号拆分为句子列表。
- 句子嵌入:调用模型的
encode方法生成句子嵌入向量。 - 相似度计算:使用余弦相似度筛选与会议主题相关的关键句子。
- 结构化输出:根据关键词(如“决定”、“需要”)分类生成会议纪要。
效果展示与功能扩展
效果展示
运行上述代码后,输出如下:
会议主题:
- 本次会议讨论了项目A的进展情况
关键讨论:
- 开发团队表示前端开发已完成80%,后端开发完成60%
- 测试团队提出了一些关键问题,主要集中在性能测试上
- 会议决定下周进行性能优化
决策事项:
- 会议决定下周进行性能优化
待办任务:
- 开发团队表示需要评估时间
功能扩展
- 支持语音输入:结合语音识别API(如Whisper),实现从会议录音直接生成纪要。
- 多语言支持:利用多语言模型扩展支持其他语言的会议纪要生成。
- 自定义分类:允许用户自定义纪要的分类规则(如“风险点”、“建议”等)。
- 交互式编辑:提供界面让用户对生成的纪要进行修改和补充。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



