You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Word2Vec的阿拉伯语书籍推荐系统报错排查与方案咨询

阿拉伯语书籍推荐系统KeyError问题及模型适配建议

一、KeyError报错解决方法

报错核心原因:输入的书名الخليفة未在数据集的Title列中匹配到,大概率是输入书名与数据集中的书名格式不一致(比如未做相同的阿拉伯语标准化、存在变音符号/标点差异)。

具体修复步骤:

  1. 统一文本预处理规则
    将用于书籍描述的阿拉伯语预处理逻辑,同步应用到Title列,确保输入书名与数据中的标题格式一致:

    # 合并预处理步骤为一个函数
    def preprocess_arabic_text(text):
        text = remove_diacritics(text)
        text = remove_punctuations(text)
        text = normalize_arabic(text)
        text = text.strip()  # 去除首尾空格
        return text
    
    # 对数据集的Title列做预处理,生成标准化后的标题列
    df1['processed_title'] = df1['Title'].apply(preprocess_arabic_text)
    
  2. 修改推荐函数的索引匹配逻辑
    改用标准化后的标题创建索引,并对输入的书名先做预处理,同时增加容错判断:

    # 提前创建预处理后的标题与索引映射(只需执行一次)
    indices = pd.Series(df1.index, index=df1['processed_title']).drop_duplicates()
    
    # 修改推荐函数
    def recommendations2(title):
        # 对输入书名做预处理
        processed_input = preprocess_arabic_text(title)
        
        # 容错判断:如果书名不存在,直接提示
        if processed_input not in indices:
            print(f"未找到书名:{title},请检查输入或数据集内容")
            return
        
        idx = indices[processed_input]
        sim_scores = list(enumerate(cosine_similaritiess[idx]))
        sim_scores = sorted(sim_scores, key=lambda x: x[1], reverse=True)
        sim_scores = sim_scores[1:6]  # 排除自身
        book_indices = [i[0] for i in sim_scores]
        
        recommend = df1[['Title', 'Cover']].iloc[book_indices]
        for index, row in recommend.iterrows():
            response = requests.get(row['Cover'])
            img = Image.open(BytesIO(response.content))
            plt.figure()
            plt.imshow(img)
            plt.title(row['Title'])
    
  3. 验证数据集内容
    先确认数据集中是否真的包含目标书名,执行以下代码排查:

    # 模糊匹配检查数据集中的相关标题
    print(df1[df1['processed_title'].str.contains('خليف', case=False)])
    

二、阿拉伯语模型适配建议

当前使用的google_model是英文预训练Word2Vec模型,阿拉伯语词汇基本不在其词表中,会导致大量词汇被忽略,生成的向量准确性极低,推荐效果无法保障。必须更换为阿拉伯语专属预训练模型:

推荐模型及优化方案:

  • AraVec:专门针对阿拉伯语训练的Word2Vec模型,支持多种场景(如推特、新闻)的预训练版本,能准确捕捉阿拉伯语词汇语义。
  • FastText阿拉伯语模型:支持未登录词(OOV),对阿拉伯语的形态变化(如词根、派生词)处理更友好。
  • ArabERT/BERT Arabic:基于Transformer的预训练模型,通过句子嵌入替代平均Word2Vec向量,能生成更精准的语义表示,推荐效果更优。

模型替换示例(以AraVec为例):

# 加载阿拉伯语预训练Word2Vec模型(需提前下载)
from gensim.models import Word2Vec
arabic_w2v_model = Word2Vec.load("aravec_twitter_300d.model")

# 修改vectors2函数中的模型引用
def vectors2(x):
    global word_embeddingss
    word_embeddingss = []
    for line in df1['c']:
        avgword2vecc = None
        countt = 0
        for word in line.split():
            # 替换为阿拉伯语模型的词表检查
            if word in arabic_w2v_model.wv.vocab:
                countt += 1
                if avgword2vecc is None:
                    avgword2vecc = arabic_w2v_model.wv[word]
                else:
                    avgword2vecc = avgword2vecc + arabic_w2v_model.wv[word]
        if avgword2vecc is not None:
            avgword2vecc = avgword2vecc / countt
            word_embeddingss.append(avgword2vecc)

额外优化:

将向量生成和余弦相似度计算提前执行(只需一次),避免每次推荐重复计算,大幅提升效率:

# 提前生成向量和余弦相似度
vectors2(df1)
cosine_similaritiess = cosine_similarity(word_embeddingss, word_embeddingss)

内容的提问来源于stack exchange,提问作者Nadeen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 15:42:27