如何基于ChatGPT Word Embeddings获取最相似词汇?
如何基于ChatGPT API的词嵌入实现类似Gensim most_similar的功能
ChatGPT API本身并不提供直接遍历模型完整词表并计算词汇相似度的接口(因为其底层词表是闭源且未公开的),但你可以通过以下几种方式实现类似most_similar的效果:
方案1:自定义词汇集合+余弦相似度计算
如果你有一个目标词汇集合,可以手动批量获取每个词汇的嵌入,再通过余弦相似度排序找出与目标术语最相似的n个词汇:
步骤:
- 调用OpenAI的Embeddings API(比ChatGPT对话API更适合纯嵌入获取)获取目标术语的嵌入向量。
- 遍历你的自定义词汇列表,逐个获取每个词汇的嵌入向量。
- 使用
numpy或scipy计算目标向量与每个词汇向量的余弦相似度。 - 按相似度得分降序排序,取前n个词汇。
代码示例:
import openai import numpy as np from scipy.spatial.distance import cosine # 初始化OpenAI客户端 openai.api_key = "你的API密钥" def get_embedding(text, model="text-embedding-ada-002"): text = text.replace("\n", " ") return openai.Embedding.create(input=[text], model=model)['data'][0]['embedding'] # 目标术语 target_term = "人工智能" # 自定义词汇集合 vocab_list = ["机器学习", "深度学习", "自然语言处理", "计算机视觉", "数据挖掘"] # 获取目标嵌入 target_emb = get_embedding(target_term) # 计算相似度并排序 similarity_scores = [] for term in vocab_list: term_emb = get_embedding(term) # 余弦相似度 = 1 - 余弦距离 sim = 1 - cosine(target_emb, term_emb) similarity_scores.append((term, sim)) # 按相似度降序排序,取前3个 top_similar = sorted(similarity_scores, key=lambda x: x[1], reverse=True)[:3] print("最相似的词汇:") for term, score in top_similar: print(f"{term}: {score:.4f}")
方案2:使用开源嵌入模型替代
如果不需要严格依赖ChatGPT的嵌入,可以选择本地开源的嵌入模型(如Sentence-BERT、GloVe、Word2Vec),这类模型可以直接提供类似most_similar的内置方法,且无需调用API:
示例(Sentence-BERT):
from sentence_transformers import SentenceTransformer, util model = SentenceTransformer('all-MiniLM-L6-v2') # 目标术语 target_term = "人工智能" # 词汇集合 vocab_list = ["机器学习", "深度学习", "自然语言处理", "计算机视觉", "数据挖掘"] # 获取所有嵌入 target_emb = model.encode(target_term, convert_to_tensor=True) vocab_embs = model.encode(vocab_list, convert_to_tensor=True) # 计算余弦相似度 cos_scores = util.cos_sim(target_emb, vocab_embs)[0] # 排序取前3个 top_indices = cos_scores.argsort(descending=True)[:3] top_similar = [(vocab_list[i], cos_scores[i].item()) for i in top_indices] print("最相似的词汇:") for term, score in top_similar: print(f"{term}: {score:.4f}")
方案3:结合向量数据库优化大词汇量场景
如果你的词汇集合非常大(上万级以上),逐个调用API计算会效率低下,此时可以:
- 批量获取所有词汇的嵌入并存储到向量数据库(如FAISS、Milvus)。
- 将目标术语的嵌入输入向量数据库,直接检索出最相似的n个词汇。
这种方式能大幅提升检索效率,适合大规模词汇集合的场景。
关键限制说明
- ChatGPT的对话模型(gpt-3.5-turbo、gpt-4)并不直接返回单个词的底层嵌入,建议使用OpenAI专门的Embeddings API(如
text-embedding-ada-002)来获取文本嵌入,更稳定且成本更低。 - 无法访问ChatGPT模型的完整词表,因此无法像Gensim那样遍历整个模型词汇库,必须依赖你自己定义的词汇集合。
内容的提问来源于stack exchange,提问作者Marj
相关产品推荐
相关产品推荐

