fiewolf1000 commited on
Commit
d7a364f
·
verified ·
1 Parent(s): de0ab69

Upload 2 files

Browse files
Files changed (2) hide show
  1. app.py +56 -0
  2. requirements.txt +4 -0
app.py ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from sentence_transformers import SentenceTransformer
2
+ import gradio as gr
3
+ import numpy as np
4
+
5
+ # 加载模型(首次运行会自动下载,约 500MB)
6
+ model = SentenceTransformer('BAAI/bge-small-en-v1.5')
7
+
8
+ def get_embedding(text: str) -> list:
9
+ """生成文本嵌入向量"""
10
+ if not text.strip():
11
+ return "请输入非空文本"
12
+ # 生成嵌入(返回 numpy 数组)
13
+ embedding = model.encode(text, normalize_embeddings=True)
14
+ # 转换为列表返回(方便 API 传输)
15
+ return embedding.tolist()
16
+
17
+ def similarity_score(text1: str, text2: str) -> float:
18
+ """计算两个文本的余弦相似度"""
19
+ if not text1.strip() or not text2.strip():
20
+ return 0.0
21
+ emb1 = model.encode(text1, normalize_embeddings=True)
22
+ emb2 = model.encode(text2, normalize_embeddings=True)
23
+ # 余弦相似度 = 向量点积(已归一化)
24
+ return float(np.dot(emb1, emb2))
25
+
26
+ # 创建 Gradio 界面
27
+ with gr.Blocks(title="开源文本嵌入 API") as demo:
28
+ gr.Markdown("# 文本嵌入服务(基于 BAAI/bge-small-en-v1.5)")
29
+
30
+ with gr.Tab("生成嵌入向量"):
31
+ input_text = gr.Textbox(label="输入文本", placeholder="请输入需要生成嵌入的文本...")
32
+ embedding_output = gr.Textbox(label="嵌入向量(前10位)")
33
+ generate_btn = gr.Button("生成嵌入")
34
+ generate_btn.click(
35
+ fn=lambda x: str(get_embedding(x)[:10]) + "...", # 只显示前10位
36
+ inputs=input_text,
37
+ outputs=embedding_output
38
+ )
39
+
40
+ with gr.Tab("计算语义相似度"):
41
+ text1 = gr.Textbox(label="文本1", placeholder="输入第一个文本...")
42
+ text2 = gr.Textbox(label="文本2", placeholder="输入第二个文本...")
43
+ similarity_output = gr.Number(label="余弦相似度(0~1,越高越相似)")
44
+ similarity_btn = gr.Button("计算相似度")
45
+ similarity_btn.click(
46
+ fn=similarity_score,
47
+ inputs=[text1, text2],
48
+ outputs=similarity_output
49
+ )
50
+
51
+ # 启用队列,支持并发请求
52
+ demo.queue()
53
+
54
+ if __name__ == "__main__":
55
+ # 部署到 Hugging Face Spaces 时,不需要指定 server_name 和 server_port
56
+ demo.launch()
requirements.txt ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ gradio==4.28.3
2
+ sentence-transformers==2.7.0
3
+ torch==2.2.2
4
+ numpy==1.26.4