当前位置: 首页 > news >正文

Python使用FastAPI结合Word2vec来向量化200维的语言向量数值

准备

pip install fastapi>=0.68.0
pip install uvicorn[standard]>=0.15.0
pip install gensim>=4.0.0
pip install jieba>=0.42.1
pip install numpy>=1.21.0
pip install scikit-learn>=1.0.0

少了的就直接补充就好

代码

from fastapi import FastAPI, HTTPException
from gensim.models import KeyedVectors
import jieba
import numpy as np
import os
import logging

# 配置日志
logging.basicConfig(level=logging.INFO)

app = FastAPI(title="Text Embedding API")

# 路径配置
MODEL_PATH = os.path.abspath("../light_Tencent_AILab_ChineseEmbedding.bin")


# 服务启动前检查
@app.on_event("startup")
async def load_model():
    global model
    try:
        if not os.path.exists(MODEL_PATH):
            raise FileNotFoundError(f"Model file not found: {MODEL_PATH}")

        model = KeyedVectors.load_word2vec_format(MODEL_PATH, binary=True)
        logging.info(f"✅ 模型加载成功 | 词表量:{len(model.key_to_index)}")
        logging.info(f"✅ 词向量维度:{model.vector_size}")  # 确认输出200

    except Exception as e:
        logging.error(f"❌ 初始化失败:{str(e)}")
        raise RuntimeError("Service initialization failed")


def text_to_vector(text: str) -> np.ndarray:
    """直接返回200维向量"""
    words = jieba.lcut(text)
    vectors = []
    for word in words:
        if word in model.key_to_index:
            vec = model[word]
            # 添加维度验证
            assert vec.shape == (200,), f"词向量维度异常: {vec.shape}"
            vectors.append(vec)

    if not vectors:
        return np.zeros(model.vector_size)

    avg_vector = np.mean(vectors, axis=0)
    assert avg_vector.shape == (200,), f"平均向量维度异常: {avg_vector.shape}"
    return avg_vector


@app.get("/vector")
async def get_vector(sentence: str):
    if not model:
        raise HTTPException(503, "服务未就绪")

    if len(sentence.strip()) < 2:
        raise HTTPException(400, "输入文本过短")

    try:
        vector = text_to_vector(sentence)
        return {
            "dimension": vector.size,
            "vector": vector.tolist()
        }
    except Exception as e:
        logging.error(f"处理失败:{str(e)}")
        raise HTTPException(500, "内部错误")


if __name__ == "__main__":
    import uvicorn

    uvicorn.run(app, host="0.0.0.0", port=8000)

结果

相关文章:

  • Python爬取房天下二手小区数据(2025年3月更)
  • 布达佩斯召开 | 2025年第五届能源与环境工程国际会议(CoEEE 2025)
  • SpringBoot中使用kaptcha生成验证码
  • Spring 中 BeanPostProcessor 的作用和示例
  • Facebook投广告支付操作
  • 04 1个路由器配置一个子网的dhcp服务
  • 电脑实用小工具--VMware常用功能简介
  • 关于重构分析查询界面的思考(未完)
  • 【云馨AI-大模型】RAGFlow功能预览:Dify接入外部知识库RAGFlow指南
  • iOS 模块化架构设计:主流方案与实现详解
  • 区跨链知识和概念
  • MySQL中的B+树索引经验总结
  • PosterRender 实现微信下程序 分享商品生成海报
  • STM32Cubemx-H7-8-维特科技WT61C-TTL陀螺仪获取XYZ角度
  • 抽象工厂模式的C++实现示例
  • 23天 - 线程和进程有什么区别?进程之间的通信方式有哪些?进程的调度算法你知道吗?
  • uv pip install -r requirements.txt-报错,python版本过低
  • 大数据学习(67)- Flume、Sqoop、Kafka、DataX对比
  • 合并pull request的过程
  • 用户模块——握手验证
  • 英国首相斯塔默一处房产发生火灾
  • 牧原股份子公司与养殖户种猪买卖纠纷案一审胜诉
  • 再获殊荣!IP SH跻身上海文化品牌全球传播力TOP 6
  • 商务部新闻发言人就中美日内瓦经贸会谈联合声明发表谈话
  • 4月国产新能源,降价潮迈入拐点
  • “海豚音”依旧,玛丽亚·凯莉本周来沪开唱