
🌏 引言|搜索系统的烦恼,从“语言不通”开始
大家好,我是 Echo_Wish。
我是做跨境电商平台推荐系统的一名技术人。你知道跨境电商做推荐和搜索最麻烦的是啥吗?
不是性能,不是并发,不是接口,而是:语言不通。
试想一下,泰国用户搜索“เสื้อยืด”想买件T恤,美国用户搜“t-shirt”,而法国用户则用“chemise”或者“tee-shirt”。如果搜索系统只是简单的分词 + 关键词匹配,那这些用户根本找不到同一件商品。
更难的是:
所以我就琢磨:能不能让搜索更“懂语言”,更智能地理解查询?
于是,我搭了个系统:ElasticSearch + OpenAI Embedding,实现了多语言语义搜索 + 推荐,效果比传统搜索直接拉高了 20% 的点击率。
这篇文章,我就用大白话+代码+真实场景,跟你聊聊我是怎么一步步做这个系统的。
传统搜索,ES 的倒排索引搞关键词检索确实效率高,但它最大的问题是不理解语义。
而 OpenAI 的 text-embedding-3-small 模型,可以把任意语言的文本(不管是德语、印地语、阿拉伯语)都变成一个多维度语义向量。这样,不同语言但语义相近的内容,距离就近了。
技术 | 优点 | 缺点 |
|---|---|---|
ElasticSearch 关键词 | 快,成熟,开箱即用 | 不懂语义,多语言支持差 |
OpenAI Embedding | 语义强,支持多语言 | 慢,需缓存,成本高 |
二者结合 | 关键词精准 + Embedding 模糊智能 | 需要架构设计合理 |
所以我就决定搞一个“关键词+语义”双通道的系统,前面用 ES 关键词召回,后面用 embedding 做 rerank 和推荐。
整体架构是这样的:
[用户搜索词]
│
[输入预处理 + 语言识别]
│
[ElasticSearch 关键词召回]────┐
├──[OpenAI Embedding 二次 rerank + 补充推荐]
[搜索词 embedding]────────────┘
↓
[最终商品列表展示]简单来说,就是:
import openai
from elasticsearch import Elasticsearch
openai.api_key = "sk-xxx"
def generate_embedding(text):
response = openai.embeddings.create(
model="text-embedding-3-small",
input=text
)
return response.data[0].embedding
es = Elasticsearch("http://localhost:9200")
product = {
"id": "A10012",
"title": "summer white t-shirt",
"tags": "shirt, casual, cotton",
"lang": "en"
}
text_for_embedding = f"{product['title']} {product['tags']}"
embedding = generate_embedding(text_for_embedding)
doc = {
"title": product["title"],
"tags": product["tags"],
"embedding": embedding
}
es.index(index="products", id=product["id"], document=doc)这样,商品就带着“语义向量”被索引了,后续就能用向量搜索查找它了。
用户输入“เสื้อยืด สีขาว”(白色T恤),我们用同样的方式生成 embedding,然后在商品库里查找 embedding 最接近的商品。
{
"field": "embedding",
"query_vector": [0.12, -0.34, ...],
"k": 10,
"num_candidates": 100
}ES 会返回语义上最相近的商品,不管它们的标题是中文、英文还是泰文。
最后我们融合两个通道的召回结果:
这种“混合搜索 + 语义 rerank”的方式,效果非常好:
📈实测数据:
你有没有发现:用户并不在意你用什么模型、索引、算子。他只关心两件事:
我们做推荐系统,说到底是做人和人之间的“语言中介”——OpenAI Embedding 和 ElasticSearch 的组合,就像是个“通晓多国语言”的推荐助手,帮你理解用户、理解商品、让他们之间不再隔着一堵语言的墙。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。