构建作文批改系统

构建作文批改系统

一: 词向量

词向量(Word Embedding)是自然语言处理(NLP)中用于将词语映射到低维连续向量空间的技术。其核心思想是通过数学表示捕捉词语的语义和语法特征,使计算机能够理解和处理自然语言。

词向量的优势:
  • 降维效果:通过词向量,原本稀疏的高维词汇表被压缩为低维的稠密向量,减少了计算复杂度。

  • 捕捉语义关系:通过向量空间中的几何关系(如距离、方向)表达词语间的关联。

    例如:语义相似性:的向量距离较近。

    ​ 类比关系:国王 - 男 + 女 ≈ 王后

构建词向量的方法:
  • 使用商业化的Embedding API。
  • 使用本地的嵌入模型(本项目采用此方法)

二:向量数据库

向量数据库是用于高效计算和管理大量向量数据的解决方案。在向量数据库中,数据被表示为向量形式,每个向量代表一个数据项。这些向量可以是数字、文本、图像或其他类型的数据。

主流的向量数据库:chroma,Weaviate,Qdrant。

本项目将使用Chroma。

三:整体流程

注:此部分实现仅用于作文批改系统的举例例证,名言警句等方面。

主题为RAG操作

  1. 获取query即用户作文句子(暂定,关于长度问题仍需讨论)。

  2. 加载读取素材库中的文档

  3. 分割文档资料,将文本向量化存入chorma持久化保存(所以2,3只需执行一次,除非未来需要扩充素材库

  4. query向量化,匹配与其最相似的结果k个

  5. 将结果,句子,上下文合并为prompt

  6. 提交给大模型完成例证/名言警句扩写

一:预备阶段(注:对于上述阶段2,3。此部分会较为简略)

1.数据处理:使用 LangChain 的 PyMuPDFLoader 来读取知识库的 PDF 文件。

from langchain.document_loaders.pdf import PyMuPDFLoader

# 创建一个 PyMuPDFLoader Class 实例,输入为待加载的 pdf 文档路径
loader = PyMuPDFLoader("../pdf文件路径.pdf")

# 调用 PyMuPDFLoader Class 的函数 load 对 pdf 文件进行加载
pdf_pages = loader.load()
# page变量类型为list,每一个元素为一个文档

或加载txt文件(推荐,因其简单):

# 使用UnstruturedFileLoader
from langchain_community.document_loaders import UnstructuredMarkdownLoader, PyMuPDFLoader, UnstructuredFileLoader

loaders.append(UnstructuredFileLoader(
   file_path=file,
   mode="elements",
   strategy="fast"
)

2.数据清洗与文档分割

暂略,此处后面测试优化时再来关注

3.搭建并使用Chroma向量库

分割文档:

chunk_size即分割单位。

overlap为chunk间重叠的部分,这是为了保证内容的连贯性

text_splitter = RecursiveCharacterTextSplitter(
       chunk_size=300,  # 增大chunk_size获取更多上下文
       chunk_overlap=75,
       separators=["\n\n", "\n", "。", "!", "?", ";", "……", "…", ""]
    )
    split_docs = text_splitter.split_documents(docs)
    split_docs = filter_complex_metadata(split_docs)
# document:即素材库
# embedding :用来处理文本,产生词向量的模型。
vectordb = Chroma.from_documents(
       documents=split_docs,
       embedding=get_embedding(embedding_model,MODELS_PATH),
       persist_directory=persist_dir
    )
    vectordb.persist()  # 显式持久化
    return vectordb

get_embedding函数:这里我们使用的是免费开源的monkai-m3e模型。(需下载到本地)

def get_embedding(model_type: str,path):
    if model_type == 'm3e':
       return HuggingFaceEmbeddings(
          model_name=path,
          # model_kwargs={'device': 'cpu'},  # 使用CPU推理
          # encode_kwargs={'normalize_embeddings': True}  # 标准化向量
       )
    else:
       raise ValueError(f"不支持的嵌入模型类型: {model_type}")

4.测试

使用test_queries = ["要勇敢做人", "如何保持心理健康", "科技发展的影响"]来测试:

结果如下(部分):

测试查询: '要勇敢做人' 检索到 3 条相关结果: [结果 1] 来源:./documents\高考作文经典素材.txt 内容片段:第一篇 人生信念一次成功就够了... --------------------------------------------------------------------------------

可见素材已经成功持久化存储,并可根据文本向量相似度来查询。

此时结果比较混乱,后续还需优化和测试。主要在数据处理部分。

### 关于前端 AI 作文批改的技术栈、工具和框架 #### 技术栈概述 前端 AI 作文批改系统的实现通常涉及多个技术层面的合作,包括但不限于自然语言处理(NLP)、机器学习模型调用以及前后端交互。以下是具体的技术栈分析: #### 自然语言处理 (NLP) 和后端支持 尽管题目强调的是前端部分,但实际上大部分核心逻辑会依赖后端完成。这是因为 NLP 的复杂计算更适合在服务器上执行,而后端通过 API 向前端提供服务响应[^1]。 - **Python**: Python 是目前最流行的编程语言之一,在数据科学和人工智能领域具有广泛的应用。对于 AI 批改功能来说,可以利用 Python 构建后端服务并集成 NLP 库。 - **Flask/Django Frameworks**: Flask 或 Django 可用于构建 RESTful APIs 来接收来自前端的请求,并返回经过处理的数据给前端展示。 #### 前端技术栈 为了使用户体验更加友好流畅,现代 Web 开发中的前端技术也至关重要: - **HTML/CSS/JavaScript**: 这些基础组件构成了任何网页应用的核心结构样式行为三要素[^2]。 - HTML 定义页面内容; - CSS 负责视觉呈现效果; - JavaScript 则赋予动态特性如表单验证即时反馈等功能。 - **React/Vue.js/AngularJS**: 单页应用程序(SPA)框架能够显著提升用户界面性能体验,减少页面刷新次数从而加快操作速度。其中 React 和 Vue 特别流行因为它们轻量级灵活易学的特点使得开发者能快速搭建复杂的 UI 组件树[^3]。 #### 数据可视化与交互设计 为了让教师或者学生更直观理解文章质量状况,可能还需要加入一些图表统计信息显示模块: - 使用 Chart.js 或者 D3.js 等库来创建各种形式的图形化表示结果比如词频分布直方图语法错误标记位置等等。 #### 示例代码片段 下面给出一段简单的 AJAX 请求例子说明如何从前端向后端发送待检测文本并通过回调函数更新 DOM 显示评分结果: ```javascript function checkEssay() { const essayText = document.getElementById('essayInput').value; fetch('/api/check_essay', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ text: essayText }) }).then(response => response.json()) .then(data => { let scoreDisplay = `<p>Your Essay Score is ${data.score}/10</p>`; if (data.errors && data.errors.length > 0){ scoreDisplay += '<ul>'; data.errors.forEach(err => scoreDisplay+=`<li>${err}</li>`); scoreDisplay+='</ul>'; } document.getElementById('resultArea').innerHTML = scoreDisplay ; }); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值