sjdnjn commited on
Commit
8616ccd
·
verified ·
1 Parent(s): 7b4a76c

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +66 -36
app.py CHANGED
@@ -1,12 +1,12 @@
1
  import gradio as gr
2
  import torch
3
- from transformers import pipeline, AutoTokenizer, AutoModelForSequenceClassification # 导入AutoTokenizer, AutoModelForSequenceClassification用于问答模型
4
  import pandas as pd
5
  import plotly.express as px
6
- import os # 用于检查文件是否存在
7
 
8
  # --- 1. 模型加载 ---
9
- # 负责同学: [填写负责这个模型的同学姓名]
10
  # 注意:QuantFactory/Apollo2-7B-GGUF 模型通常不直接兼容 pipeline("text-generation", ...)
11
  # 除非有额外的llama.cpp或特定的transformers加载配置。
12
  # 为了演示和确保运行流畅,这里使用 gpt2-large 作为替代。
@@ -18,7 +18,7 @@ except Exception as e:
18
  print(f"❌ 模型 1 (文本生成: {model1_name}) 加载失败: {e}")
19
  generator1 = None
20
 
21
- # 负责同学: [填写负责这个模型的同学姓名]
22
  # deepset/roberta-base-squad2 是一个问答模型,需要 context
23
  try:
24
  model2_name = "deepset/roberta-base-squad2"
@@ -144,37 +144,67 @@ def create_arena_tab():
144
  return arena_block
145
 
146
  # Report 选项卡内容创建函数 (30分)
 
147
  def create_report_tab():
148
- report_md_path = "report.md" # 假设你的报告 Markdown 文件名为 report.md
149
-
150
- if os.path.exists(report_md_path):
151
- with open(report_md_path, "r", encoding="utf-8") as f:
152
- report_content = f.read()
153
- return gr.Markdown(report_content)
154
- else:
155
- return gr.Markdown(f"## ❗ 错误:未找到报告文件 '{report_md_path}'。\n请确保已在Files页面创建 `report.md` 文件。")
156
-
157
-
158
- # --- Gradio 应用界面定义 ---
159
- with gr.Blocks(title="AI模型对比项目") as demo:
160
- gr.Markdown("# 🤖 AI 模型对比与评估平台")
161
- gr.Markdown("本平台旨在通过交互式界面,对比分析不同 AI 模型在特定任务上的表现。")
162
-
163
- # 定义选项卡
164
- with gr.Tab("⚔️ Arena"):
165
- # 直接调用创建函数,不再需要 .render()
166
- create_arena_tab()
167
-
168
- with gr.Tab("📊 LLM Benchmark"):
169
- # 直接调用创建函数,不再需要 .render()
170
- create_benchmark_tab()
171
-
172
- with gr.Tab("📝 Report"):
173
- # 直接调用创建函数,不再需要 .render()
174
- create_report_tab()
175
-
176
- # 启动 Gradio 应用
177
- if __name__ == "__main__":
178
- demo.launch()
179
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
180
 
 
1
  import gradio as gr
2
  import torch
3
+ from transformers import pipeline, AutoTokenizer, AutoModelForSequenceClassification
4
  import pandas as pd
5
  import plotly.express as px
6
+ import os
7
 
8
  # --- 1. 模型加载 ---
9
+ # 负责同学: [填写负责这个模型的同学姓名,例如:张三]
10
  # 注意:QuantFactory/Apollo2-7B-GGUF 模型通常不直接兼容 pipeline("text-generation", ...)
11
  # 除非有额外的llama.cpp或特定的transformers加载配置。
12
  # 为了演示和确保运行流畅,这里使用 gpt2-large 作为替代。
 
18
  print(f"❌ 模型 1 (文本生成: {model1_name}) 加载失败: {e}")
19
  generator1 = None
20
 
21
+ # 负责同学: [填写负责这个模型的同学姓名,例如:李四]
22
  # deepset/roberta-base-squad2 是一个问答模型,需要 context
23
  try:
24
  model2_name = "deepset/roberta-base-squad2"
 
144
  return arena_block
145
 
146
  # Report 选项卡内容创建函数 (30分)
147
+ # 报告内容直接嵌入到代码中
148
  def create_report_tab():
149
+ report_content_markdown = """
150
+ # 🚀 Hugging Face 模型对比实验报告
151
+
152
+ ## 1. 模型及类别选择
153
+
154
+ ### 1.1 所选模型的类型与背景说明
155
+ 本次实验聚焦于**文本处理模型**,具体包括一个**通用文本生成模型**和一个**抽取式问答模型**。
156
+ * **文本生成模型**能够根据输入的提示词(prompt)生成连贯、有意义的文本,广泛应用于自动写作、内容创作等。
157
+ * **抽取式问答模型**则专注于从给定文本(上下文)中精确地定位并提取问题的答案,是信息检索和智能客服的核心技术。
158
+ 近年来,随着Transformer架构的普及和大规模预训练技术的进步,这两类模型的性能都取得了显著提升。
159
+
160
+ ### 1.2 模型用途对比简述
161
+ 我们选择了以下 2 个模型进行对比:
162
+ * **模型 1: GPT2-Large (文本生成模型)**
163
+ * **用途简述**: 作为一个大型的通用文本生成模型,GPT2-Large 能够进行开放式文本生成、续写、摘要、创意写作等多种任务。它能理解较复杂的指令并生成语法流畅、内容丰富的文本。
164
+ * **模型 2: deepset/roberta-base-squad2 (抽取式问答模型)**
165
+ * **用途简述**: 这是一个专门用于抽取式问答任务的模型。它接收一个问题和一段上下文文本,然后从上下文中找到并返回问题的确切答案片段。主要应用于精准信息提取、文档问答系统等。
166
+
167
+ ### 1.3 选取标准与模型异同点分析
168
+ **选取标准**: 我们选择这两个模型主要基于以下标准:
169
+ 1. **代表性**: 它们分别代表了文本处理领域中两种核心且不同的应用方向(生成与抽取)。
170
+ 2. **可用性**: 模型在 Hugging Face Model Hub 上易于加载和使用 `pipeline`。
171
+ 3. **性能对比潜力**: 两种不同类型的模型在 GRACE 维度上会有显著差异,有利于进行有深度的对比分析。
172
+
173
+ **异同点分析**:
174
+ * **相同点**:
175
+ * 都基于 Transformer 架构。
176
+ * 都处理自然语言文本作为输入。
177
+ * 都可以在 Hugging Face `transformers` 库中通过 `pipeline` 方便地加载和使用。
178
+ * **不同点**:
179
+ * **任务类型**: GPT2-Large 专注于**文本生成**(从无到有),而 RoBERTa-SQuAD2 专注于**信息抽取**(从已有文本中找)。
180
+ * **输入输出模式**:
181
+ * GPT2-Large 接收一个提示词,输出一段新的、连贯的文本。
182
+ * RoBERTa-SQuAD2 接收一个问题和一段上下文,输出上下文中精确的答案片段。
183
+ * **“创造性”**: GPT2-Large 具有更强的创造性,能够生成新的、未曾出现过的句子和想法;RoBERTa-SQuAD2 不具备创造性,它只从原文中抽取答案。
184
+ * **对上下文的依赖**: 问答模型对上下文的依赖性极强,没有上下文就无法回答;文本生成模型则更灵活,即便没有明确上下文也能生成内容。
185
+
186
+ ---
187
+
188
+ ## 2. 系统实现细节
189
+
190
+ ### 2.1 Gradio 交互界面截图
191
+
192
+ 以下是我们在 Hugging Face Space 中构建的 Gradio 交互界面截图。
193
+ [Image of Gradio Arena 界面截图]
194
+ *(请将此处的图片链接替换为你实际上传到 Space Files 中的截图链接,例如:`/file/main/arena_screenshot.png`)*
195
+ *说明:此图展示了我们构建的“Arena”选项卡界面。用户可以在左侧输入问题/提示词和上下文,右侧同步显示文本生成模型和问答模型的输出。*
196
+
197
+ ### 2.2 输入与输出流程图
198
+
199
+ ```mermaid
200
+ graph TD
201
+ A[用户输入: 问题/提示词] --> B{Gradio 界面};
202
+ A --> C[用户输入: 上下文];
203
+ C --> B;
204
+ B -- 将问题与上下文合并为Prompt --> D1[调用 GPT2-Large (文本生成模型)];
205
+ B -- 将问题与上下文分离 --> D2[调用 RoBERTa-SQuAD2 (问答模型)];
206
+ D1 -- 生成文本 --> E1[GPT2-Large 输出];
207
+ D2 -- 抽取答案 --> E2[RoBERTa-SQuAD2 输出];
208
+ E1 --> F[在 Gradio 界面显示];
209
+ E2 --> F;
210